Otázku „ArgoCD alebo Flux?" dostávam pravidelne a moja odpoveď nikoho nepoteší: záleží. Nie preto, že by som sa vyhýbal názoru, ale preto, že obidva nástroje točím v produkcii — ArgoCD na on-prem RKE2 klastroch s app-of-apps, Flux v Azure/AKS. Oba robia tú istú vec dobre. Líšia sa v tom, ako ti to robia, a to rozhoduje.
Spoločný model
Nech si vyberieš čokoľvek, dostaneš ten istý základ: Git ako jediný zdroj pravdy, pull-based reconcile loop bežiaci v klastri a priebežné porovnávanie želaného stavu (Git) s reálnym stavom (API server). Žiadny kubectl apply z CI, žiadne credentials klastra vyhodené von. Controller si ťahá manifesty sám. Toto je celé jadro GitOps a v ňom sa nelíšia.
Rozdiel je vo filozofii balenia. ArgoCD je produkt. Flux je sada controllerov.
ArgoCD: aplikácia s názorom
ArgoCD točí všetko okolo CRD Application — jedna Application = jeden zdroj (repo + path/Helm chart) namapovaný do cieľového klastra a namespace. Cez ApplicationSet generuješ tieto Application hromadne (generátory typu Git, list, cluster, matrix), čo je nenahraditeľné, keď spravuješ ten istý stack naprieč desiatkami klastrov.
Bootstrapping rieši app-of-apps — jedna root Application, ktorá ukazuje na adresár ďalších Application. Presne toto točím on-prem. K poradiu nasadenia slúžia sync waves (anotácia argocd.argoproj.io/sync-wave, nižšie čísla idú prvé — typicky CRD na -5, operátory -3, infra -1, appky 1+) a resource hooks s fázami PreSync / Sync / PostSync na migrácie, smoke testy a podobne.
A potom je tu web UI. Toto je dôvod, prečo si tímy vyberajú ArgoCD častejšie, než priznajú. Vidieť diff, strom resource-ov, prečo je app OutOfSync, kliknúť na rollback — to je pre dev tímy, ktoré nežijú v kubectl, obrovský rozdiel.
Flux: GitOps Toolkit
Flux nie je jedna appka, je to GitOps Toolkit — sada špecializovaných controllerov:
- source-controller — ťahá artefakty z Git a Helm repozitárov
- kustomize-controller — aplikuje manifesty (CRD
Kustomization) - helm-controller — deklaratívny Helm (CRD
HelmRelease) - notification-controller — eventy, alerty, príchodzie webhooky
- image-reflector-controller + image-automation-controller — image automation (od Flux 2.7 GA)
Žiadne vstavané UI. Pre niekoho mínus, pre mňa v Azure plus — sledovanie ide cez Prometheus metriky a Grafanu, kam aj tak všetko tečie, a stav čítam cez flux get. Flux je úprimnejšie „GitOps-native" a skladateľný: nasadíš len controllery, ktoré naozaj potrebuješ.
Image automation — najväčší reálny rozdiel
Toto je miesto, kde sa nástroje rozchádzajú najvýraznejšie. Flux má image automation ako prvotriednu funkciu: reflector skenuje registry na nové tagy, automation commituje aktualizovanú referenciu obrazu späť do Gitu. Deklaratívne, auditovateľné, cez vlastné CRD.
ArgoCD natívne nové tagy nedeteguje. Potrebuješ samostatný Argo CD Image Updater — companion projekt, ktorý je stále menej vyzretý a riadi sa anotáciami. Pri pár appkách v pohode, pri škálovaní sa anotácie ťažko spravujú. Keď je auto-bump obrazov tvrdá požiadavka, Flux to robí čistejšie.
Secrets
Tu má Flux taktiež navrch v jednom konkrétnom prípade: kustomize-controller vie SOPS dešifrovať natívne pri reconcile, bez ďalšieho controllera. Šifrované secrety committed priamo do Gitu fungujú out of the box.
ArgoCD si secrets nerieši sám — spoľahneš sa na ekosystém: Sealed Secrets, External Secrets Operator, prípadne SOPS cez plugin. To nie je nevýhoda, len iný prístup. ESO aj tak používam v oboch svetoch, lebo Vault je u nás tak či tak zdrojom pravdy.
Drift, self-heal, ServerSideApply
Oba detegujú drift a vedia self-heal (vrátiť ručné zmeny do Git stavu). Oba podporujú ServerSideApply — pri ArgoCD ho zapínam takmer vždy pre CRD kvôli limitu veľkosti anotácie z client-side apply. Pozor: bol tam regresný bug, kde SSA pri zlyhaní porušilo poradie sync waves — ak točíš SSA s wavemi, over si verziu.
Multi-tenancy
ArgoCD: AppProjects ohraničujú, čo a kam smie app nasadiť. Flux: namespace-scoped service accounty a Kustomization impersonation. Oba sa dajú pokaziť rovnako — ak nenavrhneš hranice pred onboardingom tímov, skončíš s over-privileged controllerom, ktorý deployuje kdekoľvek.
Kedy siaham po čom
- Tím chce UI, rollbacky klikom, app-of-apps a ApplicationSets naprieč mnohými klastrami → ArgoCD. Toto je môj on-prem default.
- Chcem čisto deklaratívny, skladateľný toolkit, natívnu image automation a SOPS bez ďalších kúskov → Flux. Toto beží v Azure.
Žiadny víťaz. Sú to dve odpovede na tú istú otázku — a tá správna závisí od toho, kto bude k tomu repu sadať každý deň.