Skip to content

Installing the RBLN NPU Operator

Install the RBLN NPU Operator with Helm. For OLM installations, see Installing on OpenShift. To run a Pod after installation, follow Run an NPU Pod.

Prerequisites

Creating an image pull secret

Create the rbln-system namespace and store your RBLN Portal account credentials in the drivercred image pull secret. The driver and RSMD use this secret.

1
2
3
4
5
6
7
8
9
kubectl create namespace rbln-system --dry-run=client -o yaml | kubectl apply -f -
export REGISTRY_USER='<RBLN_PORTAL_USERNAME>'
export REGISTRY_PASSWORD='<RBLN_PORTAL_PASSWORD>'
kubectl create secret docker-registry drivercred \
  --docker-server=repo.rebellions.ai \
  --docker-username="$REGISTRY_USER" \
  --docker-password="$REGISTRY_PASSWORD" \
  -n rbln-system
unset REGISTRY_PASSWORD

If you use a different secret name, such as my-registry-secret, add the following image pull secret setting to the npu-values.yaml file created in the next section.

1
2
3
driver:
  imagePullSecrets:
    - my-registry-secret

Configuring installation values

The following basic configuration uses driver containers and the Device Plugin. Save it as npu-values.yaml to override the default Helm values.

npu-values.yaml
1
2
3
4
5
6
7
8
9
nfd:
  enabled: false
workloadType: container
driver:
  enabled: true
devicePlugin:
  enabled: true
draKubeletPlugin:
  enabled: false

For DRA configuration, refer to the NPU DRA Driver documentation.

Installing with Helm

Install a specific chart version.

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

Verifying the installation

Check resource status after Helm finishes. The examples show healthy states; names and node counts vary by environment.

$ 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

For a Device Plugin installation, also check the node's NPU resources.

$ kubectl get nodes -l rebellions.ai/npu.present=true \
  -o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product,ALLOCATABLE:.status.allocatable.rebellions\.ai/npu'
NAME            FAMILY     PRODUCT     ALLOCATABLE
node-rebel100   rebel100   RBLN-CR13   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

For a Device Plugin installation, also check the node's NPU resources.

$ kubectl get nodes -l rebellions.ai/npu.present=true \
  -o 'custom-columns=NAME:.metadata.name,FAMILY:.metadata.labels.rebellions\.ai/npu\.family,PRODUCT:.metadata.labels.rebellions\.ai/npu\.product,ALLOCATABLE:.status.allocatable.rebellions\.ai/npu'
NAME        FAMILY   PRODUCT     ALLOCATABLE
node-atom   atom     RBLN-CA25   16