NVSentinel

NVIDIAApache-2.0活跃维护

在 Kubernetes 集群里自动发现 GPU 节点故障并执行修复,减少加速计算任务因硬件异常中断。

NVSentinel detects and remediates GPU faults on Kubernetes nodes

v1.31.0发布于 2026-11-07 07:48 UTC433star +2 / 7 天171fork同步于 2026-11-10 18:00 UTC

怎么上手

由 README 提炼,执行前请确认
helm upgrade --install nvsentinel oci://ghcr.io/nvidia/nvsentinel --version v1.31.0 --namespace nvsentinel --set podMonitor.enabled=false --wait
硬件要求按 README 说明

README 未给出显存或 CPU 要求;已验证支持 NVIDIA Volta、Ampere、Hopper、Ada Lovelace 和 Blackwell 架构 GPU,需运行在 Kubernetes 1.34+ 集群上并已部署 NVIDIA GPU Operator。无 GPU 时可用本地 KIND 集群加模拟 DCGM 跑演示。

纯 CPU 可运行
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

在 Kubernetes 节点上实时检测 GPU 故障并自动隔离、修复的运维组件

在 Kubernetes 集群里自动发现 GPU 节点故障并执行修复,减少加速计算任务因硬件异常中断。

核心能力

  • 通过 DCGM、syslog 和云厂商维护事件实时检测 GPU、网卡与系统级故障
  • 故障节点自动 cordon 并 drain,阻止坏卡影响其他训练任务
  • 支持定向 GPU reset 或整机重启自动修复,修复后节点自动恢复上线
  • 模块化架构,健康监控、drain 策略与修复动作均可插拔扩展
  • 可选 Preflight 以 init 容器形式在作业启动前校验节点健康

容易踩的坑

GPU Operator 必须加 --set dcgm.enabled=true 以独立服务方式暴露 DCGM,否则 NVSentinel 连不上;需先装 cert-manager v1.21+ 提供 webhook 与内部 gRPC 的 TLS 证书;默认只开监控,cordon、drain、重启等保护与修复能力要逐个加 --set 开关启用,且小集群需关闭故障隔离的熔断器。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.31.0
  1. v1.31.0Release v1.31.0最新正式版2026-11-07 · 2026-11-07 07:48 UTC

    Release v1.31.0

    This release adds Akamai Cloud (LKE) support to janitor-provider and csp-health-monitor, adds IPv6 support, and lets janitor stop GPU clients outside the GPU Operator and patch the GPU reset Job. A new default fault-quarantine rule set cordons nodes for fatal health-events-analyzer events. It also fixes several PostgreSQL change-stream problems, stops a GPU reset that a retry recovers from rebooting the node, and keeps fault-quarantine running on a cluster with no GPU nodes.

    [!NOTE] DCGM 3.x support in GPU Health Monitor is deprecated. It will be removed on 30 November 2026. DCGM 3.x is end-of-life and gets no more patches. After the removal, NVSentinel does not detect faults on nodes that run DCGM 3.x. To find these nodes, run kubectl get nodes -l nvsentinel.dgxc.nvidia.com/dcgm.version=3.x. Upgrade DCGM on these nodes to 4.x before you upgrade to the release that removes DCGM 3.x support. For the steps in each global.dcgm.mode, see GPU Health Monitor: DCGM 3.x Support Removal. To give feedback, comment on #2102.

    Upgrade Notes

    Fault-quarantine rule set for health-events-analyzer events (#2335, #2297)

    health-events-analyzer publishes fatal derived events, such as MultipleRemediations and RepeatedXID74Reg0HardwareIssue. No default fault-quarantine rule set matched them, so these events set node conditions but did not cordon, drain or remediate the node. The new default rule set Health events analyzer fatal error ruleset cordons the node for a fatal health-events-analyzer event. This is a change to the default of fault-quarantine.ruleSets. helm upgrade --reuse-values keeps your previous rule sets. If you run health-events-analyzer and want these events to quarantine nodes, upgrade with --reset-then-reuse-values (Helm 3.14 or later). It keeps your own values and applies the new chart defaults. If you set your own ruleSets, copy the rule set from the v1.31.0 chart.

    XID 74 rules in health-events-analyzer (#2271, #2270)

    The four XID 74 solo rules took their registers and their GPU from the node's stored events, not from the incoming XID 74 event. After one matching XID 74 on a GPU, every later XID 74 on the node fired the rule, and the CONTACT_SUPPORT event could name a GPU whose registers did not match, or a GPU that was not solo. The rules now read the registers and the GPU from the incoming event. The fix is in the default value of health-events-analyzer.config. helm upgrade --reuse-values keeps your previous value. If you run health-events-analyzer, upgrade with --reset-then-reuse-values. If you set your own config, copy the four XID 74 solo rules from the v1.31.0 chart.

    Major New Features

    Akamai Cloud (LKE) Support (#2114, #2115)

    NVSentinel now supports Akamai Cloud (Linode Kubernetes Engine, LKE):

    • janitor-provider (#2114): with janitor-provider.csp.provider: akamai, janitor reboots and replaces nodes through the Akamai Cloud API. A reboot is complete when the instance is running and the kubelet reports a new boot ID. A terminate recycles an LKE node, so LKE provisions a replacement and the node pool keeps its size. An instance outside LKE is deleted. The provider acts only on a node with a linode://<id> provider ID. Set the API token Secret in janitor-provider.csp.akamai.apiTokenSecretRef. The token needs the linodes:read_write and lke:read_write scopes.
    • csp-health-monitor ([#2115](https:
  2. v1.30.0Release v1.30.02026-11-02 · 2026-11-02 07:32 UTC
    查看更新说明

    Release v1.30.0

    This release adds support for the XID 154 recovery actions of R610 and later drivers, lets the labeler's default GPU class follow a GPU Operator mode switch without manual configuration, adds an option to run metadata-collector without its pod device mapper, and labels platform_connector_health_events_received_total by processing strategy and health. It also fixes the bundled MongoDB network policy for a release that is not named after its namespace, and stops a truncated node condition from staying True after every GPU recovers.

    [!NOTE] DCGM 3.x support in GPU Health Monitor is deprecated. It will be removed on 30 November 2026. DCGM 3.x is end-of-life and gets no more patches. After the removal, NVSentinel does not detect faults on nodes that run DCGM 3.x. To find these nodes, run kubectl get nodes -l nvsentinel.dgxc.nvidia.com/dcgm.version=3.x. Upgrade DCGM on these nodes to 4.x before you upgrade to the release that removes DCGM 3.x support. For the steps in each global.dcgm.mode, see GPU Health Monitor: DCGM 3.x Support Removal. To give feedback, comment on #2102.

    Upgrade Notes

    Bundled MongoDB network policy follows the release name (#2186, #2185)

    mongodb-networkpolicy selected the bundled Bitnami MongoDB pods by the release namespace, but the pods carry the release name. With the default networkPolicy.enabled: true, the metrics-access policy still isolated the MongoDB pods, so it blocked port 27017, the replica set could not form, and platform-connectors could not reach MongoDB. The policy now selects the pods by release name.

    If your release name is different from its namespace and you set networkPolicy.enabled: false, no policy selected the MongoDB pods before. Now mongodb-networkpolicy selects them and allows only port 27017 from the release namespace, so a Prometheus in another namespace can no longer scrape the MongoDB exporter on port 9216. To allow it, add a NetworkPolicy for port 9216, for example through mongodb-store.mongodb.extraDeploy.

    Labeler GPU class with --reuse-values (#2108, #1892)

    The new default GPU class (see Major New Features) is a change to labeler.expectedDeviceCounts.classes. helm upgrade --reuse-values keeps your previous class list, so GPUCluster mode still needs manual configuration. If you run GPUCluster mode, or switch between modes, upgrade with --reset-then-reuse-values (Helm 3.14 or later). It keeps your own values and applies the new chart defaults. If you set your own classes, for example to enable the gpu-dra example class, replace your GPU classes with the new default GPU class, as the labeler configuration docs show. Without sources, a GPU DRA class can report 0 on a node that has only the ResourceSlices of another driver.

    Major New Features

    R610 and Later Driver Support for XID 154 (#2166, #2174, #2165)

    XID 154 reports the recovery action that the GPU driver asks for. R610 and later drivers print PF FLR and OS Reboot where earlier drivers printed GPU Reset Required and Node Reboot Required, and they add Bus Reset and System Reboot. syslog-health-monitor now maps PF FLR to COMPONENT_RESET, and OS Reboot, Bus Reset and System Reboot to RESTART_BM. A bus reset covers more than the single-GPU reset that COMPONENT_RESET runs, so it gets a node reboot. With fault-remediation enabled, NVSentinel resets the GPU or reboots the node for these

  3. v1.29.0Release v1.29.02026-10-26 · 2026-10-26 10:53 UTC
    查看更新说明

    Release v1.29.0

    This release lets node-drainer select a drain mode by the kind of a pod's controller and adds SELinux support for RKE2 and SUSE Linux Enterprise. It also stops the generic reboot from rebooting a node twice, stops fault-remediation from creating a second maintenance CR after a read error, and fixes node drains that never finished on a bundled MongoDB with fewer than three members. Several behaviours change on upgrade — please read the Upgrade Notes below.

    [!NOTE] DCGM 3.x support in GPU Health Monitor is deprecated. It will be removed on 30 November 2026. DCGM 3.x is end-of-life and gets no more patches. After the removal, NVSentinel does not detect faults on nodes that run DCGM 3.x. To find these nodes, run kubectl get nodes -l nvsentinel.dgxc.nvidia.com/dcgm.version=3.x. Upgrade DCGM on these nodes to 4.x before you upgrade to the release that removes DCGM 3.x support. For the steps in each global.dcgm.mode, see GPU Health Monitor: DCGM 3.x Support Removal. To give feedback, comment on #2102.

    Upgrade Notes

    Generic reboot image needs sh and cat (#2110, #2077)

    With janitor-provider.csp.provider: generic, every reboot Job now runs its command through sh -c, because the command first checks the node boot ID. The default command was chroot /host reboot, which ran without a shell. The image in janitor-provider.csp.generic.rebootImage must now include sh and cat. The default busybox image has both. If your custom image has no sh, the reboot container does not start and the node does not reboot.

    Bundled MongoDB disruption budget (#2112, #2111)

    The bundled Bitnami MongoDB set mongodb-store.mongodb.pdb.minAvailable: 2. With fewer than three members, the PodDisruptionBudget allowed no evictions, so a drain of a node that hosted a member never finished. The chart now leaves pdb.minAvailable and pdb.maxUnavailable empty, and the subchart renders maxUnavailable: 1. With one or two members, a drain can now evict a member, and the replica set has no primary until the pod runs again. With more than three members, the budget allows one eviction at a time, where minAvailable: 2 allowed more.

    helm upgrade --reuse-values keeps minAvailable: 2. If you run the bundled MongoDB with a member count other than three, upgrade with --reset-then-reuse-values (Helm 3.14 or later). It keeps your own values and applies the new chart defaults.

    RepeatedXIDErrorOnSameGPU skips XID 45 events (#2064, #2050)

    The RepeatedXIDErrorOnSameGPU rule in health-events-analyzer never counted XID 45, but each XID 45 event still started the rule's 24-hour MongoDB query. A job teardown can produce a burst of XID 45 events, and these queries loaded the MongoDB primary and delayed change-stream processing. XID 45 events no longer start the rule.

    The fix is in the default value of health-events-analyzer.config. helm upgrade --reuse-values keeps your previous value, so XID 45 events still start the query. If you run health-events-analyzer, upgrade with --reset-then-reuse-values. If you set your own config, copy the two XID 45 exclusions from the RepeatedXIDErrorOnSameGPU rule in the v1.29.0 chart.

    Major New Features

    Drain Modes by Pod Owner Kind (#2049, #1689)

    A node-drainer.podDrainPolicies entry can now select pods by the kind of their controller, with the new `ownerKind

  4. v1.28.0Release v1.28.02026-10-19 · 2026-10-19 07:34 UTC
    查看更新说明

    Release v1.28.0

    NVSentinel is now graduated.

    This release makes metadata-collector and embedded-mode gpu-health-monitor leave a node during GPU Operator driver upgrades and MIG changes, lets MongoDB change-stream consumers recover from transient failures, and adds Kubernetes 1.37 support to preflight gang discovery. It also detects XIDs on MIG GPUs and fixes remediation on Amazon DocumentDB. Several behaviours change on upgrade — please read the Upgrade Notes below.

    Upgrade Notes

    metadata-collector and embedded gpu-health-monitor follow nvidia.com/gpu.deploy.client (#1988, #1868)

    metadata-collector, and gpu-health-monitor in embedded-mode, now have a default required node affinity on the nvidia.com/gpu.deploy.client node label. A pod runs when the label is true or absent. The DaemonSet controller removes the pod for any other value, such as paused-for-driver-upgrade, paused-for-mig-change, or false. While the pod is off the node, embedded-mode gpu-health-monitor does not report GPU health for that node. If a driver upgrade or MIG change fails and leaves the label at a paused value, the pods stay off the node until the label is true again.

    The default rule applies only when neither global.affinity nor the component's own affinity is set. global.affinity applies to every NVSentinel component, so if you set it for any reason, these DaemonSets do not get the rule. To keep the rule together with a custom affinity, add its two terms to your affinity, as shown in the metadata-collector and gpu-health-monitor configuration docs.

    Remote DCGM probe hangs are store-only by default (#1984, #1978)

    In the operator-service and external-hostengine modes, gpu-health-monitor reports a hung DCGM probe as a GpuDcgmConnectivityFailure event with error code DCGM_PROBE_HANG. This event used the global processing strategy (EXECUTE_REMEDIATION by default), so the default rules cordoned the node. It now follows gpu-health-monitor.dcgm.probeStoreOnly, which defaults to true, so a remote probe hang is stored and NVSentinel does not act on it. Other DCGM connectivity errors still use the global strategy. To restore remediation for remote probe hangs, set probeStoreOnly: false. That setting also enables remediation for the embedded-mode GpuDcgmUnresponsive event, which recommends RESTART_BM.

    MongoDB metrics in a namespace other than nvsentinel (#2053, #2052)

    The bundled Bitnami MongoDB metrics exporter connected to mongodb-headless.nvsentinel.svc in every namespace, so MongoDB metrics were missing when NVSentinel ran in any other namespace. The fix changes the default value of mongodb-store.mongodb.metrics.args. helm upgrade --reuse-values keeps your previous value, so the exporter still connects to the wrong namespace. If you run the bundled MongoDB in a namespace other than nvsentinel, upgrade with --reset-then-reuse-values (Helm 3.14 or later). It keeps your own values and applies the new chart defaults.

    Major New Features

    GPU Operator Driver Upgrades and MIG Changes (#1988, #1868)

    GPU Operator 26.7 and later uses the nvidia.com/gpu.deploy.client node label to move GPU clients off a node before it unloads the driver or changes the MIG layout. metadata-collector and embedded-mode gpu-health-monitor keep the GPUs open, but they ignored this label, so during a driver upgrade they could keep the old driver in use. Both DaemonSets now leave the node while the label holds any value other than true, and return when it is true again. Older

  5. v1.27.0Release v1.27.02026-10-12 · 2026-10-12 11:12 UTC
    查看更新说明

    Release v1.27.0

    This release adds GPU Operator GPUCluster (DRA) mode support to janitor GPU reset, lifecycle-manager, node-drainer, and preflight. It also adds operator recovery for health-events-analyzer conditions, poll-stall detection for the NIC health monitor, and a percentage form of the standing cordon bound. Several defaults and behaviours change on upgrade — please read the Upgrade Notes below.

    Upgrade Notes

    GpuThermalMarginWatch requires three consecutive polls (#1982, #1980)

    GpuThermalMarginWatch now fails a GPU only when the thermal margin stays below the slowdown threshold for gpu-health-monitor.dcgmFieldsMonitoring.gpuTempLimitMinConsecutivePolls consecutive polls. The default is 3, which is 45 seconds at the default 15-second poll interval. A sample at or above the threshold resets the count. The check reads one sample per poll, and on GB200 under load the margin moves by tens of degrees within seconds. A single sample past the threshold is therefore usually a transient that the GPU's own hardware slowdown already handled. To restore the previous single-sample behaviour, set the value to 1.

    NVLink BER error codes are suppressed by default (#1994, #1944)

    DCGM 4.7.0 removed the NVLink BER health and diagnostic checks because they failed healthy GPUs. Older DCGM hostengines still report DCGM_FR_NVLINK_EFFECTIVE_BER_THRESHOLD and DCGM_FR_NVLINK_SYMBOL_BER_THRESHOLD. Both map to CONTACT_SUPPORT, so the default quarantine rules cordon the node. Both codes are now in the default gpu-health-monitor.dcgmHealthCheck.suppressedErrorCodes list. On DCGM 4.7.0 and later, this has no effect.

    The new default does not reach every installation. helm upgrade --reuse-values keeps the list from your previous release, and a custom suppressedErrorCodes list replaces the default list. In both cases, add the two codes to your list.

    Post-remediation validation (#1962, #1960)

    These changes apply only when post-remediation validation is enabled (fault-quarantine.validation.enabled).

    Quarantine taints stay on the node during validation. Fault-quarantine kept the cordon when it handed a node to validation, but it removed its quarantine taints, so a node with taint-only rule-sets accepted workloads while validation ran. It now keeps the taints too. After validation passes, lifecycle-manager lifts a taint only if lifecycle-manager.config.schedulingGate.taints lists it with remove: true. Any other taint stays on the node, and test pods do not tolerate it unless it is a NoExecute taint. Add every taint that your fault-quarantine rule-sets apply to that list, as described in Validation configuration. With the default rule-sets, this affects the certification-failure taint nvsentinel.dgxc.nvidia.com/nvcre-cert-failed. lifecycle-manager matches taints on key, value, and effect, so with remove: true it also lifts a matching taint that was on the node before the quarantine.

    Partial drain must be configured for both components. Fault-quarantine now reads its own partial-drain setting, fault-quarantine.validation.partialDrainEnabled, which defaults to false. If you set node-drainer.partialDrainEnabled: true, fault-quarantine can count a partial drain as a full drain and start validation before the node is fully drained. Set global.partialDrainEnabled: true instead. It sets both components.

    Janitor GPU reset with global.gpuDraEnabled (#1989, #1859)

    GPUCluster (DRA)

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    NVSentinel

    License Kubernetes Helm

    NVSentinel detects and remediates GPU faults on Kubernetes nodes

    A single bad GPU can silently corrupt a training run or leave a node sitting idle for hours before anyone notices. NVSentinel detects faults as they happen, protects jobs by cordoning and draining the affected node, and remediates it with a GPU reset or a reboot, returning it to service with no paging required.

    • 🔍 Detect: real-time GPU, NIC, and system-level fault detection via DCGM, syslog, and cloud provider maintenance events
    • 🛡️ Protect: cordon and drain the affected node before a fault spreads to other jobs
    • 🔧 Remediate: auto-repair with a targeted GPU reset or a full reboot, then bring the node back into service
    • 🧩 Extensible: pluggable health monitors, drain strategies, and remediation actions

    Prerequisites

    The commands below get you ready for NVSentinel: the first makes sure the GPU Operator exposes DCGM as its own service, since NVSentinel queries it directly instead of going through dcgm-exporter; the second installs cert-manager, which issues the TLS certificates NVSentinel's webhooks and internal services need.

    # GPU Operator: enable DCGM standalone mode (required)
    # By default the GPU Operator embeds DCGM inside dcgm-exporter and doesn't
    # expose it as its own service. NVSentinel connects to DCGM directly, so add
    # `dcgm.enabled=true` to however you already install/upgrade the GPU Operator:
    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia --force-update
    helm upgrade --install gpu-operator nvidia/gpu-operator \
      --namespace gpu-operator --create-namespace \
      --set dcgm.enabled=true \
      --wait
    
    # cert-manager (required): issues TLS certs for NVSentinel's webhooks and internal gRPC
    helm repo add jetstack https://charts.jetstack.io --force-update
    helm upgrade --install cert-manager jetstack/cert-manager \
      --namespace cert-manager --create-namespace \
      --version v1.21.1 --set installCRDs=true \
      --wait
    

    Quick Start

    This block works for both a first install and every later upgrade; rerun it as is. By default it only turns on health monitoring: it won't cordon a node, evict a pod, or reboot a machine, so it's safe to run anywhere. The flags below the command are everything you can layer on later; see Adoption for what each one does.

    NVSENTINEL_VERSION=v1.31.0
    
    kubectl create namespace nvsentinel --dry-run=client -o yaml | kubectl apply -f -
    
    # Label the namespcae if the GPU Operator is running in GPUCluster (DRA) mode:
    # kubectl label namespace nvsentinel resource.kubernetes.io/admin-access=true
    
    # Fresh datastore only. If a MongoDB volume already exists without this Secret,
    # recover the original password instead — a new one locks NVSentinel out of that data.
    kubectl get secret mongodb -n nvsentinel >/dev/null 2>&1 || kubectl create secret generic mongodb -n nvsentinel \
      --from-literal=mongodb-root-password="$(openssl rand -hex 24)"
    
    helm upgrade --install nvsentinel oci://ghcr.io/nvidia/nvsentinel \
      --version "$NVSENTINEL_VERSION" \
      --namespace nvsentinel \
      --set podMonitor.enabled=false \
      --wait
    
    # --set labeler.assumeDriverInstalled=true       # GPU nodes use host-installed drivers
    # --set global.gpuDraEnabled=true                # GPU Operator in GPUCluster (DRA) mode
    # --set global.mongodbStore.enabled=true         # Protect: cordon
    # --set global.faultQuarantine.enabled=true      # Protect: cordon
    # --set global.nodeDrainer.enabled=true          # Protect: + drain
    # --set global.faultRemediation.enabled=true     # Remediate
    # --set global.janitor.enabled=true              # Remediate
    # --set global.janitorProvider.enabled=true      # Remediate
    # --set janitor-provider.csp.provider=generic    # Remediate
    # --set global.preflight.enabled=true            # Preflight
    

    Verify it's running:

    kubectl get pods -n nvsentinel
    

    Adoption

    We recommend starting with monitoring, then enabling one step at a time as you get comfortable with how NVSentinel runs in your environment.

    1. Monitor

    NVSentinel watches your GPUs and system logs and reports faults as Kubernetes node conditions. Nothing here can disrupt a workload, so it's the safe default to run anywhere while you get a feel for what it reports. The command above already does this; no extra flags needed.

    2a. Protect: Cordon and drain

    Uncomment these flags:

    --set global.mongodbStore.enabled=true \
    --set global.faultQuarantine.enabled=true \
    --set global.nodeDrainer.enabled=true
    

    NVSentinel will now cordon a faulty node, so your scheduler stops placing new work on it, and drain its existing workloads. Only want to cordon, without draining yet? Drop the nodeDrainer line above. This is as far as NVSentinel goes unless you also enable remediation below; a cordoned (and optionally drained) node stays isolated until you (or your own tooling) repair it.

    [!NOTE] Small/Demo cluster? Disable the circuit breaker. Fault quarantine ships a breaker that trips once the nodes cordoned in a 5 minute window reach 50% of the nodes count. A tripped breaker pauses all event processing, including uncordoning a recovered node.

    --set fault-quarantine.circuitBreaker.enabled=false   # test and demo clusters only
    

    2b. Protect: Remediate

    Remediation builds on Protect, so uncomment all of Protect's flags plus these:

    --set global.faultRemediation.enabled=true \
    --set global.janitor.enabled=true \
    --set global.janitorProvider.enabled=true \
    --set janitor-provider.csp.provider=generic
    

    NVSentinel will now reboot a faulty node automatically once it's cordoned and drained. This runs as a privileged job right on the node itself, so it works on day one with no credentials to set up, regardless of whether you're running on-prem or on a CSP. To reboot through your cloud provider's API instead, see the cloud provider configuration guide.

    3. Preflight (optional)

    Preflight tries to keep a job from ever landing on bad hardware. It runs as an active check, an init container in the workload pod, that confirms the node is ready before the job starts.

    Uncomment this flag:

    --set global.preflight.enabled=true
    

    This uses Kubernetes' native gang scheduling (a cluster admin needs to enable the GenericWorkload feature gate, plus the GangScheduling gate on Kubernetes 1.35 and 1.36; Kubernetes 1.37 removed GangScheduling). Using a different scheduler instead? See the gang discovery guide.

    Label the namespaces that should run it. It's opt-in per namespace, so nothing changes until you do this:

    kubectl label namespace <your-namespace> nvsentinel.nvidia.com/preflight=enabled
    

    Verify it's running: submit a GPU pod in the labeled namespace, then check that preflight added its init containers.

    kubectl get pod <pod-name> -n <your-namespace> -o jsonpath='{.spec.initContainers[*].name}'
    

    Architecture

    NVSentinel is a set of independent modules coordinated through a shared MongoDB event store and the Kubernetes API; no module talks to another directly.

    graph LR
        subgraph "Health Monitors"
            GPU["GPU Health Monitor<br/>(DCGM)"]
            SYS["Syslog Health Monitor<br/>(Journalctl)"]
            CSP["CSP Health Monitor<br/>(Maintenance Events)"]
            NIC["NIC Health Monitor<br/>(NIC)"]
            HEA["Health Events Analyzer<br/>(Pattern Detection)"]
            KOM["Kubernetes Object Monitor<br/>(Kube objects)"]
        end
    
        subgraph "Ingestion"
            PC["Platform Connectors<br/>(gRPC Server)"]
            STORE[("MongoDB Store<br/>(Event Database)")]
        end
    
        subgraph "Fault Management"
            FQ["Fault Quarantine<br/>(Node Cordon / Taint)"]
            ND["Node Drainer<br/>(Workload Eviction)"]
            FR["Fault Remediation<br/>(Trigger Node Maintenance)"]
            JAN["Janitor<br/>(Reset / Reboot)"]
        end
    
        subgraph "Kubernetes Cluster"
            K8S["Kubernetes API<br/>(Nodes, Pods, Events)"]
        end
    
        GPU -->|gRPC| PC
        SYS -->|gRPC| PC
        CSP -->|gRPC| PC
        NIC -->|gRPC| PC
        KOM -->|gRPC| PC
        HEA -->|gRPC| PC
    
        PC -->|persist| STORE
        PC -->|update node conditions, events| K8S
        STORE ~~~ FQ
        STORE ~~~ ND
        STORE ~~~ FR
        STORE ~~~ JAN
    
        FQ -->|reconcile changes| STORE
        FQ -->|cordon| K8S
    
        ND -->|reconcile changes| STORE
        ND -->|drain| K8S
    
        FR -->|reconcile changes| STORE
        FR -->|create maintenance CRs| K8S
    
        JAN -.->|reconcile maintenance CRs| K8S
        JAN -->|reboot / reset| K8S
    

    Try the Demo

    Demo Videos

    See NVSentinel in action: click any thumbnail to watch.

    See the demos directory for full descriptions.

    Run It Locally

    Want to try NVSentinel without GPU hardware? Run our Local Fault Injection Demo:

    • 🚀 Runs on a laptop - entirely in a local KIND cluster
    • 🔍 The whole pipeline - a running workload is drained off a faulty node, the node is repaired, and the workload is rescheduled once it returns
    • 🎯 No GPU required - uses simulated DCGM for testing
    cd demos/local-fault-injection-demo
    ./demo.sh  # Creates the cluster, installs NVSentinel, breaks a GPU, and watches it recover
    

    Supported GPUs

    Validated on NVIDIA Volta, Ampere, Hopper, Ada Lovelace and Blackwell architectures. See the GPU support for more information.

    Learn more

    For more, including configuration options, external database setup, writing custom health checks, and operational runbooks, visit docs.nvidia.com/nvsentinel.

    See ADOPTERS.md for organizations and projects that use or build on NVSentinel.

    Distribution

    NVSentinel is published exclusively through the channels below. There is no other official distribution — if you obtained NVSentinel elsewhere, treat it as untrusted.

    ChannelLocation
    Helm chart (OCI)oci://ghcr.io/nvidia/nvsentinel
    Container imagesghcr.io/nvidia/nvsentinel/<component> — e.g. ghcr.io/nvidia/nvsentinel/labeler
    ReleasesGitHub Releases, each with a versions.txt pinning every component image for that version
    Sourcegithub.com/NVIDIA/NVSentinel
    Documentationdocs.nvidia.com/nvsentinel

    Container images carry a Sigstore-signed CycloneDX SBOM attestation and a SLSA build provenance attestation. See SECURITY.md for how to verify them.

    Contributing

    We welcome contributions! Here's how to get started:

    Ways to Contribute:

    • 🐛 Report bugs and request features via issues
    • 🧭 See what we're working on in the roadmap
    • 📝 Improve documentation
    • 🧪 Add tests and increase coverage
    • 🔧 Submit pull requests to fix issues
    • 💬 Help others in discussions

    Getting Started:

    1. Read the Contributing Guide for guidelines
    2. Check the Development Guide for setup instructions
    3. Browse open issues for opportunities
    4. Review our Code of Conduct

    Support

    Stay Connected

    • ⭐ Star this repository to show your support
    • 👀 Watch for updates on releases and announcements
    • 🔗 Share NVSentinel with others who might benefit

    License

    Apache License 2.0. See LICENSE.


    Built with ❤️ by NVIDIA for GPU infrastructure reliability