Case study

O-RAN xApp Lifecycle Lab

Near-RT RIC xApp lifecycle automation testbed

I turned part of my bachelor thesis into a public lab for the O-RAN xApp lifecycle. Ansible builds the single-VM K3s RIC environment and onboards kpimon-go. e2sim provides E2SM-KPM input, while the notes cover Istio switching.

  • Bachelor thesis
  • 2024-2025
  • Completed thesis project
  • O-RAN
  • Near-RT RIC
  • xApp lifecycle
  • Ansible
  • K3s
  • Istio
  • Prometheus
  • Grafana
  • Kiali
  • e2sim
  • kpimon-go
  • MLOps
  • Observability

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.
Open repository

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

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.

Decision record

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.