Skip to main content

Add a Radio Node

Racora is one control node plus as many radio nodes as you have radios. The control node keeps the CU planes (CU-CP, CU-UP, CU-IP), the in-cluster core and the two controllers; a node you add only ever runs DUs. A node needs no preparation for virtual cells (ruType: dummy or zmq). For a real radio it is provisioned first: real-time kernel, isolated cores, the racora TuneD profile and UHD, which is what the racora.io/rf-ready label attests (The Node Contract). What the host itself must be is in the Requirements.

On the k3s Platform​

Run the same installer on the new host in node mode, pointed at your cluster. It provisions the host, reboots it through the phases by itself, and joins it as a worker when the host is RF-ready.

# On the control node: the join token (note the control node's IP too)
sudo cat /var/lib/rancher/k3s/server/node-token

# On the new host: provision, then join
curl -sfL https://get.racora.io | \
INSTALL_RACORA_MODE=node INSTALL_RACORA_VERSION=vX.Y.Z \
K3S_URL=https://<control-node-ip>:6443 K3S_TOKEN=<token> \
INSTALL_RACORA_PRO_TOKEN=<ubuntu-pro-token> sh -

vX.Y.Z is the control node's release: RACORA_VERSION in its /etc/racora/install.env.

K3S_URL is what makes this a join rather than a second cluster; node mode requires it. The node registers with the capability labels the provisioner recorded, because k3s takes a node's labels at its first registration. INSTALL_RACORA_PROVISION=off joins a plain worker without provisioning. A host that is already RF-ready joins at once. node mode passes --gpu off to the provisioner: an added node does not need the GPU driver, CU-IP stays on the control node.

Progress shows in a login banner on the new host, in /etc/racora/provision.status, and in journalctl -u racora-provision -f.

On a Cluster You Run​

Provision the host with the platform-independent provision-rf mode, join it with your cluster tooling, and apply the labels with the labeler from the release's installer package. The commands are steps 2 to 4 of Install onto an Existing Kubernetes Cluster.

Check the Node​

kubectl get nodes -L racora.io/rf-ready,racora.io/gpu-ready
kubectl get node <node> -o jsonpath='{.status.allocatable.ettus\.com/usrp}{"\n"}'

The first shows the labels; the second the number of USRPs the node advertises. The USRP device plugin (ettus-device-plugin in racora-system, one per node) enumerates the radios through /sys/bus/usb and advertises ettus.com/usrp: <count>; a node without a radio advertises nothing. On the host, sudo cat /etc/racora/node-capabilities is what the labels were taken from; sudo bash /opt/racora/node-provisioning/validate-rf-node.sh re-evaluates the host and rewrites that file (the node provisioner).

What's Next​