Sitemap
Peter Kinyua

Peter Kinyua

Network engineer turned cloud & DevOps enthusiast. I write about public cloud , Kubernetes, automation, self-hosting, and homelab projects

🌐 Multi-Cluster GitOps with Argo CD — Managing free5GC Across MicroK8s Clusters

5 min readNov 10, 2025

--

Press enter or click to view image in full size

In my previous article — Deploying 5G Core Across Three Kubernetes Clusters: A Cloud-Native Networking Journey — I walked through a manual step-by-step deployment of free5GC and UERANSIM across multiple clusters. Git repo for that project can be found here

While that approach worked, it was still painfully manual and tedious during troubleshooting. Every configuration change meant SSH-ing into different clusters, applying manifests individually, and hoping nothing went out of sync. Rolling back? Even worse. The cognitive overhead of managing three separate environments was becoming a bottleneck to troubleshooting.

Helm simplified things by packaging the network functions (NFs) into manageable charts — but we were still missing the big picture: a single pane of glass for deployment, visualization, and synchronization. I needed a way to automate the deployment of helm chart/k8s manifests, maintain a single source of truth, and enable self-healing deployments.

Why Argo CD for this project

With Argo CD, we can declaratively manage multiple clusters, automate deployment synchronization, visualize the entire state of our network from a clean dashboard, and embrace true GitOps principles. By pushing the manifests to Git, the 5G network functions updates automatically after changes in the manifests. Incase of Misconfiguration? . Argocd allows a one click rollback and resync. It’s that simple.

My use case Overview

A multi-cluster setup that separates concerns for security, performance, and operational flexibility:

  • Cluster 1 — (Control Plane): hosts the 5G Core control plane functions (NRF, AMF, SMF, AUSF, UDM, UDR, PCF, NSSF) and the Argo CD management layer
  • Cluster 2- (User Plane): Dedicated to the UPF for data plane processing and traffic forwarding
  • Cluster 3- (RAN Simulator): Runs UERANSIM to simulate gNB and UE devices for testing

This separation mirrors real-world deployments where control and user planes are often physically separated for scalability and security.

Press enter or click to view image in full size
Visualization of the project
  1. Installing Argo CD on the Control Plane Cluster
kubectl create namespace argocd
kubectl apply -n argocd \
-f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Check that all pods are running:

Press enter or click to view image in full size

Expose the Argo CD Web UI via NodePort

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
kubectl get svc argocd-server -n argocd
Press enter or click to view image in full size

Access the Web UI via:

https://<node-ip>:<nodeport>
Press enter or click to view image in full size

Before proceeding ensure CLI and Server Compatibility

argocd version --short

If the CLI version mismatches, download the matching binary from the Argo CD releases page

Rule of Thumb: Ensure you have the same version of the CLI as your Argo CD server for reliability, stability, and predictable behavior. Both client and server should share the same minor release (e.g., 3.1.x).

Press enter or click to view image in full size

Retrieving the initial admin password and Log in to the Argo CD Server

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

argocd login <node-ip>:<nodeport> --username admin --password <password> --insecure
Press enter or click to view image in full size

2. Add External Clusters

Get Peter Kinyua’s stories in your inbox

Join Medium for free to get updates from this writer.

Export kubeconfig contexts from other MicroK8s clusters (UPF and UERANSIM) and copy the files into the cluster where argocd is installed

microk8s config > upf-kubeconfig.yaml
microk8s config > ueransim-kubeconfig.yaml
Press enter or click to view image in full size

Add these clusters to Argo CD:

Press enter or click to view image in full size
Press enter or click to view image in full size

Deploy free5GC Components

To deploy the apps, we start by connecting Git Repository to argocd

Navigate to Settings → Repositories → Connect Repo and fill in the details.

Press enter or click to view image in full size

To deploy the there componets
Click New App → fill in the details for each of the apps components.(control plane, upf and ueransim)

Deploying Control Plane (Cluster 1)

Press enter or click to view image in full size

Verify on cli

Press enter or click to view image in full size
Press enter or click to view image in full size
Argo CD App Creation — Control Plane
Argo CD App Creation — Control Plane

User Plane (Cluster 2)

Press enter or click to view image in full size
Press enter or click to view image in full size
Argo CD App Creation — UPF
Argo CD App Creation — UPF
Press enter or click to view image in full size

RAN Simulator (Cluster 3)

Press enter or click to view image in full size
Press enter or click to view image in full size
Argo CD App Creation — UERANSIM
Argo CD App Creation — UERANSIM
Press enter or click to view image in full size

Final result

Press enter or click to view image in full size

Conclusion

With Argo CD managing multi-cluster MicroK8s environment, free5GC deployments become reproducible, observable, and consistent.

GitOps, enables

  • Continuous delivery across clusters
  • Centralized deployment management
  • Version-controlled network functions

GitOps isn’t just about convenience — it’s about reliability, repeatability, and operational excellence.

Resources

Argo CD Official Documentation

free5GC Official Website

UERANSIM GitHub Repository

Kubernetes Multi-Cluster Management

--

--

Peter Kinyua
Peter Kinyua

Written by Peter Kinyua

Network engineer turned cloud & DevOps enthusiast. I write about public cloud , Kubernetes, automation, self-hosting, and homelab projects