NVSentinel Configuration Documentation
This directory contains technical configuration guides for NVSentinel operators and system administrators.
Global Configuration
Global settings apply across all NVSentinel modules and are configured under the global: section in the Helm values.
Image Configuration
Image tag for all NVSentinel modules.
Init Container Image
Shell image for the helper init containers that NVSentinel modules run before startup: fix-audit-log-permissions sets ownership on the audit log directory, and fix-cert-permissions copies PostgreSQL client certificates with the permissions the client needs. A module runs them only when audit logging is enabled or a client certificate is mounted.
Change this when you mirror images into a private registry.
Dry Run Mode
Run all modules in dry-run mode where actions are logged but not executed.
Metrics Port
Prometheus metrics port used by all modules.
Cluster Domain
DNS domain of the cluster. The chart uses it to build in-cluster service hostnames, such as the datastore URI and the deployment platform connector’s address, and the DNS names of the certificates it issues. The default is cluster.local; set it when the cluster uses another domain (kubeadm networking.dnsDomain, Cluster API clusterNetwork.serviceDomain).
The vendored datastore charts do not read NVSentinel’s global values, and a few values hold a full hostname, so set the same domain there as well. The same goes for global.datastore.connection.host if you set it.
Change Stream Resume Tokens
Watcher-based components persist change stream resume tokens so they can resume from the last processed event after a restart. To skip accumulated events and start from the current stream head, scale the component to zero, patch its key in the runtime resume-control ConfigMap from RESUME to CREATE, then restore its replicas. The component deletes only its own resume token, records a cold-start cutoff timestamp, skips startup cold-start recovery for that run, opens its watcher from the current stream head, and writes its key back to RESUME. Future restarts still run cold-start recovery, but only for records newer than the recorded cutoff.
Helm does not create the resume-control ConfigMap. Components create it at runtime if it is missing, so GitOps tools such as Argo CD do not revert operator patches to its data.
When a component starts and its key is missing, it writes its key as RESUME; the ConfigMap therefore self-populates with explicit per-component state over time.
Example one-shot reset for node-drainer:
This applies to fault-quarantine, node-drainer, fault-remediation, and health-events-analyzer.
Node Scheduling
Control where NVSentinel pods are scheduled.
Pod Priority
NVSentinel pods set no priorityClassName by default, so each takes the priority of the
cluster’s globalDefault PriorityClass if one is configured, and 0 otherwise. A pod can
preempt another only when its own priority is higher, so on a saturated cluster the
scheduler leaves these pods Pending rather than preempting a lower-priority workload, and a
node can end up with no health monitor while the workload still reports healthy.
Assign a priority class to avoid that. The split matches the node-scheduling values above:
priorityClassName covers the node-level agents (the health monitor, metadata collector
and NIC health monitor DaemonSets, the preflight image cache, plus platform-connectors),
systemPriorityClassName covers the control-plane components (labeler,
health-events-analyzer, fault-quarantine, node-drainer etc). Both apply only to the
components NVSentinel’s own charts render — see Scope
below for the datastore, which needs its own key.
Both default to empty, which leaves the field off the pod spec entirely and preserves the
existing behaviour. Any component can also be set individually, and the global takes
precedence when both are set, consistent with how tolerations behaves:
The priority classes must already exist in the cluster. system-node-critical and
system-cluster-critical are built in; anything else has to be created first.
A higher priority is necessary but not sufficient: preemption also needs an evictable
lower-priority pod on a node that would then fit, and a class with preemptionPolicy: Never
only improves queue order without evicting anything. Both built-in classes above preempt.
Scope: NVSentinel components only
Both globals cover the components NVSentinel’s own charts render. They do not reach the datastore. The MongoDB and PostgreSQL pods come from vendored upstream charts that never read NVSentinel’s global values, so setting the globals and rendering the release leaves those StatefulSets with no priorityClassName.
This matters because the datastore is the component whose eviction hurts most: every module reconciles from it, so a preempted database stops fault detection across the whole cluster while the health monitors it starved keep their own high priority.
Set the priority on the datastore through the upstream chart’s own key:
Note that Percona spells it priorityClass, without Name, and that its key sits under the replica set. The Bitnami MongoDB chart takes separate keys for the arbiter and hidden members, mongodb-store.mongodb.arbiter.priorityClassName and mongodb-store.mongodb.hidden.priorityClassName, if you run them.
The create-mongodb-database initialization Job accepts no priority class from any key. It runs once at install or upgrade and then completes, so it is scheduled against whatever capacity is free at that moment. On a saturated cluster this Job can stay Pending and hold up the install.
Image Pull Secrets
Credentials for pulling images from private registries.
Tracing
Enable OpenTelemetry distributed tracing to get end-to-end visibility into health event processing across all modules.
For full details, see Distributed Tracing.
Audit logging
Enable file-based audit logs of HTTP write operations (POST, PUT, PATCH, DELETE) to the Kubernetes and CSP APIs, with rotation and optional request-body capture.
For full details, see Audit Logging.
Shared Metadata Path
File path where the metadata collector writes GPU metadata and the syslog health monitor reads it. Both components must agree on this path.
Kubelet Root Directory
The kubelet --root-dir. The chart mounts <kubeletRootDir>/pod-resources from the host at the fixed path the metadata collector reads. See Kubelet Root Directory.
Client Certificate Rotation
Lets modules pick up rotated datastore client certificates without a pod restart. A file watcher detects the change and supplies the new certificate to subsequent MongoDB connections. Existing connections keep the certificate they opened with.
Kubernetes Datastore CRDs
Installs the HealthEvent custom resource definition used by the Kubernetes datastore backend. Enable it only when you run that backend instead of MongoDB or PostgreSQL.
Node Condition Cleanup
Removes node conditions that NVSentinel no longer writes. An upgrade that renames or retires a condition leaves the old one on every node, where it stays True forever because nothing updates it any more. The cleanup hook deletes the conditions you name.
The hook runs as a Helm post-upgrade job, so it acts on upgrade rather than on a fresh install, and it takes no action while deprecatedConditions is empty. List only conditions you are certain are retired — deleting a live condition discards a node’s current health state until the monitor writes it again.
PodMonitor
Creates a Prometheus Operator PodMonitor for every NVSentinel component. Disable it if you scrape with annotation-based discovery instead.
See Metrics Reference for what each component exposes.
Platform Connectors Update Strategy
Rolling update strategy for the platform-connectors DaemonSet. type accepts RollingUpdate or OnDelete; rollingUpdate is rendered only for RollingUpdate.
maxUnavailable accepts a percentage or an absolute count — maxUnavailable: 34 updates 34 nodes at a time. A larger value drains the fleet’s health reporting faster during an upgrade; a smaller one keeps more nodes reporting while the rollout runs.
Common Module Settings
Several modules expose the same Kubernetes settings. They behave the same everywhere, so each module’s own guide documents only the options specific to it.
Module-Specific Configuration
Each module has additional configuration options documented in its dedicated guide: