Membangun ArgoCD yang tidak mudah tumbang: arsitektur HA dengan replika ganda dan leader election, HA per komponen termasuk Redis dengan Sentinel, HA jaringan, serta pengujian kegagalan dengan chaos testing dan failure injection.

Di episode 25 sebelumnya kita mengoptimalkan performa ArgoCD — membuatnya cepat di ribuan aplikasi. Namun kecepatan tidak menjamin ketersediaan: jika node yang menampung argocd-server mati, tidak peduli seberapa cepat ia, seluruh tim kehilangan akses ke UI dan CLI. Pada episode ini kita membahas high availability setup — mendesain ArgoCD sedemikian rupa sehingga kegagalan satu pod, satu node, atau satu zona tidak menghentikan delivery.
Mengapa ini penting? Ingat posisi ArgoCD: ia adalah satu-satunya jembatan antara Git dan cluster. Jika ArgoCD mati, aplikasi tidak serta-merta mati (Kubernetes terus menjalankan apa yang sudah ada), tetapi semua hal berikut berhenti: sync, drift detection, self-healing, dan akses operasional. Untuk lingkungan yang menjanjikan SLO, ArgoCD itu sendiri harus menjadi komponen yang paling sulit dimatikan. Episode ini memberikan resepnya — dan cara membuktikannya.
Prinsip dasar HA adalah tidak ada komponen tunggal yang menjadi titik kegagalan. Ini diwujudkan dengan tiga mekanisme:
Ketika desain ini benar, satu pod mati adalah peristiwa biasa, bukan insiden. Kalian akan melihat log leader lease pada controller:
argocd-application-controller-0 ... starting leader election
argocd-application-controller-1 ... attempting to acquire leadership
argocd-application-controller-1 ... successfully acquired lease argocd/argocd-application-controllerNote
Men-deploy ArgoCD HA yang sudah jadi lebih mudah daripada merakit sendiri. Chart Helm resmi argo-cd menyediakan nilai controller.replicas, server.replicas, repoServer.replicas, dan redis-ha.enabled — pola HA berikut adalah interpretasi dari apa yang chart itu lakukan, dan kalian bisa memakainya langsung.
Mari bedah satu per satu.
argocd-server stateless; jalankan beberapa replika di belakang Service:
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-server
spec:
replicas: 3
template:
spec:
containers:
- name: argocd-server
args:
- /usr/local/bin/argocd-server
- --staticassets=/shared/appArgoCD menangani ini dengan mudah; dengan topologySpreadConstraints (di bawah) replika tersebar antar node sehingga kegagalan satu node tidak mematikan semua replika.
argocd-repo-server juga stateless, tetapi menyimpan cache di Redis (bukan lokal). Karena itu skala horizontal aman. Gunakan HPA (episode 25) atau replika tetap, dan pastikan semua replika berbagi Redis yang sama agar cache tidak terpecah.
Controller stateful: ia menyimpan status aplikasi dan harus dieksekusi oleh satu leader pada satu waktu. ArgoCD menyelesaikannya dengan leader election berbasis coordination.k8s.io/Lease. Jalankan 2-3 replika; hanya leader yang bekerja, sisanya standby siap mengambil alih:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: argocd-application-controller
spec:
replicas: 2Ketika leader mati, lease kedaluwarsa dan standby mengambil alih dalam hitungan detik. Inilah pola active-passive yang sama dengan konsep multi-cluster DR di episode 21, tetapi dalam satu cluster.
Redis adalah otak cache ArgoCD. Jika mati, ArgoCD masih bekerja tetapi tanpa cache — dan performance kembali ke mode "kloning penuh". Untuk HA:
Keduanya membutuhkan PersistentVolumeClaim agar data tidak hilang saat pod restart, dan keduanya dikelola sebagai manifest di Git:
redis:
enabled: true
sentinel:
enabled: true
masterName: argocd
metrics:
enabled: trueCache Redis bukan database yang "harus selalu konsisten" — kehilangannya hanya menurunkan performa. Namun ada dua praktik yang tetap wajib:
Untuk state controller, ingat: state sebenarnya ArgoCD sudah ada di Git. Inilah keuntungan struktural GitOps — ArgoCD tidak menyimpan kebenaran, ia menyimpan hasil. Kehilangan status internal hanya berarti re-reconcile, bukan kehilangan data.
Lapisan terakhir adalah akses. UI/CLI harus tetap bisa diakses ketika komponen individual berganti:
argocd-server (NodePort/LoadBalancer/Ingress). Health check memastikan trafik hanya menuju replika sehat.Topology spread adalah penyempurna penting: sebar replika ke node berbeda agar satu node down tidak menumbangkan semua replika:
spec:
template:
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/name: argocd-serverArsitektur HA yang tidak diuji sama dengan tidak ada. Gunakan chaos engineering untuk membuktikan klaim:
kubectl delete pod -n argocd argocd-server-xxx dan amati apakah Service menyembunyikan pergantiannya.topologySpreadConstraints bekerja dan replika tersebar ulang.Alat seperti kube-monkey atau Litmus mengeksekusi skenario ini terjadwal, tetapi bahkan manual monthly drill (pola yang sama dengan DR drill di episode 21) sudah bernilai besar:
kubectl delete pod -n argocd -l app.kubernetes.io/name=argocd-server --wait=false
kubectl get pods -n argocd -w
argocd app listRecovery validation — ukur waktu dari injeksi kegagalan sampai semua komponen sehat kembali. Catat hasilnya: jika pemulihan memakan waktu lebih lama dari SLO kalian, perbaiki desain sebelum kegagalan nyata terjadi.
Warning
HA ArgoCD hanya berguna jika HA cluster itu sendiri. Jika cluster berjalan di satu zona, HA ArgoCD adalah ilusi. Untuk klaim ketersediaan yang serius, kombinasikan: multi-node, multi-zona, dan cadangkan ke multi-cluster (episode 21). ArgoCD yang HA di cluster yang rapuh tetap tumbang bersama clusternya.
Episode ini menutup loop ketersediaan ArgoCD: arsitektur HA dengan replika ganda dan leader election, HA per komponen (server, repo server, controller active-passive, Redis Sentinel), pertimbangan storage dan backup Redis, HA jaringan dengan load balancer, ingress redundancy, dan topology spread, serta pengujian dengan chaos engineering dan failure injection.
Poin yang harus kalian bawa:
Dengan episode ini, perjalanan dari dasar GitOps sampai produksi siap adalah garis yang utuh: instalasi, aplikasi, skala, keamanan, hingga ketahanan. Di episode 27 selanjutnya kita membahas troubleshooting & debugging — memecahkan sync failure, health check gagal, masalah autentikasi, akses repo, dan teknik debugging dengan CLI ArgoCD. Sampai jumpa di episode 27!