Skip to main content

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​

SubchartWhat
racora-crdsNRCell CRD
racora-baseWorkload namespaces
racora-nodeUSRP + NVIDIA device plugins, optional nvidia RuntimeClass (racora-system)
racora-controllerNRCell reconciler (racora-system)
racora-cuCU-CP + CU-UP + CU-IP (centralized-unit)
racora-monitoringOTel + ClickHouse + Tempo + Grafana
racora-smothe SMO functions: the O1 collector (VES + PM stream into ClickHouse o1.*)
racora-core-open5gsthe 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​

KeyTypeDefaultDescription
global.systemDefaultRegistrystring"registry.gitlab.com/cognitive-network-solutions/racora"Registry every component image is pulled from (/:); one value re-roots the whole distribution to a mirror.
global.components.gnbobject{"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.open5gsobject{"repository":"open5gs","tag":"v0.5.0"}The Open5GS core provider's image (renders with global.core.provider=open5gs).
global.components.cuipobject{"repository":"cuip","tag":"v0.3.0"}CU-IP, the Intelligence Plane.
global.components.controllerobject{"repository":"racora-controller","tag":"v0.1.40"}racora-controller, the NRCell reconciler.
global.components.coreControllerobject{"repository":"racora-core-controller","tag":"v0.1.2"}racora-core-controller, the Subscriber reconciler and core provider adapter.
global.components.rannPobject{"repository":"rann-p-forwarder","tag":"v0.1.1"}The RANN-P forwarder, the CU-CP pod's sidecar toward CU-IP.
global.components.ettusPluginobject{"repository":"ettus-device-plugin","tag":"v0.1.0"}The USRP device plugin (racora-node).
global.components.fronthaulAgentobject{"repository":"fronthaul-agent","tag":"v0.1.3"}The fronthaul agent (racora-node).
global.components.o1Collectorobject{"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.o1Adapterobject{"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.netconfobject{"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.nvidiaPluginobject{"repository":"mirrored-k8s-device-plugin","tag":"v0.17.0"}The NVIDIA device plugin (upstream, mirrored).
global.components.clickhouseobject{"repository":"mirrored-clickhouse-server","tag":"24.10"}ClickHouse (upstream, mirrored).
global.components.tempoobject{"repository":"mirrored-tempo","tag":"2.6.1"}Tempo (upstream, mirrored).
global.components.otelCollectorobject{"repository":"mirrored-opentelemetry-collector-contrib","tag":"0.115.1"}The OpenTelemetry collector (upstream, mirrored).
global.components.grafanaobject{"repository":"mirrored-grafana","tag":"11.4.0"}Grafana (upstream, mirrored).
global.core.providerstring"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.amfAddrstring""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.urlstring"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.streamTargetstring"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.plmnstring"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.tacslist[7]Tracking area codes the network serves; the core provider must serve every one of them.
global.network.sliceslist[{"sst":1}]Network slices (sst, optional sd) the CU-CP advertises for every tracking area.
crds.enabledbooltrueShip the NRCell CRD inside the release (the kubernetes platform). The k3s platform applies it out-of-band and sets this false.
base.enabledbooltrueCreate the seven workload namespaces (racora-base).
node.enabledbooltrueHardware enablement DaemonSets (USRP + NVIDIA device plugins) and the optional nvidia RuntimeClass — the node contract's cluster-side half.
controller.enabledbooltrueDeploy the NRCell controller (racora-controller).
cu.enabledbooltrueDeploy the CU planes: CU-CP, CU-UP and CU-IP (racora-cu).
monitoring.enabledbooltrueDefault true — observability is part of the distribution story. Disable on resource-constrained edge installs where logs go elsewhere.
smo.enabledbooltrueDeploy 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-cp blocks until racora-controller writes nrcell-cu-cp-config (no CR → no overlay → cu-cp stays Init)
  • cu-up sleeps 20s waiting for cu-cp
  • cuip has 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.