Generated at build time from
charts/racora-node/README.md(helm-docs:values.yaml+README.md.gotmpl); edit the source, not this page.
racora-node
The node contract's cluster-side half (see docs/reference/node-contract.md): the
hardware device plugins and the optional NVIDIA RuntimeClass. Part of the
racora umbrella (toggle node.enabled); installable alone into an existing
racora-system namespace.
| Object | Purpose |
|---|---|
DaemonSet ettus-device-plugin | advertises ettus.com/usrp; real-radio DUs request one |
DaemonSet nvidia-device-plugin-daemonset | advertises nvidia.com/gpu; CU-IP requests one |
RuntimeClass nvidia (optional) | the NVIDIA container runtime handler, when the platform does not provide it |
Why racora-system and not kube-system
Before v0.6.0 the two DaemonSets shipped as k3s auto-deploy manifests in
kube-system. Chart-owned objects live in a racora namespace so an in-place
upgrade never collides with those legacy objects; the k3s platform's installer
prunes the old ones.
Values
| Key | Type | Default | Description |
|---|---|---|---|
| namespace | string | "racora-system" | Namespace for the DaemonSets. racora-base creates racora-system. Deliberately NOT kube-system: an upgrade from the pre-v0.6.0 k3s addons must never collide with the old kube-system objects (the installer prunes those separately). |
| nodePlugins.ettus.enabled | bool | true | Advertises ettus.com/usrp so cells with a UHD radio backend land on the node that holds the B210. Requests one USRP per real-radio DU. |
| nodePlugins.ettus.image.pullPolicy | string | "IfNotPresent" | Image pull policy — IfNotPresent, because the images ship with the distribution. The image itself is the umbrella's global.components.ettusPlugin. |
| nodePlugins.ettus.priorityClassName | string | "system-node-critical" | Priority class for the plugin pods (system-node-critical: the node contract's advertisement must outlive workload pressure). |
| nodePlugins.ettus.nodeSelector | object | {} | Empty = every node. On a node without a USRP the plugin waits for one and never registers, so no ettus.com/usrp resource appears there at all. Pin to the node contract's RF nodes with {racora.io/rf-ready: "true"} if preferred. |
| nodePlugins.ettus.tolerations | list | [{"operator":"Exists"}] | Tolerations; the default tolerates every taint so the plugin runs on RT-tuned RF nodes. |
| nodePlugins.nvidia.enabled | bool | true | Upstream k8s-device-plugin, unmodified; advertises nvidia.com/gpu for the CU-IP intelligence plane. |
| nodePlugins.nvidia.image.pullPolicy | string | "IfNotPresent" | Image pull policy — IfNotPresent, because the images ship with the distribution. The image itself is the umbrella's global.components.nvidiaPlugin (upstream, mirrored). |
| nodePlugins.nvidia.runtimeClassName | string | "nvidia" | The plugin discovers GPUs through the driver, so it must run under the NVIDIA runtime; without it the plugin starts, finds no devices and advertises nothing. Empty string renders no runtimeClassName (clusters without an nvidia containerd handler, e.g. CI). |
| nodePlugins.nvidia.priorityClassName | string | "system-node-critical" | Priority class for the plugin pods. |
| nodePlugins.nvidia.failOnInitError | bool | false | false: a GPU-less node logs and idles instead of crash-looping. |
| nodePlugins.nvidia.nodeSelector | object | {"racora.io/gpu-ready":"true"} | Node selector: the node contract's gpu-ready label by default, because the plugin runs under the nvidia RuntimeClass and a node without the NVIDIA container runtime cannot start it at all (failOnInitError only covers a node with the runtime and no GPU). Empty = every node. |
| nodePlugins.nvidia.tolerations | list | [{"effect":"NoSchedule","key":"nvidia.com/gpu","operator":"Exists"}] | Tolerates the nvidia.com/gpu taint GPU nodes commonly carry. |
| nodePlugins.fronthaul.enabled | bool | true | The fronthaul agent, one per fronthaul-ready node: advertises racora.io/oru, one device per O-RU that a cell on the node names (radioBackend.ofh.mplane.netconfHost), Healthy while the O-RU answers on its NETCONF port over the node's fronthaul port. An ofh DU with an M-plane address requests one, so it schedules only where its O-RU is up, and the kubelet reports the O-RU's health in the DU pod's status. |
| nodePlugins.fronthaul.image.pullPolicy | string | "IfNotPresent" | Image pull policy — IfNotPresent, because the images ship with the distribution. The image itself is the umbrella's global.components.fronthaulAgent. |
| nodePlugins.fronthaul.probeInterval | string | "10s" | How often every O-RU is probed (a Go duration). |
| nodePlugins.fronthaul.probeTimeout | string | "2s" | One probe's connect timeout (a Go duration). |
| nodePlugins.fronthaul.cellsNamespace | string | "racora-system" | The namespace the agent watches NRCells (and their radio profiles) in. |
| nodePlugins.fronthaul.dhcp.enabled | bool | true | Serve the O-RUs' addresses on the fronthaul port: a request from a cell's ruMacAddr gets the cell's netconfHost, with the O-RAN vendor options (option 43: this node's port address as the M-plane controller), on the VLAN tag the O-RU asked on. |
| nodePlugins.fronthaul.dhcp.lease | string | "1h" | Lease time of the addresses served (a Go duration). |
| nodePlugins.fronthaul.dhcp.controllerFqdn | string | "" | The M-plane controller FQDN to announce as well (option 43 sub-option 130); empty = none. |
| nodePlugins.fronthaul.link.enforce | bool | true | Hold the fronthaul port's link settings on every link event: hardware VLAN receive filtering off (the O-RU's tagged frames must reach the host), the MTU and the transmit queue length below. Provisioning persists them across boots; this is for everything between. |
| nodePlugins.fronthaul.link.mtu | int | 9000 | The MTU to hold on the fronthaul port (0 leaves it). |
| nodePlugins.fronthaul.link.txQueueLen | int | 20000 | The transmit queue length to hold on the fronthaul port (0 leaves it). |
| nodePlugins.fronthaul.metricsPort | int | 9478 | The agent's /metrics (Prometheus text) and /healthz port on the node (host network); empty disables. |
| nodePlugins.fronthaul.priorityClassName | string | "system-node-critical" | Priority class for the agent pods (system-node-critical: the node contract's advertisement must outlive workload pressure). |
| nodePlugins.fronthaul.nodeSelector | object | {"racora.io/fronthaul-ready":"true"} | Runs only on fronthaul-ready nodes (the node contract's label): elsewhere there is no fronthaul port to probe from. |
| nodePlugins.fronthaul.tolerations | list | [{"operator":"Exists"}] | Tolerations; the default tolerates every taint so the agent runs on RT-tuned fronthaul nodes. |
| nvidia.runtimeClass.create | bool | false | Who owns RuntimeClass/nvidia. k3s registers it itself when the NVIDIA container toolkit is present, so the k3s platform leaves create=false. A generic cluster sets create=true (platforms/kubernetes/values.yaml) unless the NVIDIA GPU Operator already owns it. |
| nvidia.runtimeClass.name | string | "nvidia" | Name of the RuntimeClass when created. |
| nvidia.runtimeClass.handler | string | "nvidia" | containerd runtime handler the RuntimeClass points at. |
Platform notes
- k3s: registers
RuntimeClass/nvidiaitself when the NVIDIA container toolkit is present — leavecreate: false. - Generic Kubernetes: set
nvidia.runtimeClass.create=trueand configure the containerdnvidiahandler on GPU nodes, or let the NVIDIA GPU Operator own the RuntimeClass and keepcreate: false. - Both plugins mount
/var/lib/kubelet/device-plugins; the USRP plugin is privileged and mounts/sys/bus/usbread-only. Clusters enforcing therestrictedPod Security level onracora-systemmust exempt it.