GPU Operator 必须加 --set dcgm.enabled=true 以独立服务方式暴露 DCGM,否则 NVSentinel 连不上;需先装 cert-manager v1.21+ 提供 webhook 与内部 gRPC 的 TLS 证书;默认只开监控,cordon、drain、重启等保护与修复能力要逐个加 --set 开关启用,且小集群需关闭故障隔离的熔断器。
NVSentinel
NVIDIAApache-2.0活跃维护在 Kubernetes 集群里自动发现 GPU 节点故障并执行修复,减少加速计算任务因硬件异常中断。
NVSentinel detects and remediates GPU faults on Kubernetes nodes
helm upgrade --install nvsentinel oci://ghcr.io/nvidia/nvsentinel --version v1.31.0 --namespace nvsentinel --set podMonitor.enabled=false --waitREADME 未给出显存或 CPU 要求;已验证支持 NVIDIA Volta、Ampere、Hopper、Ada Lovelace 和 Blackwell 架构 GPU,需运行在 Kubernetes 1.34+ 集群上并已部署 NVIDIA GPU Operator。无 GPU 时可用本地 KIND 集群加模拟 DCGM 跑演示。
在 Kubernetes 节点上实时检测 GPU 故障并自动隔离、修复的运维组件
在 Kubernetes 集群里自动发现 GPU 节点故障并执行修复,减少加速计算任务因硬件异常中断。
核心能力
- 通过 DCGM、syslog 和云厂商维护事件实时检测 GPU、网卡与系统级故障
- 故障节点自动 cordon 并 drain,阻止坏卡影响其他训练任务
- 支持定向 GPU reset 或整机重启自动修复,修复后节点自动恢复上线
- 模块化架构,健康监控、drain 策略与修复动作均可插拔扩展
- 可选 Preflight 以 init 容器形式在作业启动前校验节点健康
容易踩的坑
- 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 eachglobal.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
MultipleRemediationsandRepeatedXID74Reg0HardwareIssue. 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 setHealth events analyzer fatal error rulesetcordons the node for a fatal health-events-analyzer event. This is a change to the default offault-quarantine.ruleSets.helm upgrade --reuse-valueskeeps 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 ownruleSets, 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_SUPPORTevent 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 ofhealth-events-analyzer.config.helm upgrade --reuse-valueskeeps your previous value. If you run health-events-analyzer, upgrade with--reset-then-reuse-values. If you set your ownconfig, 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 isrunningand 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 alinode://<id>provider ID. Set the API token Secret injanitor-provider.csp.akamai.apiTokenSecretRef. The token needs thelinodes:read_writeandlke:read_writescopes. - csp-health-monitor ([#2115](https:
- janitor-provider (#2114): with
- 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_totalby 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 stayingTrueafter 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 eachglobal.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-networkpolicyselected the bundled Bitnami MongoDB pods by the release namespace, but the pods carry the release name. With the defaultnetworkPolicy.enabled: true, themetrics-accesspolicy 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. Nowmongodb-networkpolicyselects 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 throughmongodb-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-valueskeeps 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 ownclasses, for example to enable thegpu-draexample class, replace your GPU classes with the new default GPU class, as the labeler configuration docs show. Withoutsources, a GPU DRA class can report0on 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 FLRandOS Rebootwhere earlier drivers printedGPU Reset RequiredandNode Reboot Required, and they addBus ResetandSystem Reboot. syslog-health-monitor now mapsPF FLRtoCOMPONENT_RESET, andOS Reboot,Bus ResetandSystem ReboottoRESTART_BM. A bus reset covers more than the single-GPU reset thatCOMPONENT_RESETruns, so it gets a node reboot. With fault-remediation enabled, NVSentinel resets the GPU or reboots the node for these - 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 eachglobal.dcgm.mode, see GPU Health Monitor: DCGM 3.x Support Removal. To give feedback, comment on #2102.Upgrade Notes
Generic reboot image needs
shandcat(#2110, #2077)With
janitor-provider.csp.provider: generic, every reboot Job now runs its command throughsh -c, because the command first checks the node boot ID. The default command waschroot /host reboot, which ran without a shell. The image injanitor-provider.csp.generic.rebootImagemust now includeshandcat. The defaultbusyboximage has both. If your custom image has nosh, 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 leavespdb.minAvailableandpdb.maxUnavailableempty, and the subchart rendersmaxUnavailable: 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, whereminAvailable: 2allowed more.helm upgrade --reuse-valueskeepsminAvailable: 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.RepeatedXIDErrorOnSameGPUskips XID 45 events (#2064, #2050)The
RepeatedXIDErrorOnSameGPUrule 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-valueskeeps 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 ownconfig, copy the two XID 45 exclusions from theRepeatedXIDErrorOnSameGPUrule in the v1.29.0 chart.Major New Features
Drain Modes by Pod Owner Kind (#2049, #1689)
A
node-drainer.podDrainPoliciesentry can now select pods by the kind of their controller, with the new `ownerKind - 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 thenvidia.com/gpu.deploy.clientnode label. A pod runs when the label istrueor absent. The DaemonSet controller removes the pod for any other value, such aspaused-for-driver-upgrade,paused-for-mig-change, orfalse. 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 istrueagain.The default rule applies only when neither
global.affinitynor the component's ownaffinityis set.global.affinityapplies 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-serviceandexternal-hostenginemodes, gpu-health-monitor reports a hung DCGM probe as aGpuDcgmConnectivityFailureevent with error codeDCGM_PROBE_HANG. This event used the global processing strategy (EXECUTE_REMEDIATIONby default), so the default rules cordoned the node. It now followsgpu-health-monitor.dcgm.probeStoreOnly, which defaults totrue, 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, setprobeStoreOnly: false. That setting also enables remediation for the embedded-modeGpuDcgmUnresponsiveevent, which recommendsRESTART_BM.MongoDB metrics in a namespace other than
nvsentinel(#2053, #2052)The bundled Bitnami MongoDB metrics exporter connected to
mongodb-headless.nvsentinel.svcin every namespace, so MongoDB metrics were missing when NVSentinel ran in any other namespace. The fix changes the default value ofmongodb-store.mongodb.metrics.args.helm upgrade --reuse-valueskeeps your previous value, so the exporter still connects to the wrong namespace. If you run the bundled MongoDB in a namespace other thannvsentinel, 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.clientnode 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 thantrue, and return when it istrueagain. Older - 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.gpuTempLimitMinConsecutivePollsconsecutive polls. The default is3, 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 to1.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_THRESHOLDandDCGM_FR_NVLINK_SYMBOL_BER_THRESHOLD. Both map toCONTACT_SUPPORT, so the default quarantine rules cordon the node. Both codes are now in the defaultgpu-health-monitor.dcgmHealthCheck.suppressedErrorCodeslist. On DCGM 4.7.0 and later, this has no effect.The new default does not reach every installation.
helm upgrade --reuse-valueskeeps the list from your previous release, and a customsuppressedErrorCodeslist 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.taintslists it withremove: true. Any other taint stays on the node, and test pods do not tolerate it unless it is aNoExecutetaint. 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 taintnvsentinel.dgxc.nvidia.com/nvcre-cert-failed. lifecycle-manager matches taints on key, value, and effect, so withremove: trueit 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 tofalse. If you setnode-drainer.partialDrainEnabled: true, fault-quarantine can count a partial drain as a full drain and start validation before the node is fully drained. Setglobal.partialDrainEnabled: trueinstead. It sets both components.Janitor GPU reset with
global.gpuDraEnabled(#1989, #1859)GPUCluster (DRA)
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
NVSentinel
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
- Kubernetes 1.34+
- Helm 3.0+
- NVIDIA GPU Operator
- cert-manager v1.21+
- Persistent storage support for a database
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.
| Channel | Location |
|---|---|
| Helm chart (OCI) | oci://ghcr.io/nvidia/nvsentinel |
| Container images | ghcr.io/nvidia/nvsentinel/<component> — e.g. ghcr.io/nvidia/nvsentinel/labeler |
| Releases | GitHub Releases, each with a versions.txt pinning every component image for that version |
| Source | github.com/NVIDIA/NVSentinel |
| Documentation | docs.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:
- Read the Contributing Guide for guidelines
- Check the Development Guide for setup instructions
- Browse open issues for opportunities
- Review our Code of Conduct
Support
- 🐛 Bug Reports: Create an issue
- ❓ Questions: Start a discussion
- 🔒 Security: See Security Policy
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