đ Multi-Cluster GitOps with Argo CD â Managing free5GC Across MicroK8s Clusters
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.
- 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.yamlCheck that all pods are running:
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 argocdAccess the Web UI via:
https://<node-ip>:<nodeport>Before proceeding ensure CLI and Server Compatibility
argocd version --shortIf 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).
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> --insecure2. 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.yamlAdd these clusters to Argo CD:
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.
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)
Verify on cli
User Plane (Cluster 2)
RAN Simulator (Cluster 3)
Final result
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.










