Hands-on labs are course-buyer only

These 5 hands-on labs are bonus content for students of the O-RAN Course. Enroll once (₹1,799 lifetime) to unlock all labs forever.

Get the course — ₹1,799 Already enrolled? Sign in
O
O-RAN Labs
All labs
LAB 01 · INTERMEDIATE

Stand up a real O-RAN Near-RT RIC on Kubernetes

~30 minutes 8 GB RAM minimum Linux / macOS / WSL Hands-on
What you'll do. Deploy the O-RAN Software Community (O-RAN SC) Bronze release Near-RT RIC on a local Kubernetes cluster. Verify all platform pods come up. Confirm the 6 WG3 components from Lesson 04 are running in your own infra.

0Prerequisites

TipMac users on Apple Silicon: use kind with the --image kindest/node:v1.27.3 flag to avoid ARM64 issues. Some O-RAN SC images are amd64-only — Docker Desktop's Rosetta emulation handles this transparently on M-series chips.

1Create a local Kubernetes cluster

First, spin up a single-node Kubernetes cluster using kind:

kind create cluster --name oran-ric
kubectl cluster-info

You should see:

Kubernetes control plane is running at https://127.0.0.1:<port>
CoreDNS is running at ...

2Clone the O-RAN SC deployment repo

git clone "https://gerrit.o-ran-sc.org/r/it/dep" oran-dep
cd oran-dep
git checkout bronze
ls bin/

You should see install, uninstall, and other helper scripts.

3Inspect the Bronze recipe

Open the example recipe — this is the YAML that defines which RIC components to install:

cat RECIPE_EXAMPLE/PLATFORM/example_recipe.yaml | head -80

You'll see component versions for: e2term, e2mgr, submgr, rtmgr, dbaas, appmgr, a1mediator, vesmgr, jaegeradapter, and others.

Map to Lesson 04The 6 core WG3 components you saw in the cinematic map to these pods:

3Install the Bronze RIC platform

cd bin
sudo ./install -f ../RECIPE_EXAMPLE/PLATFORM/example_recipe.yaml

This takes 5–10 minutes. While Helm pulls images and Kubernetes schedules pods, watch progress in a second terminal:

watch -n 2 'kubectl -n ricplt get pods'

4Verify all platform pods are running

kubectl -n ricplt get pods

Expected output (abridged):

NAME                                           READY   STATUS    RESTARTS
deployment-ricplt-a1mediator-...               1/1     Running   0
deployment-ricplt-appmgr-...                   1/1     Running   0
deployment-ricplt-dbaas-...                    1/1     Running   0
deployment-ricplt-e2mgr-...                    1/1     Running   0
deployment-ricplt-e2term-alpha-...             1/1     Running   0
deployment-ricplt-rtmgr-...                    1/1     Running   0
deployment-ricplt-submgr-...                   1/1     Running   0
...

5Probe the SDL (data layer)

Confirm SDL is reachable:

kubectl -n ricplt exec deployment/deployment-ricplt-dbaas -- redis-cli ping

Should respond PONG.

6Inspect the E2 Termination port

E2 Nodes (gNBs) connect to the Near-RT RIC via SCTP on port 36422. Verify it's listening:

kubectl -n ricplt get svc | grep e2term

You'll see a NodePort or ClusterIP service exposing 36422.

Checkpoint

7Cleanup (when you're done)

cd bin
sudo ./uninstall -f ../RECIPE_EXAMPLE/PLATFORM/example_recipe.yaml
kind delete cluster --name oran-ric

!Troubleshooting

SymptomFix
Pod stuck PendingRun kubectl describe pod <pod>. Usually insufficient memory — bump to 12 GB.
e2term CrashLoopBackOffCheck kubectl logs deployment/deployment-ricplt-e2term-alpha. Frequent cause: dbaas not ready before e2term started. Restart it.
ImagePullBackOffO-RAN SC nexus3 registry rate-limit. Wait 60 s and retry, or pre-pull: docker pull nexus3.o-ran-sc.org:10002/o-ran-sc/ric-plt-e2term:5.5.0
Apple Silicon Mac stuckForce amd64: docker buildx use desktop-linux and re-pull images.
Lab 02 · Up next

Write your first xApp

Build a hello-world xApp in Python · subscribe to E2 indications · onboard via dms_cli

Continue