NPU Driver Auto Upgrade¶
The operator replaces and validates drivers on each node according to the configured upgrade policy.
Automatic Upgrade Configuration¶
Set driver.upgradePolicy.autoUpgrade: true in your existing Helm values.
Use npuPodDeletion to control which NPU pods may be evicted. In an RBLNClusterPolicy manifest, set these options under spec.driver.upgradePolicy.podDeletion.
For a complete example that upgrades Rebel100™ and ATOM™ nodes in turn and verifies the loaded version, see Upgrade NPU drivers automatically.
Upgrade Policy¶
| Setting | Effect | Default |
|---|---|---|
maxParallelUpgrades | Maximum concurrent node upgrades | 1 |
podRestartTimeoutSeconds | Driver pod replacement timeout; expiry marks the node upgrade-failed | 1800 |
waitForCompletion.podSelector | Pods to wait for after cordon, before eviction. Empty = skip the wait | "" |
waitForCompletion.timeoutSeconds | Wait limit, after which the upgrade proceeds. 0 = wait indefinitely | 0 |
npuPodDeletion.force | Allow eviction of NPU pods without a controller | false |
npuPodDeletion.timeoutSeconds | Operator eviction timeout | 300 |
npuPodDeletion.deleteEmptyDirData | Allow eviction of NPU pods using emptyDir; contents are lost | false |
Starting and Stopping Automatic Upgrades¶
Update and apply driver.image.tag or the target instance's driver.instances.<key>.image.tag in your existing Helm values to start a rollout. For a directly managed RBLNDriver, update spec.version.
In automatic mode, the operator replaces driver pods itself, so the administrator does not need to delete them. If waitForCompletion is configured, the operator waits for the selected pods before eviction. It releases its own cordon after driver replacement and validation. Cordons set by an administrator remain in place.
Setting autoUpgrade: false stops the automatic rollout. The operator releases its own cordons, but upgrade-failed nodes stay cordoned until recovery. Resolve the cause and request a retry for failed nodes.
Node States¶
Read the current state from the rebellions.ai/npu-driver-upgrade-state node label.
| State | What to expect |
|---|---|
upgrade-required | Waiting for an upgrade slot |
cordon-required | Blocking new scheduling on the node |
wait-for-jobs-required | Waiting for Running or Pending pods matching waitForCompletion.podSelector; continues on timeout |
pod-deletion-required | Evicting NPU pods; blocked eviction results in upgrade-skipped |
pod-restart-required | Replacing the driver pod and waiting for readiness |
validation-required | Waiting up to 600 seconds for the operator validator to become Ready |
uncordon-required | Releasing the upgrade's cordon |
upgrade-done | Upgrade complete |
maxParallelUpgrades limits concurrent upgrades. Failed nodes also hold a slot; skipped and completed nodes do not.
Upgrade Verification¶
Rollout Status¶
Query the rollout status with the following commands:
status.driverUpgrade contains the following fields.
| Field | Meaning |
|---|---|
total | Total nodes tracked by the upgrade rollout |
done | Nodes whose upgrade is complete |
inProgress | Nodes currently upgrading, excluding pending, skipped, and failed nodes |
pending | Nodes waiting to start an upgrade |
skipped | Nodes whose upgrade was skipped before driver replacement; excluded from done |
failed | Nodes whose upgrade failed |
state | Rollout state, listed in the following table |
progress | Completed/total node count, with (N skipped) appended when nodes were skipped; for example, 12/40 (2 skipped) |
lastTransitionTime | Time when the per-state node counts last changed |
| Rollout state | Meaning |
|---|---|
Degraded | At least one failed node; its upgrade slot remains occupied |
InProgress | Nodes are upgrading or waiting, with no failed nodes |
PartiallyComplete | No nodes remain in progress or pending, but some were skipped |
Complete | All tracked nodes completed the upgrade |
Upgrade Conditions¶
Check the status and reason of the following conditions under status.conditions.
| Condition | When True | reason when True | reason when False |
|---|---|---|---|
DriverUpgradeInProgress | Nodes are upgrading or waiting | UpgradeInProgress | NoUpgradeInProgress |
UpgradeDegraded | Failed nodes exist | FailedNodes | NoFailedNodes |
UpgradeIncomplete | Skipped nodes remain, with no nodes upgrading or waiting | NodesSkipped | RolloutInProgress or NoSkippedNodes |
UpgradeStalled | Nodes are upgrading, but the per-state node counts have not changed for more than 30 minutes | NoRecentTransition | Progressing |
When UpgradeIncomplete=False, the reason is RolloutInProgress if skipped nodes exist, or NoSkippedNodes otherwise. If failed nodes occupy every upgrade slot and no nodes are in progress, the conditions report UpgradeDegraded=True and UpgradeStalled=False.
Verifying the Running Driver¶
Check that the new driver pod on the target node is Ready, then run rbln-smi to check the upgraded driver version.
Driver Installation Status¶
The RBLNClusterPolicy instance may report notReady while a driver is being replaced. If it does not return to ready, check the nodes named in the Ready condition message and inspect their driver initContainer logs.
Node State and Annotations¶
All of the following annotation names have the rebellions.ai/ prefix.
| Annotation | Use |
|---|---|
npu-driver-upgrade-failure-reason | Failure details; long messages are truncated |
npu-driver-upgrade-failure-step | The step that failed |
npu-driver-upgrade-skip-reason | Eviction blocker; long messages are truncated |
npu-driver-upgrade-cordon | The component that cordoned the node; automatic upgrades set it to operator |
npu-driver-upgrade-requested | Set to true to request a retry |
If an annotation message is truncated, check the operator logs for the full details.
Events¶
| Event | Meaning |
|---|---|
DriverUpgradeStarted | Node admitted for upgrade |
DriverUpgradeSkipped | Eviction blocked the attempt |
DriverUpgradeFailed | Driver pod replacement or validation failed |
DriverUpgradePodStuck | Driver pod has an image pull or startup error; repeats while waiting in the replacement step |
DriverUpgradeCompleted | Upgrade completed |
Skipping Driver Upgrades¶
To exclude a node from driver upgrades, set the following label:
To re-enable upgrades, remove the label:
This label blocks new automatic upgrade attempts. It does not stop an upgrade already in progress or prevent a manual driver pod deletion.
Inspecting state¶
Check which nodes are excluded and the progress of each node:
Skipped and Failed Nodes¶
The failure stage determines whether a node keeps its upgrade slot and cordon.
| State | Effect on the node | Next action |
|---|---|---|
upgrade-skipped | Keeps the old driver and releases the upgrade's cordon. Administrator cordons and nodes in requestor mode remain cordoned | Resolve the eviction blocker and retry |
upgrade-failed | Keeps its cordon and upgrade slot after a driver pod or validation failure | Fix the driver pod or node, then retry |
Requestor mode disables automatic uncordon for a node. It applies whenever the rebellions.ai/npu-driver-upgrade-requestor-mode annotation is present, regardless of its value.
Skip Reasons¶
Eviction targets pods requesting rebellions.ai/* resources or holding a container-mode NPU DRA claim. The default container DeviceClass is npu.rebellions.ai; custom classes bridged to rebellions.ai/* also qualify.
| Blocker | Action |
|---|---|
emptyDir volume | Set npuPodDeletion.deleteEmptyDirData: true, or move the workload. Eviction deletes the volume contents |
| No controller | Set npuPodDeletion.force: true, or delete the pod |
| DaemonSet-managed NPU pod | Exclude this node from the DaemonSet |
| PodDisruptionBudget | Adjust the budget or scale the workload to allow disruption |
Check the node's rebellions.ai/npu-driver-upgrade-skip-reason annotation for the cause. A PodDisruptionBudget blocking eviction may be reported as an eviction timeout.
Driver Pod Timeout¶
Image pull or container startup failures raise a DriverUpgradePodStuck warning. The node becomes upgrade-failed when podRestartTimeoutSeconds expires (default: 1800 seconds) or an unready container has restarted more than ten times. See timeout settings.
Retry Paths¶
After fixing the cause, request a retry and check the state:
If automatic upgrades are disabled, re-enable them before requesting a retry. Re-enabling automatic upgrades alone does not guarantee a retry for failed nodes.
In addition to an explicit retry request, upgrades resume under the following conditions.
| Target | Condition | Result |
|---|---|---|
| Skipped or failed nodes | A different driver version or driver container configuration is applied | Return to the upgrade queue |
| Nodes that failed during driver pod replacement | The pod matches the current configuration, is Running, and all containers are Ready | Proceed to uncordon or completion |
| Nodes that failed during driver pod replacement | The pod template has changed, and the existing pod is not being deleted | Return to the upgrade queue to retry pod replacement |
A node that failed validation does not recover on its own when its pod becomes Ready. Request a retry explicitly or change the driver version or driver container configuration.