Generated at build time from
charts/racora/README.md(helm-docs:values.yaml+README.md.gotmpl); edit the source, not this page.
racora
The umbrella chart for the racora distribution. One Helm release, the entire Racora system.
What this installs
| Subchart | What |
|---|---|
racora-crds | NRCell CRD |
racora-base | Workload namespaces |
racora-node | USRP + NVIDIA device plugins, optional nvidia RuntimeClass (racora-system) |
racora-controller | NRCell reconciler (racora-system) |
racora-cu | CU-CP + CU-UP + CU-IP (centralized-unit) |
racora-monitoring | OTel + ClickHouse + Tempo + Grafana |
racora-smo | the SMO functions: the O1 collector (VES + PM stream into ClickHouse o1.*) |
racora-core-open5gs | the Open5GS core provider (cores/open5gs), rendered when global.core.provider is open5gs (the default) |
Install
# Default: everything on (RAN + 5GC + observability)
helm install racora ./charts/racora
# Bring your own 5G core: no core renders, the CU-CP dials your AMF
helm install racora ./charts/racora \
--set global.core.provider=external \
--set global.core.amfAddr=amf.my-5gc.example.com
# Edge install without observability
helm install racora ./charts/racora \
--set monitoring.enabled=false
Values
| Key | Type | Default | Description |
|---|---|---|---|
| global.systemDefaultRegistry | string | "registry.gitlab.com/cognitive-network-solutions/racora" | Registry every component image is pulled from ( |
| global.components.gnb | object | {"repository":"gnb","tag":"v0.5.0"} | The gNB image (CNS OCUDU): CU-CP, CU-UP and every DU run this one image; the controller plants it into the DU Deployments it generates. |
| global.components.open5gs | object | {"repository":"open5gs","tag":"v0.5.0"} | The Open5GS core provider's image (renders with global.core.provider=open5gs). |
| global.components.cuip | object | {"repository":"cuip","tag":"v0.3.0"} | CU-IP, the Intelligence Plane. |
| global.components.controller | object | {"repository":"racora-controller","tag":"v0.1.40"} | racora-controller, the NRCell reconciler. |
| global.components.coreController | object | {"repository":"racora-core-controller","tag":"v0.1.2"} | racora-core-controller, the Subscriber reconciler and core provider adapter. |
| global.components.rannP | object | {"repository":"rann-p-forwarder","tag":"v0.1.1"} | The RANN-P forwarder, the CU-CP pod's sidecar toward CU-IP. |
| global.components.ettusPlugin | object | {"repository":"ettus-device-plugin","tag":"v0.1.0"} | The USRP device plugin (racora-node). |
| global.components.fronthaulAgent | object | {"repository":"fronthaul-agent","tag":"v0.1.3"} | The fronthaul agent (racora-node). |
| global.components.o1Collector | object | {"repository":"o1-collector","tag":"v0.1.0"} | The O1 collector (racora-smo): the SMO-side receiver of the O1 adapters' VES events and PM stream. |
| global.components.o1Adapter | object | {"repository":"o1-adapter","tag":"20261104_310d74ba-cns"} | The O1 adapter: every element's O1 sidecar and the M-plane sidecar of ofh DUs. An upstream OCUDU build, mirrored, or Racora's carry of a change submitted upstream. |
| global.components.netconf | object | {"repository":"netconf","tag":"20261103_2f69ca64"} | The O1 NETCONF server (netopeer2 with the 3GPP NRM and OCUDU models), every element's netconf sidecar: an upstream OCUDU nightly, mirrored unmodified. |
| global.components.nvidiaPlugin | object | {"repository":"mirrored-k8s-device-plugin","tag":"v0.17.0"} | The NVIDIA device plugin (upstream, mirrored). |
| global.components.clickhouse | object | {"repository":"mirrored-clickhouse-server","tag":"24.10"} | ClickHouse (upstream, mirrored). |
| global.components.tempo | object | {"repository":"mirrored-tempo","tag":"2.6.1"} | Tempo (upstream, mirrored). |
| global.components.otelCollector | object | {"repository":"mirrored-opentelemetry-collector-contrib","tag":"0.115.1"} | The OpenTelemetry collector (upstream, mirrored). |
| global.components.grafana | object | {"repository":"mirrored-grafana","tag":"11.4.0"} | Grafana (upstream, mirrored). |
| global.core.provider | string | "open5gs" | The 5G core provider: open5gs (the bundled reference core, default) or external (bring your own AMF: set amfAddr). Exactly one core renders. |
| global.core.amfAddr | string | "" | external only: the AMF the CU-CP dials (DNS name or IP the cluster reaches over SCTP). The controller renders it into the CU-CP overlay; a change takes effect at the next cu-cp restart. In-cluster providers expose their AMF as the Service amf.<racora-controller.coreNamespace>.svc.cluster.local and leave this empty. |
| global.o1.ves.url | string | "http://o1-collector.racora-smo.svc.cluster.local:8080" | The VES collector's base URL (http[s]://host[:port]; the adapters append /eventListener/v7) every O1 adapter posts its events to, with the element's name as the basic-auth username. Empty: no collector, the adapters drop their events. |
| global.o1.pm.streamTarget | string | "http://o1-collector.racora-smo.svc.cluster.local:8080/pm/stream" | Where the racora-default PerfMetricJob of every element streams its performance data (the collector's /pm/stream). Empty: no default job. |
| global.network.plmn | string | "90170" | PLMN the network serves (MCC+MNC, 5 or 6 digits). The reference deployment's 90170 (the range test SIMs are issued in). |
| global.network.tacs | list | [7] | Tracking area codes the network serves; the core provider must serve every one of them. |
| global.network.slices | list | [{"sst":1}] | Network slices (sst, optional sd) the CU-CP advertises for every tracking area. |
| crds.enabled | bool | true | Ship the NRCell CRD inside the release (the kubernetes platform). The k3s platform applies it out-of-band and sets this false. |
| base.enabled | bool | true | Create the seven workload namespaces (racora-base). |
| node.enabled | bool | true | Hardware enablement DaemonSets (USRP + NVIDIA device plugins) and the optional nvidia RuntimeClass — the node contract's cluster-side half. |
| controller.enabled | bool | true | Deploy the NRCell controller (racora-controller). |
| cu.enabled | bool | true | Deploy the CU planes: CU-CP, CU-UP and CU-IP (racora-cu). |
| monitoring.enabled | bool | true | Default true — observability is part of the distribution story. Disable on resource-constrained edge installs where logs go elsewhere. |
| smo.enabled | bool | true | Deploy the SMO functions (racora-smo): the O1 collector the elements' O1 adapters send faults and performance data to. Disable when an external SMO collects instead (point global.o1.ves.url at it). |
Per-subchart values are accessible via the subchart's name as a
top-level key (matches Helm's dependency-values convention); each subchart's
README lists its own. See values.yaml for examples of common overrides.
After install
Watch the system come up:
kubectl get pods -A -l app.kubernetes.io/part-of=racora -w
Apply a cell and verify reconciliation (see the repo README for the full walkthrough):
cat <<'EOF' | kubectl apply -f -
apiVersion: racora.io/v1alpha1
kind: NRCell
metadata:
name: cell-1
namespace: racora-system
spec:
band: 78
dlArfcn: 632628
channelBandwidthMHz: 10
commonScs: 30
plmn: "90170"
tac: 7
radioBackend:
ruType: dummy
EOF
kubectl get nrcells -n racora-system # identity + NCI assigned, ConfigGenerated
kubectl get pods -n distributed-unit # DU pod created by controller
Order of installation
Helm renders all subchart templates together and applies them as one manifest sorted by kind (Namespaces, then CRDs, RBAC, ConfigMaps, Services, workloads) — no subchart declares a dependency on another. The actual subchart-to-subchart runtime ordering (e.g., wait for controller before applying CRs) is handled by each workload's init containers:
cu-cpblocks untilracora-controllerwritesnrcell-cu-cp-config(no CR → no overlay → cu-cp stays Init)cu-upsleeps 20s waiting for cu-cpcuiphas no init gating — once the controller scales the CU plane up it starts immediately (substrate boots empty, populates when NRCells appear)
This means a fresh helm install puts everything into the right
sequence on its own — no --wait or post-install hooks needed.
Note: ogstun on hostNetwork
Open5GS uses hostNetwork: true (needed for SCTP NGAP), so the TUN
device it creates (ogstun) lives on the host kernel and would persist
across pod restarts. The chart handles this automatically: the open5gs
container resets any leftover ogstun/loopback/NAT state before every
start, and on the k3s platform racora-uninstall.sh (scope host or
cluster) clears it from the host on uninstall — no manual cleanup needed.
How a platform delivers this chart
Delivery is the platform module's job (docs/platforms/index.md), never the
chart's. The k3s platform writes the released chart package as a k3s
HelmChart resource on the server at install time (with
platforms/k3s/values.yaml as its values and the NRCell CRD applied
out-of-band); an existing cluster installs it with helm and
platforms/kubernetes/values.yaml. Image pins are baked into the released
chart under global.components, one key per component (repository, tag,
optional registry); chart-values.yaml carries them for installs from
source, and the release writes the effective set into the ConfigMap
racora-release in racora-system.