Build a Kubernetes-based O-RAN Service Management and Orchestration (SMO) environment from a bare Ubuntu 20.04 node using MicroK8s and the ORAN SMO Package deployment scripts.
This tutorial walks through the process of constructing a working ONAP/O-RAN SMO stack on a COSMOS compute node. Starting from the bare ubuntu2004.ndz base image, you install MicroK8s (a local Kubernetes distribution), clone the ORAN SMO deployment scripts from GitHub, and run the layered installation sequence that builds Helm charts and deploys the full O-RAN SMO and its simulators.
The result is a single node running a local Kubernetes cluster with all O-RAN SMO components deployed and ready for experimentation.
After completing this tutorial you will be able to:
| Difficulty | Advanced |
| Estimated time | TODO: verify |
| Domain / sandbox | TODO: verify — a COSMOS node with sufficient CPU/RAM for Kubernetes and ONAP/O-RAN SMO |
| Topic group | cellular-4g5g-oran |
| Last verified | Not re-tested (migrated 2026-06-20) |
Background knowledge
Account & access
Devices / nodes
| Resource | Role | Qty | Notes |
|---|---|---|---|
| TODO: verify | SMO host | 1 | Needs sufficient CPU and RAM for MicroK8s + full ONAP/O-RAN SMO stack |
Disk images
| Image | Load onto | Provides |
|---|---|---|
| ubuntu2004.ndz | SMO host node | Bare Ubuntu 20.04 base |
Software components
| Component | Version | Source |
|---|---|---|
| snapd | latest (via apt) | Ubuntu package repository |
| MicroK8s | latest stable (via snap) | Snap store (--classic) |
ORAN SMO Package (oran-deployment) |
TODO: verify | github.com/sebdet/oran-deployment |
| Helm 3 | installed by script | oran-deployment/scripts/layer-0/0-setup-helm3.sh |
| ChartMuseum | installed by script | oran-deployment/scripts/layer-0/0-setup-charts-museum.sh |
Spectrum / RF / special
Not applicable.
Not applicable — this tutorial runs entirely on a single compute node. The node hosts a local MicroK8s Kubernetes cluster with all O-RAN SMO components deployed as pods inside it.
ssh <username>@console.<sandbox>.cosmos-lab.org
omf tell -a offh -t system:topo:allres
omf load -i ubuntu2004.ndz -t <node>
omf tell -a on -t <node>
omf stat -t <node>
ssh root@<node>
The bare ubuntu2004.ndz image ships with a preference file that blocks snapd. Remove it:
sudo rm /etc/apt/preferences.d/snapd
Update the package index and install snapd:
sudo apt update
sudo apt install snapd
Add the following lines to /etc/profile so that snap tools and subsequent scripts have the correct locale:
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
Exit the SSH session and reconnect so the new environment is active:
exit
Then log back in:
ssh root@<node>
Install a local Kubernetes with MicroK8s:
sudo snap install microk8s --classic
git clone --recursive https://github.com/sebdet/oran-deployment.git
Run each script in order. Each layer builds on the previous one.
Layer 0 — platform prerequisites:
./oran-deployment/scripts/layer-0/0-setup-microk8s.sh
./oran-deployment/scripts/layer-0/0-setup-charts-museum.sh
./oran-deployment/scripts/layer-0/0-setup-helm3.sh
Layer 1 — build Helm charts:
./oran-deployment/scripts/layer-1/1-build-all-charts.sh
Layer 2 — deploy the SMO and simulators:
./oran-deployment/scripts/layer-2/2-install-oran.sh
./oran-deployment/scripts/layer-2/2-install-simulators.sh
2-install-oran.sh completes, use microk8s kubectl get pods --all-namespaces to confirm that the O-RAN SMO pods are running.2-install-simulators.sh completes, verify that the simulator pods are also in Running state.microk8s kubectl get pods --all-namespaces
All pods should eventually reach Running or Completed status (allow several minutes for image pulls and initialisation).
omf tell -a offh -t system:topo:allres
(Use omf save only if you want to preserve the customised image for future use.)
| Symptom | Likely cause | Fix |
|---|---|---|
snap install microk8s fails immediately |
snapd not installed or daemon not started | Ensure sudo apt install snapd completed without errors; try systemctl start snapd |
| Helm chart build fails | Missing git submodules |
Ensure git clone --recursive was used; run git submodule update --init --recursive inside oran-deployment/ |
Pods stuck in Pending |
Insufficient CPU or RAM on the node | Reserve a node with more resources; check microk8s kubectl describe pod <pod> for resource constraints |
| Locale errors during script execution | /etc/profile variables not active |
Confirm you exited and reconnected after Step 3; or export them manually: export LC_ALL=C.UTF-8 LANG=C.UTF-8 |
Author(s): COSMOS team · Last verified: Not re-tested (migrated 2026-06-20) · Tested image/release: ubuntu2004.ndz · Tags: oran, onap, smo, kubernetes, microk8s, 4g5g