Skip to main content

Racora Architecture

Racora installs as one Helm release that brings the whole RAN with it. You operate it through two resources, NRCell and Subscriber; two controllers reconcile those declarations into running network functions, each in its own namespace; and everything runs on two kinds of node, a control node and radio nodes.

What Runs Where​

The chart creates six namespaces and fills them from its subcharts:

NamespaceWhat runs thereSubchart
racora-systemracora-controller (cells), racora-core-controller (subscribers), the USRP and NVIDIA device pluginsracora-controller, racora-node
centralized-unitCU-CP with its RANN-P forwarder sidecar, CU-UP, CU-IPracora-cu
distributed-unitone DU Deployment per declared cell, generated by the controllernone: written by racora-controller at runtime
5g-corethe selected core provider: Open5GS as one hostNetwork pod by default, nothing for an external coreracora-core-open5gs
monitoringthe OpenTelemetry collector, ClickHouse, Tempo, Grafanaracora-monitoring
user-equipmentsupporting pods for UEs, empty by defaultracora-base

The CU planes are dormant until the first cell: their Deployments sit at zero replicas and the controller scales them to one when a cell is declared, and back to zero when the last cell is deleted.

Two Controllers​

racora-controller is the RAN-side controller. It watches NRCell resources, assigns each cell its identity, generates the DU configuration and Deployment, regenerates the CU-CP's mobility overlay, pushes mobility changes to the running CU-CP over its runtime-command interface, and applies the decisions CU-IP makes. It runs on every platform unchanged.

racora-core-controller is the core-side controller. It owns Subscriber resources and provisions each one into the selected core provider through the adapter the provider declares. The two are separate images with separate rights: the RAN controller never holds exec access into the core or reads SIM secrets, and neither branches on which core runs. How a subscriber reaches a core is on How Core Providers Work.

Three Layers, One Contract​

Racora is organised so the same RAN runs on any Kubernetes:

  1. The network layer: the NRCell and Subscriber APIs, the two controllers, the CU planes, the Intelligence Plane, the core provider, and the telemetry schema. Identical on every platform; the only surface an operator or a builder ever touches.
  2. The node layer: what a host must provide for real radios and GPUs (a real-time kernel, isolated cores, device plugins, labels). Published as the node contract; Racora ships one implementation, its provisioner, and each platform binds it its own way.
  3. The cluster layer: the Kubernetes underneath, a pluggable platform. k3s is the default and the only one that installs a cluster for you; on a cluster you already run, Racora lays the same RAN onto it.

Racora always ships the network layer itself and is assembled with what you run underneath and around it: today k3s or your own Kubernetes, the Open5GS core provider or your own AMF, and USRP B210 radios. The 5G core is a pluggable provider behind one contract, so another core plugs into the same Racora with the same operational experience.

Scope and Limits​

What a Racora deployment is today, stated as facts of v0.8.0:

  • One gNB per cluster. The chart sets one gnbId (411 by default) and one CU; every cell is a sector of that gNB. One control node runs the CU planes, the core and the controllers; there is no CU redundancy.
  • Radios. The DU drives a USRP B210 over UHD (ruType: uhd); zmq and dummy are virtual backends for simulation and tests. The NRCell API accepts no other backend, and there is no Open Fronthaul.
  • Hosts. The k3s platform installs amd64 binaries only. Hosts Racora provisions run Ubuntu 24.04.
  • The Open5GS provider serves the tracking areas and slice its image fixes (Open5GS); a global.network outside that set fails the render. An external core serves whatever it serves.
  • Decisions. CU-IP ships two Intelligence Functions, PCI assignment and ANR (racora-cu.cuIp.engines, default pci,anr).
  • Telemetry is kept for 24 hours by default, on emptyDir unless persistence is turned on; Grafana is anonymous (Viewer) by default.