Skip to content

Upgrading the RBLN NPU Operator

Upgrade through Helm or OLM, whichever was used for the installation. For driver replacement, see NPU driver upgrades.

Before upgrading

Review the support matrix and release changes and back up the existing deployment configuration.

kubectl get rblnclusterpolicies,rblndrivers -o yaml > npu-resources-before-upgrade.yaml

For Helm installations, compare the existing user settings with the target chart's defaults.

1
2
3
4
export CHART_VERSION=0.6.0
helm get values rbln-npu-operator -n rbln-system -o yaml > values-before-upgrade.yaml
helm show values oci://docker.io/rebellions/rbln-npu-operator-chart \
  --version "$CHART_VERSION" > chart-defaults.yaml

Upgrading with Helm

Use the existing release name and namespace. Refer to the NPU Operator Helm settings and specify the values to override in npu-values.yaml.

1
2
3
helm upgrade rbln-npu-operator oci://docker.io/rebellions/rbln-npu-operator-chart \
  --version "$CHART_VERSION" -n rbln-system \
  --reset-values -f npu-values.yaml --wait --timeout 10m

Upgrading with OpenShift / OLM

When OLM detects a new version in the channel tracked by the Subscription, it creates an InstallPlan according to the upgrade path.

Check the current version, target version, and approval strategy.

oc get subscriptions,installplans,csv -n rbln-system
oc describe subscription rbln-npu-operator -n rbln-system

In the Subscription, status.installedCSV identifies the current version and status.currentCSV identifies the version selected by OLM. status.installPlanRef.name identifies the InstallPlan for this Subscription.

Once an InstallPlan is created, spec.installPlanApproval determines how the upgrade proceeds.

installPlanApproval Upgrade behavior
Automatic OLM approves the InstallPlan and upgrades automatically
Manual OLM upgrades after you approve the InstallPlan

For Manual, inspect the InstallPlan referenced by the Subscription, check its target version, and approve it.

1
2
3
4
export INSTALL_PLAN='<INSTALL_PLAN_NAME>'
oc describe installplan "$INSTALL_PLAN" -n rbln-system
oc patch installplan "$INSTALL_PLAN" -n rbln-system \
  --type=merge -p '{"spec":{"approved":true}}'

Verifying the upgrade

Check the RBLNDriver and RBLNClusterPolicy instances directly, regardless of whether Helm or OLM reports completion.

$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblndriver --all --timeout=600s
rblndriver.rebellions.ai/rbln-driver-rebel100 condition met

$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblnclusterpolicy/rbln-cluster-policy --timeout=600s
rblnclusterpolicy.rebellions.ai/rbln-cluster-policy condition met

$ kubectl get rblnclusterpolicy rbln-cluster-policy \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state'
NAME                  STATE
rbln-cluster-policy   ready
$ kubectl get rblndriver \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state,READY:.status.readyNodes,DESIRED:.status.desiredNodes'
NAME                   STATE   READY   DESIRED
rbln-driver-rebel100   ready   1       1
$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblndriver --all --timeout=600s
rblndriver.rebellions.ai/rbln-driver-atom condition met

$ kubectl wait --for=jsonpath='{.status.state}'=ready \
  rblnclusterpolicy/rbln-cluster-policy --timeout=600s
rblnclusterpolicy.rebellions.ai/rbln-cluster-policy condition met

$ kubectl get rblnclusterpolicy rbln-cluster-policy \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state'
NAME                  STATE
rbln-cluster-policy   ready
$ kubectl get rblndriver \
  -o 'custom-columns=NAME:.metadata.name,STATE:.status.state,READY:.status.readyNodes,DESIRED:.status.desiredNodes'
NAME               STATE   READY   DESIRED
rbln-driver-atom   ready   1       1
kubectl get pods -n rbln-system

All target resources must report ready, and the required Pods must be ready.