Operator Observability¶
Monitor the RBLN NPU Operator using metrics, Kubernetes events, resource Ready conditions, and logs. For NPU utilization, temperature, and power, see the Metrics Exporter.
Operator Metrics¶
The operator exposes its own state metrics in Prometheus format: reconcile outcomes for RBLNClusterPolicy and RBLNDriver instances, NPU node counts, and driver upgrade progress. The Helm value operator.metrics.enabled controls the endpoint (default true).
Metrics Information¶
| Metric | Type | Labels | Description |
|---|---|---|---|
rbln_operator_clusterpolicy_reconcile_status | Gauge | N/A | Last RBLNClusterPolicy reconcile outcome (0=success, 1=notReady, 2=unavailable) |
rbln_operator_driver_reconcile_status | Gauge | name | Last reconcile outcome per RBLNDriver CR |
rbln_operator_reconcile_total | Counter | controller | Reconciliations executed |
rbln_operator_reconcile_failed_total | Counter | controller | Reconciliations that did not reach ready |
rbln_operator_npu_nodes | Gauge | workload | NPU-eligible nodes per workload type |
rbln_operator_workload_coverage_state | Gauge | workload | Aggregate workload coverage state (0=empty ~ 3=uncovered) |
rbln_operator_driver_pool_ready_ratio | Gauge | driver, pool | Ready/desired ratio per driver pool |
rbln_operator_driver_owned_nodes | Gauge | driver | Nodes routed to each RBLNDriver. The series is initialized to zero, so a selector that matches no nodes reports 0 instead of causing the series to disappear |
rbln_operator_driver_uncovered_nodes | Gauge | N/A | Driver-eligible NPU nodes with no owning RBLNDriver |
rbln_operator_driver_selector_conflict_nodes | Gauge | driver | Nodes where this driver's selector ties with another RBLNDriver |
rbln_operator_driver_upgrade_nodes | Gauge | state | Nodes per driver upgrade state |
The operator also exposes the standard controller-runtime metrics (controller_runtime_*, workqueue_*, rest_client_*, go_*) on the same endpoint.
Scraping with Prometheus Operator¶
If you use the Prometheus Operator, enable the ServiceMonitor provided by the chart in your Helm values.
The endpoint requires authorization. Bind the metrics-reader ClusterRole created by the chart to the Prometheus ServiceAccount so Prometheus can scrape the endpoint.
The ClusterRole is named <fullname>-metrics-reader. Helm uses the release name itself as <fullname> when the release name already contains rbln-npu-operator, as in the install guide, and <release>-rbln-npu-operator otherwise. Confirm the binding:
403 responses
If the metrics endpoint returns 403 Forbidden even with the ServiceMonitor enabled, check whether the metrics-reader binding is missing.
Operator Events¶
The operator records state changes and errors as Kubernetes events. Use kubectl describe to see what happened and when. Errors on custom resources also appear in their Ready conditions, as shown in the following table. After an event expires, check the Ready condition for the current state.
| Reason | Type | Object | When | Paired Ready condition |
|---|---|---|---|---|
DriverUpgradeStarted | Normal | Node | Node selected for upgrade and entering the cordon stage | N/A |
DriverUpgradeSkipped | Warning | Node | Eviction blocked the attempt; the old driver stays. Only the upgrade's cordon is released; administrator cordons and nodes in requestor mode remain cordoned | N/A |
DriverUpgradePodStuck | Warning | Node | The replacement driver pod is not progressing (image pull or container start failure); repeats while waiting in the pod replacement step | N/A |
DriverUpgradeCompleted | Normal | Node | Node upgrade completed | N/A |
DriverUpgradeFailed | Warning | Node | Driver pod replacement or validation failed; the node stays cordoned and the message carries the failure reason | N/A |
DriverOwnerChanged | Normal | Node | The node's owning RBLNDriver was set or changed | N/A |
DriverNodeUncovered | Warning | Node | The node lost its owning RBLNDriver, because no selector matches it or a selector tie is unresolved | N/A |
ComponentApplyFailed | Warning | RBLNClusterPolicy | Failed to apply a manifest for a component managed by the RBLNClusterPolicy instance (Device Plugin, NPU Feature Discovery, and so on) | False / ComponentApplyFailed |
DriverInstallFailed | Warning | RBLNDriver | Failed to apply a manifest of a driver-install component (per-node-pool driver DaemonSet, and so on) | False / Error |
InvalidSpec | Warning | RBLNDriver | nodeSelector uses a reserved key, or the resource name exceeds 63 characters | False / InvalidSpec |
ConflictingNodeSelector | Warning | RBLNDriver | nodeSelector ties with another RBLNDriver on specific nodes | False / ConflictingNodeSelector |
DriverImageNotFound | Warning | RBLNDriver | A pool's driver image is missing from its registry. The operator rechecks the image about every five minutes, and the condition clears once the image is published | False / DriverImageNotFound |
DriverFamilyLabelMissing | Warning | RBLNDriver | An owned node has no usable rebellions.ai/npu.family label | False / DriverFamilyLabelMissing |
AllActiveWorkloadsReady | Normal | RBLNClusterPolicy | All managed components became ready, so the RBLNClusterPolicy instance state changed to ready | True / AllActiveWorkloadsReady |
DriverReady | Normal | RBLNDriver | The driver became ready on every node pool, so the RBLNDriver instance state changed to ready | True / AllDriverPoolsReady |
PolicyIgnored | Normal | RBLNClusterPolicy | Ignored a later-created RBLNClusterPolicy instance because an active instance already exists (only one RBLNClusterPolicy instance per cluster takes effect) | False / PolicyIgnored |
The operator records an event once when the state changes. Repeated reconcile loops do not record it again while the state stays the same. DriverUpgradePodStuck is the exception: it repeats while the driver pod is waiting in the replacement step. The four driver-validation warnings (InvalidSpec, ConflictingNodeSelector, DriverImageNotFound, and DriverFamilyLabelMissing) are recorded once per event reason and resource generation (metadata.generation). If a problem clears and then recurs without a spec change, the operator updates the Ready condition without recording another event. The two node-routing events are recorded only when a node's owner changes during reconciliation.
Because both CRDs are cluster-scoped, their events are recorded in the default namespace rather than the operator's namespace.
During a driver auto upgrade, the operator records DriverUpgradeStarted and then DriverUpgradeCompleted on each node, or DriverUpgradeSkipped or DriverUpgradeFailed when a step fails. See Events for the state each event marks.
Inspecting Events¶
Choose the command for the resource you want to inspect.
Event retention
Kubernetes keeps events for one hour by default. Check .status.conditions for the current state, and use the rbln_operator_* metrics for long-term trends and alerting.
Missing events
When several distinct errors occur on the same object in a short period, the Kubernetes client's spam filter may drop some events. The Ready condition and metrics still show the current state.
Driver and RSMD Readiness¶
An RBLNDriver reports driver pod readiness under .status.nodePools and RSMD readiness under .status.smd. Even when the driver pods are ready, the resource reports Ready=False with reason SmdNotReady until RSMD is ready.
Logging¶
The operator writes structured logs to stdout, including records produced by the Kubernetes client libraries. Configure the logs with the following chart values:
Invalid logging values stop the operator
If level or encoder is invalid, the operator fails to start and does not use a default value. Check these settings before applying them.