Prepare these environment variables before proceeding with the installation. Create a .env file to hold your environment-specific values and source it before running any commands in this guide.
.env
NAMESPACE=monitoringREGISTRY=<registry-url> # provided by SambaNovaREGISTRY_SERVER=us-west2-docker.pkg.dev # SambaNova artifact registry; confirm with your rep if differentGCP_KEY_PATH=/path/to/gcp-key.json # path to your SambaNova-provided key fileCHART_VERSION=<chart-version> # provided by SambaNovaXRDU_USERNAME=<xrdu-bmc-username> # read-only BMC user (see Prerequisites)XRDU_PASSWORD=<xrdu-bmc-password> # read-only BMC password
source .env
The .env file and GCP key file you create during installation contain credentials. Restrict permissions after creating them:
The chart needs to know how to discover your XRDU BMCs. Choose the mode that matches your environment. Example files are included in the Helm chart package at examples/discovery.yaml (Auto Discovery tab) and examples/manual.yaml (Manual tab).
Auto Discovery
Manual
Auto discover based on node hostname and XRDU index. The chart generates candidate hostnames from the pattern and pings each one to discover active XRDUs.Use this mode if your cluster uses DNS-based XRDU hostname resolution – where XRDU BMC hostnames follow a predictable DNS pattern.
values.yaml
sn-xrdu-exporter: existingSecret: sn-xrdu-creds # the secret created in Step 4 autoXrduDiscovery: true serviceMonitor: enabled: true discovery: pattern: "$HOSTNAME-xrdu$I-sp" # chart template variables, not shell variables: $HOSTNAME = node hostname, $I = XRDU index indexRange: start: 0 end: 7 # adjust to match the number of XRDUs per node (standard rack has 8) pingTimeoutSeconds: 1sambanova-exporter: serviceMonitor: enabled: trueipmi-exporter: serviceMonitor: enabled: true
Use this mode to manually specify every XRDU BMC IP and the node it belongs to.Use this mode when your environment does not use the DNS naming convention above – for example, most standard on-premises customer deployments.
values.yaml
sn-xrdu-exporter: existingSecret: sn-xrdu-creds # the secret created in Step 4 autoXrduDiscovery: false mountHostEtcHosts: false # set true only if targets use hostnames (not IPs) that are in /etc/hosts serviceMonitor: enabled: true xrdu: targets: # One entry per XRDU BMC. Use `snctl node show <node>` to get these values. - node: <kubernetes-node-name> # exact match of `kubectl get nodes` NAME column – must align with the node name in snctl xrdu_ip: <xrdu-bmc-ip> # use xrdu.hostname from `snctl node show <node-name>` for this specific XRDU xrdu: <xrdu-label> # human-readable label, e.g. rack1-host1-xrdu0 rack: <rack-id> # must align with the rack name in snctl, e.g. rack-01 group: <group-id> # must align with the group name in snctl, e.g. g1 # Add one entry for every XRDU in your deploymentsambanova-exporter: serviceMonitor: enabled: trueipmi-exporter: serviceMonitor: enabled: true
Filling in the target fields:
Field
Where it comes from
Example
node
kubectl get nodes – use the exact value in the NAME column
rack1-host1
xrdu_ip
snctl node show <node-name> – use the xrdu.hostname field for this specific XRDU
192.168.6.1
xrdu
Your choice – becomes a Prometheus label
rack1-host1-xrdu0
rack
Align with the rack name in snctl – becomes a Prometheus label
rack-01
group
Align with the group name in snctl – becomes a Prometheus label
g1
Configure the Prometheus scrape interval in your ServiceMonitor settings. A recommended default is 30–60 seconds:
kubectl get pods -n $NAMESPACE -l app=ipmi-exporter -o widekubectl get pods -n $NAMESPACE -l app=sambanova-exporter -o widekubectl get pods -n $NAMESPACE -l app=sn-xrdu-exporter -o wide
All pods should show Running. The NODE column must show your SambaRack node names.If the label selector returns nothing, the chart may use app.kubernetes.io/name instead of app. Fall back to:
kubectl get pods -n $NAMESPACE | grep -E 'ipmi|sambanova|xrdu'
If a pod is Pending or in CrashLoopBackOff, see the Troubleshooting section.
Open the Prometheus UI and navigate to Status → Targets. Confirm all three exporter targets show UP (n/n) – all instances scraped successfully.If Prometheus is not available, skip to Check 3.
Without Prometheus: Iterate over the exporter pods by label and hit each metrics endpoint directly.
# List all exporter pods with their IPskubectl get pods -n $NAMESPACE -l 'app in (ipmi-exporter,sambanova-exporter,sn-xrdu-exporter)' \ -o custom-columns='NAME:.metadata.name,IP:.status.podIP,PORT:.spec.containers[0].ports[0].containerPort'# Then exec into any pod in the namespace and curl each IP:portkubectl exec -n $NAMESPACE <any-running-pod> -- \ curl -s http://<pod-ip>:<port>/metrics | head -10
Each port-forward selects one pod from the DaemonSet at random. This verifies one node’s exporter. To test a specific node’s pod, use kubectl port-forward -n $NAMESPACE pod/<pod-name> <port>:<port> after identifying the pod name from Check 1.
If metrics are not flowing or pods are not coming up, check for any misconfiguration in your values.yaml. Common issues are covered in the Troubleshooting section.
If your cluster cannot reach the SambaNova artifact registry, package the chart and images on a machine that can, then transfer them to the air-gapped environment.
After the upgrade, re-run the Verification checks to confirm all pods are still Running and metrics are flowing.If the upgrade fails or pods become unhealthy, roll back:
helm history sambanova-hardware-monitoring -n $NAMESPACEhelm rollback sambanova-hardware-monitoring -n $NAMESPACE # restores the previous release