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
- Put a cell on the node's radio: Connect a Radio and Deploy Cells.
- A node whose labels are wrong after you fixed the host: Relabel a Node.
- A node that stops advertising its radio after a kubelet restart: Troubleshoot.