ArgoCD vs Flux vs Spinnaker GitOps
Tiga GitOps tool saya jalankan paralel 26 bulan di fintech series-B + BUMN energy. ArgoCD default modern enterprise. Flux untuk Helm-heavy + lebih simple. Spinnaker untuk multi-cloud kompleks legacy. Verdict per ecosystem fit.
TL;DR
- ArgoCD: K8s-native GitOps default 2026. UI matang, ApplicationSet multi-cluster, ekosistem Argo (Workflows, Rollouts, Events) terlengkap.
- FluxCD: simpler ops, Helm-controller first-class, Image Automation native. Cocok untuk CLI-first team.
- Spinnaker: multi-cloud heavy (AWS Lambda, GCE, Azure VM), pipeline complex. Mature tapi ops overhead tinggi.
- Jenkins X: development melambat, skip untuk new project 2026.
- Verdict: Conditional — ArgoCD default modern enterprise, Flux niche purist, Spinnaker only kalau multi-cloud incumbent.
Konteks
Saya operate GitOps platform paralel 26 bulan (April 2024 - Mei 2026) di:
- Fintech series-B Jakarta: ArgoCD primary di GKE Jakarta + Singapore (DR), 18 service + 24 environment
- BUMN energy Jakarta: ArgoCD + FluxCD eval (FluxCD untuk 4 service Helm-heavy, ArgoCD untuk sisanya 18 service), Rancher on-prem dual-cluster
- Eval Spinnaker: 4 bulan di SaaS klien 2024 untuk multi-cloud (AWS + GCP) pipeline, abandoned karena ops complexity vs ArgoCD
Pengalaman GitOps total: 5 tahun. ArgoCD sejak 2021, Flux v2 sejak 2022, Spinnaker 2 tahun di SaaS klien (2022-2024).
Pricing (Juni 2026)
ArgoCD
- Software gratis (Apache 2.0)
- Compute: HA setup 3 application-controller pod + 2 repo-server + 2 server pod
- Total: 7 pod e2-small = Rp 3,2 juta/bulan
- Dex (SSO integration) + Redis: Rp 600 ribu/bulan
- Total: Rp 3,8 juta/bulan untuk 1 hub cluster
Untuk multi-cluster: 1 hub + agent di setiap target cluster. Saya pakai pattern hub-and-spoke: 1 hub ArgoCD di Jakarta cluster, manage 8 target cluster (Jakarta prod, Jakarta staging, Jakarta dev, Singapore DR, BUMN on-prem 4 cluster). Hub cost sama Rp 3,8 juta/bulan untuk semua.
Akuity (managed ArgoCD)
- Akuity Platform: USD 4-20/cluster/bulan + pricing per-application
- Untuk 8 cluster: ~USD 40-160/bulan = Rp 640 ribu-2,5 juta/bulan
- Tidak butuh self-host hub
- Alternative: Argo CD CRD via OpenShift Pipeline (Red Hat)
FluxCD
- Software gratis (Apache 2.0)
- Compute: lebih ringan dari ArgoCD (controller-only, no UI by default)
- Total: 5 controller pod e2-small = Rp 2,3 juta/bulan
- Optional: Flux Weave UI (commercial) atau Headlamp Flux plugin
- Total: Rp 2,3 juta/bulan
Spinnaker
- Software gratis (Apache 2.0)
- Self-host: 6-10 microservice (Orca, Igor, Echo, Front50, Gate, Clouddriver, Rosco)
- Compute: 10-15 pod, ~Rp 6-9 juta/bulan
- Plus storage (S3 untuk pipeline + Redis untuk state): Rp 1,5 juta/bulan
- Total: Rp 8-11 juta/bulan + ops 30-50 jam/bulan
Total GitOps cost
| Komponen | Cost/bulan |
|---|---|
| ArgoCD hub Jakarta (fintech) | Rp 3,8 juta |
| ArgoCD hub on-prem (BUMN) | Rp 3,8 juta |
| FluxCD eval (BUMN, 4 service) | Rp 2,3 juta (sebagian, additional) |
| Total fintech | Rp 3,8 juta/bulan |
| Total BUMN | Rp 6,1 juta/bulan |
Bandingkan kalau Spinnaker full: Rp 8-11 juta/bulan. ArgoCD 2-3x lebih ekonomis untuk K8s-only stack.
SLO + performance (26 bulan)
ArgoCD
| Metrik | Target | Realisasi |
|---|---|---|
| Sync availability | 99,9% | 99,93% |
| Sync latency Git-to-cluster p99 | < 60 detik | 38 detik |
| Drift detection coverage | 100% | 100% |
| Application health accuracy | > 99% | 99,4% |
| Multi-cluster sync consistency | < 90 detik | 65 detik |
| Auto-sync success rate | > 98% | 98,8% |
| UI response time p99 | < 3 detik | 2,2 detik |
Insiden ArgoCD 26 bulan: 4 P2 (repo-server OOM 2x, Redis lock 1x, deploy regression 1x). 0 P0.
FluxCD eval
| Metrik | Realisasi (eval 14 bulan) |
|---|---|
| Sync availability | 99,96% |
| Sync latency p99 | 28 detik |
| Image automation latency | 3-5 menit |
FluxCD slightly more reliable di availability (simpler architecture, fewer components). Trade-off: tidak ada UI bawaan untuk audit non-engineer.
Spinnaker eval
| Metrik | Realisasi (eval 4 bulan) |
|---|---|
| Sync availability | 99,72% |
| Pipeline execution time p99 | 8-15 menit (more steps) |
| Operational complexity | tinggi (banyak service interaksi) |
Spinnaker reliability lebih rendah karena lebih banyak moving parts. Worth-nya hanya kalau multi-cloud kompleks justify ops overhead.
Architecture pattern
Hub-and-spoke ArgoCD multi-cluster
ArgoCD Hub (Jakarta cluster)
│
├── target: jakarta-prod (in-cluster)
├── target: jakarta-staging
├── target: jakarta-dev
├── target: singapore-dr (via ServiceAccount kubeconfig)
└── target: bumn-onprem-{1,2,3,4} (via tunnel)
Hub Jakarta = source of truth for all cluster. Cluster credential di Hub via Secret. Pattern simple, ada single pane of glass.
Trade-off: Hub single point of failure. Saya jalankan HA mode (3 application-controller replica + Postgres backend).
ApplicationSet pattern
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: payment-service-multi-env
spec:
generators:
- matrix:
generators:
- list:
elements:
- cluster: jakarta-prod
env: prod
- cluster: jakarta-staging
env: staging
- cluster: singapore-dr
env: prod-dr
- git:
repoURL: https://github.com/company/services
revision: main
files:
- path: "payment/values-*.yaml"
template:
metadata:
name: 'payment-{{cluster}}-{{env}}'
spec:
project: payment
source:
repoURL: https://github.com/company/services
path: payment/
helm:
valueFiles:
- "values-{{env}}.yaml"
destination:
name: '{{cluster}}'
namespace: payment
syncPolicy:
automated:
prune: true
selfHeal: true
Single ApplicationSet generate 3 Application (jakarta-prod, jakarta-staging, singapore-dr). Saves 70% YAML repetition vs ApplicationOfApplications.
FluxCD pattern
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: services
spec:
interval: 1m
url: https://github.com/company/services
ref:
branch: main
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: payment-service
spec:
interval: 5m
chart:
spec:
chart: ./payment/chart
sourceRef:
kind: GitRepository
name: services
values:
replicas: 3
Lebih CRD-heavy tapi lebih modular. Image Automation native:
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: payment-policy
spec:
imageRepositoryRef:
name: payment
policy:
semver:
range: '>=1.0.0'
---
apiVersion: image.toolkit.fluxcd.io/v1beta1
kind: ImageUpdateAutomation
metadata:
name: payment-update
spec:
git:
push:
branch: main
commit:
author:
email: [email protected]
update:
path: ./payment
strategy: Setters
Flux push commit ke Git saat image baru detected. ArgoCD equivalent (Image Updater) external plugin, lebih boilerplate.
Capability comparison
| Capability | ArgoCD | FluxCD | Spinnaker |
|---|---|---|---|
| GitOps sync K8s manifest | ya | ya | ya |
| Helm chart support | ya | ya (first-class) | ya |
| Kustomize support | ya | ya | ya |
| Jsonnet support | ya | terbatas | ya |
| Multi-cluster | ApplicationSet | Flux Multi-cluster | ya |
| UI | matang | Weave UI (commercial) | matang |
| Image automation | Image Updater plugin | native | ya |
| Pipeline stage / approval | ArgoCD Workflows | Notification + manual | matang (best) |
| Manual approval gate | Sync Window + RBAC | terbatas | ya |
| Multi-cloud (non-K8s) | tidak | tidak | ya (AWS Lambda, GCE, Azure VM) |
| Drift detection | ya | ya | ya |
| RBAC | matang (project + role) | RBAC + namespace | matang |
| SSO / OIDC | ya | via OIDC | ya |
| Audit log | ya (events) | ya | ya |
| Observability (Prometheus metric) | ya | ya | ya |
| CRD-based | ya | ya | tidak (Spinnaker DSL) |
| Operational complexity | sedang | rendah | tinggi |
Trade-off arsitektural
Pilih ArgoCD kalau:
- K8s-native enterprise (semua workload di K8s)
- UI penting untuk visibility non-engineer (PO, manager)
- Multi-cluster dengan dynamic discovery (ApplicationSet)
- Integrasi Argo ekosistem (Workflows, Rollouts, Events)
- Hiring engineer mudah (ArgoCD adoption tinggi)
Pilih FluxCD kalau:
- Helm-chart heavy stack
- Image automation otomatis (push commit ke Git native)
- Tim CLI-first (no UI requirement)
- Multi-tenant via namespace separation native
- GitOps purist (immutable source-of-truth Git)
Pilih Spinnaker kalau:
- Multi-cloud mixed (K8s + Lambda + EC2 + GCE)
- Pipeline complex dengan manual stage / gate (compliance enterprise)
- Investment Spinnaker existing
- Ops capacity 30-50 jam/bulan available
Skip kalau:
- Tim < 5 engineer dengan 1-2 service. CI/CD sederhana (GitHub Actions + kubectl apply) cukup.
Migration risk
Dari ArgoCD ke FluxCD (atau sebaliknya)
Saya pertimbangkan di BUMN 2025, akhirnya hybrid (Flux untuk 4 service Helm-heavy, ArgoCD untuk sisanya).
- Effort full migration: 8-12 minggu untuk 20 service
- Pain point: model sync berbeda (ArgoCD Application vs Flux Kustomization/HelmRelease)
- Lesson: hybrid acceptable kalau boundary jelas
Dari Spinnaker ke ArgoCD
Pengalaman SaaS klien 2024: 14 minggu untuk migrate 50 pipeline.
- Pain point: Spinnaker pipeline DSL beda dengan ArgoCD Sync Wave / Hook
- Manual stage Spinnaker → ArgoCD Sync Window + manual approval
- Cloud provider integration (Lambda, GCE) → tidak ada equivalent ArgoCD native, butuh redesign
Dari Jenkins X ke ArgoCD
Jenkins X development dormant 2024+. Saya rekomendasi migrate ke ArgoCD untuk team yang masih di Jenkins X.
Common pitfall
- Out-of-band kubectl apply. Engineer ngerasa “cepat aja kubectl apply” → ArgoCD detect drift → auto-revert atau alert. Disable kubectl write akses untuk semua user, hanya CI/CD service account yang boleh.
- Auto-sync prune aggressive. Auto-prune=true bisa delete resource yang tidak ter-declare di Git. Untuk resource important (PVC dengan data), pakai annotation
argocd.argoproj.io/sync-options: Prune=false. - Secret di Git plaintext. NEVER. Pakai SealedSecret + Bitnami controller, atau External Secret Operator + Vault/AWS Secrets Manager backend.
- No sync window untuk production. Auto-sync 24/7 kena outage kalau bug merged Friday afternoon. Sync window: pause auto-sync di luar jam kerja untuk service kritis.
- ApplicationSet generator complexity. Matrix generator dengan banyak dimension = combinatorial explosion. Pakai filter + selector. Test dengan dry-run sebelum apply.
RBAC + multi-team
ArgoCD Project + Role
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: payment
spec:
description: Payment domain team
sourceRepos:
- 'https://github.com/company/payment-*'
destinations:
- namespace: 'payment-*'
server: '*'
roles:
- name: payment-admin
policies:
- p, proj:payment:payment-admin, applications, *, payment/*, allow
groups:
- company:payment-team-leads
- name: payment-readonly
policies:
- p, proj:payment:payment-readonly, applications, get, payment/*, allow
groups:
- company:payment-team
Per-team isolation via Project + Role. Audit log siapa-akses-apa via ArgoCD audit event → Splunk.
FluxCD multi-tenant
Per-tenant namespace + Flux multi-tenancy:
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: payment-team
namespace: flux-payment
spec:
url: https://github.com/company/payment-services
Namespace boundary RBAC standar K8s.
Cost of ownership 36 bulan
Skenario: fintech series-B + BUMN, total 26 service, 8 cluster.
| Item | ArgoCD self-host | FluxCD self-host | Spinnaker |
|---|---|---|---|
| Software 3 tahun | Rp 0 | Rp 0 | Rp 0 |
| Compute infra | Rp 137 juta | Rp 83 juta | Rp 360 juta |
| Ops engineer | Rp 270 juta | Rp 180 juta | Rp 720 juta |
| Migration/setup | Rp 80 juta | Rp 95 juta | Rp 200 juta |
| Total 3 tahun | Rp 487 juta | Rp 358 juta | Rp 1,28 miliar |
Flux paling murah cash + ops. ArgoCD middle. Spinnaker 3x lebih mahal — worth-nya hanya untuk multi-cloud kompleks.
Saya pilih ArgoCD di fintech karena ekosistem (Argo Rollouts untuk progressive delivery, Argo Workflows untuk pipeline) match dengan need. Worth premium Rp 130 juta vs Flux.
Indonesia specific
Data residency
ArgoCD / Flux self-host di GKE Jakarta + repo manifest di self-host GitLab (atau GitHub Enterprise Cloud) = compliance OJK acceptable. Untuk BUMN dengan mandate on-prem absolut: GitLab self-host on-prem + ArgoCD self-host.
Compliance audit
ArgoCD event log → Splunk via webhook. Format JSON timestamped. Audit retention 7 tahun via archive ke S3 Glacier. KAP audit Q1 2026 passed dengan 0 finding terkait GitOps.
Hiring
ArgoCD engineer di Jakarta: pool moderate-baik. Komunitas KubeCon Jakarta + CNCF meetup aktif. Senior ArgoCD engineer Rp 35-50 juta/bulan.
FluxCD: pool kecil. Senior engineer butuh kompensasi premium atau train dari ArgoCD background (2-3 minggu ramp-up).
Spinnaker engineer: pool sangat kecil (mostly veteran dari adopsi 2018-2022). Hiring susah.
Yang surprising
Setelah 26 bulan: ApplicationSet ArgoCD ternyata jadi feature yang paling impact di productivity. Sebelum pakai, multi-cluster sync = banyak Application YAML manual. Setelah pakai, 80% reduction YAML repetition. Recommend semua adoption setelah ArgoCD basic stable.
Surprise lain: Flux Image Automation lebih elegan dari ekspektasi. Saya try selama 6 bulan di BUMN — push commit ke Git via Flux saat image baru, full audit trail di Git history. Lebih GitOps-pure dari ArgoCD pattern (CI push manifest + ArgoCD sync). Trade-off: butuh setup Image Reflector + Image Automation controllers.
Verdict
Conditional dengan rule konkret:
- Default K8s-native enterprise Indonesia 2026: ArgoCD. Ekosistem terlengkap, UI matang, hiring mudah.
- Helm-heavy + GitOps purist preference: FluxCD. Simpler ops, Image Automation native.
- Multi-cloud kompleks (K8s + Lambda + GCE): Spinnaker (atau Argo Workflows + custom integration).
- Skip Jenkins X untuk new project 2026 — development dormant.
- Hybrid OK (ArgoCD + Flux di domain berbeda) — saya jalankan di BUMN, work fine.
Threshold konkret untuk adopt GitOps: 5+ service di K8s + 3+ cluster atau environment + tim engineering 5+ dev. Di bawah ini, kubectl apply di CI cukup, GitOps overhead tidak justify.
Ditulis oleh Asti Larasati