Skip to main content

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.

ObjectPurpose
DaemonSet ettus-device-pluginadvertises ettus.com/usrp; real-radio DUs request one
DaemonSet nvidia-device-plugin-daemonsetadvertises 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​

KeyTypeDefaultDescription
namespacestring"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.enabledbooltrueAdvertises 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.pullPolicystring"IfNotPresent"Image pull policy — IfNotPresent, because the images ship with the distribution. The image itself is the umbrella's global.components.ettusPlugin.
nodePlugins.ettus.priorityClassNamestring"system-node-critical"Priority class for the plugin pods (system-node-critical: the node contract's advertisement must outlive workload pressure).
nodePlugins.ettus.nodeSelectorobject{}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.tolerationslist[{"operator":"Exists"}]Tolerations; the default tolerates every taint so the plugin runs on RT-tuned RF nodes.
nodePlugins.nvidia.enabledbooltrueUpstream k8s-device-plugin, unmodified; advertises nvidia.com/gpu for the CU-IP intelligence plane.
nodePlugins.nvidia.image.pullPolicystring"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.runtimeClassNamestring"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.priorityClassNamestring"system-node-critical"Priority class for the plugin pods.
nodePlugins.nvidia.failOnInitErrorboolfalsefalse: a GPU-less node logs and idles instead of crash-looping.
nodePlugins.nvidia.nodeSelectorobject{"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.tolerationslist[{"effect":"NoSchedule","key":"nvidia.com/gpu","operator":"Exists"}]Tolerates the nvidia.com/gpu taint GPU nodes commonly carry.
nodePlugins.fronthaul.enabledbooltrueThe 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.pullPolicystring"IfNotPresent"Image pull policy — IfNotPresent, because the images ship with the distribution. The image itself is the umbrella's global.components.fronthaulAgent.
nodePlugins.fronthaul.probeIntervalstring"10s"How often every O-RU is probed (a Go duration).
nodePlugins.fronthaul.probeTimeoutstring"2s"One probe's connect timeout (a Go duration).
nodePlugins.fronthaul.cellsNamespacestring"racora-system"The namespace the agent watches NRCells (and their radio profiles) in.
nodePlugins.fronthaul.dhcp.enabledbooltrueServe 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.leasestring"1h"Lease time of the addresses served (a Go duration).
nodePlugins.fronthaul.dhcp.controllerFqdnstring""The M-plane controller FQDN to announce as well (option 43 sub-option 130); empty = none.
nodePlugins.fronthaul.link.enforcebooltrueHold 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.mtuint9000The MTU to hold on the fronthaul port (0 leaves it).
nodePlugins.fronthaul.link.txQueueLenint20000The transmit queue length to hold on the fronthaul port (0 leaves it).
nodePlugins.fronthaul.metricsPortint9478The agent's /metrics (Prometheus text) and /healthz port on the node (host network); empty disables.
nodePlugins.fronthaul.priorityClassNamestring"system-node-critical"Priority class for the agent pods (system-node-critical: the node contract's advertisement must outlive workload pressure).
nodePlugins.fronthaul.nodeSelectorobject{"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.tolerationslist[{"operator":"Exists"}]Tolerations; the default tolerates every taint so the agent runs on RT-tuned fronthaul nodes.
nvidia.runtimeClass.createboolfalseWho 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.namestring"nvidia"Name of the RuntimeClass when created.
nvidia.runtimeClass.handlerstring"nvidia"containerd runtime handler the RuntimeClass points at.

Platform notes​

  • k3s: registers RuntimeClass/nvidia itself when the NVIDIA container toolkit is present — leave create: false.
  • Generic Kubernetes: set nvidia.runtimeClass.create=true and configure the containerd nvidia handler on GPU nodes, or let the NVIDIA GPU Operator own the RuntimeClass and keep create: false.
  • Both plugins mount /var/lib/kubelet/device-plugins; the USRP plugin is privileged and mounts /sys/bus/usb read-only. Clusters enforcing the restricted Pod Security level on racora-system must exempt it.