Overview
Project summary
- What it is
- A public O-RAN xApp lifecycle lab based on my bachelor thesis.
- My role
- I built the workflow and automation, defined the switching method, set up observability and prepared the repository for release.
- Core stack
- Ansible, K3s, O-RAN SC Near-RT RIC, kpimon-go, e2sim, Istio, Prometheus, Grafana, Kiali.
- Repository
- Architecture notes, switching notes, observability notes, citation metadata, and validation checks.
Lab scope
I published the reusable part of my bachelor thesis as a public lab repository. The lab runs the O-RAN SC Near-RT RIC on a single K3s VM, onboards kpimon-go, sends E2SM-KPM input from e2sim and lets me inspect service behavior during switching experiments.
Lifecycle workflow
Ansible prepares the host and K3s environment. The workflow then deploys the RIC, onboards the xApp, uses e2sim as input, switches between variants and monitors the result.
Lifecycle workflow
O-RAN lab path
Repository
Repository contents
- Architecture notesRIC lab structure and boundaries
- Switching notesTime-window method and validation limits
- Observability notesPrometheus, Grafana, Kiali, and mesh visibility
- Citation metadataProject citation details
The time-based switching method compares two kpimon-go variants over complete traffic windows. In the thesis tests, throughput continued through the switch, but convergence latency was still the main bottleneck.
Time-window switching
- Context
- RMR and service connections persisted, so percentage-based traffic splitting could not produce a useful split in this lab.
- Decision
- Alternate complete traffic windows between variants, then document Istio's observation limits.
- Result
- The repository explains the method and convergence latency, and says to pin the e2sim image before repeating a comparison.
Engineering constraints
This is a research testbed that runs on one VM. Istio’s sidecars can observe TCP/RMR service behavior around the xApps, but they do not cover SCTP/E2 traffic. For repeatable comparisons, the mutable splicer3/e2sim:latest image needs to be pinned.