FluxCD — GitOps pre Kubernetes
FluxCD je open-source GitOps nástroj, ktorý automaticky synchronizuje stav Kubernetes klastra s definíciami uloženými v Git repozitári. Je súčasťou CNCF a patrí medzi najpoužívanejšie GitOps riešenia.
Čo je GitOps?
GitOps je operačný model, kde:
- Git je single source of truth — všetky konfigurácie sú v repozitári
- Deklaratívny popis — definujete požadovaný stav, nie kroky
- Automatická synchronizácia — systém priebežne zabezpečuje zhodu stavu
- Pull-based model — klaster si sťahuje zmeny z Gitu (nie push z CI)
FluxCD vs ArgoCD
| Vlastnosť | FluxCD | ArgoCD |
|---|---|---|
| Architektúra | Sada kontrolérov | Monolitická aplikácia |
| UI | Weave GitOps (voliteľné) | Bohaté vstavaný UI |
| Multi-tenancy | Natívna podpora | Cez AppProject |
| Helm podpora | Natívna (HelmRelease) | Natívna |
| Kustomize | Natívna (Kustomization) | Natívna |
| Image automation | Vstavaná | Cez Argo Image Updater |
| Notifikácie | Vstavaný provider systém | Cez notifications engine |
| Zložitosť | Nižšia, modulárna | Vyššia, ale viac out-of-the-box |
Kedy FluxCD: Preferujete modulárnu architektúru, CLI-first prístup, multi-tenant prostredie.
Kedy ArgoCD: Potrebujete bohaté UI, vizuálny prehľad synchronizácie, väčší tím s rôznymi skillami.
Architektúra FluxCD
FluxCD sa skladá z niekoľkých kontrolérov:
- Source Controller — sleduje Git repozitáre, Helm repozitáre a OCI artefakty
- Kustomize Controller — aplikuje Kustomize manifesty
- Helm Controller — spravuje Helm release-y
- Notification Controller — odosiela a prijíma eventy
- Image Reflector & Automation — deteguje nové verzie obrazov
Inštalácia
Prerekvizity
# Inštalácia Flux CLI
curl -s https://fluxcd.io/install.sh | bash
# Overenie kompatibility klastra
flux check --pre
Bootstrap s GitHub
flux bootstrap github \
--owner=moja-organizacia \
--repository=k8s-gitops \
--branch=main \
--path=clusters/production \
--personal
Tento príkaz:
- Vytvorí repozitár (ak neexistuje)
- Nainštaluje Flux kontroléry do klastra
- Nakonfiguruje synchronizáciu s repozitárom
Základné koncepty
GitRepository — zdroj konfigurácií
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: app-config
namespace: flux-system
spec:
interval: 1m
url: https://github.com/org/app-config
ref:
branch: main
secretRef:
name: github-credentials
Kustomization — aplikovanie manifestov
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: app-production
namespace: flux-system
spec:
interval: 5m
path: ./environments/production
prune: true
sourceRef:
kind: GitRepository
name: app-config
healthChecks:
- apiVersion: apps/v1
kind: Deployment
name: frontend
namespace: production
timeout: 3m
HelmRelease — Helm charts cez GitOps
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: nginx-ingress
namespace: ingress-system
spec:
interval: 10m
chart:
spec:
chart: ingress-nginx
version: "4.x"
sourceRef:
kind: HelmRepository
name: ingress-nginx
namespace: flux-system
values:
controller:
replicaCount: 2
resources:
limits:
memory: 256Mi
HelmRepository — zdroj Helm chartov
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: ingress-nginx
namespace: flux-system
spec:
interval: 1h
url: https://kubernetes.github.io/ingress-nginx
Image Automation
FluxCD dokáže automaticky aktualizovať manifesty keď sa objaví nová verzia Docker obrazu.
Image Repository — sledovanie registra
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: myapp
namespace: flux-system
spec:
image: ghcr.io/org/myapp
interval: 5m
Image Policy — pravidlá pre výber verzie
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: myapp
namespace: flux-system
spec:
imageRepositoryRef:
name: myapp
policy:
semver:
range: ">=1.0.0 <2.0.0"
Image Update Automation
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageUpdateAutomation
metadata:
name: flux-system
namespace: flux-system
spec:
interval: 5m
sourceRef:
kind: GitRepository
name: app-config
git:
checkout:
ref:
branch: main
commit:
author:
name: fluxcdbot
email: flux@company.com
messageTemplate: "chore: update image {{range .Changed.Changes}}{{.OldValue}} -> {{.NewValue}}{{end}}"
push:
branch: main
update:
path: ./environments
strategy: Setters
V manifeste potom označíte miesta na aktualizáciu:
containers:
- name: app
image: ghcr.io/org/myapp:1.2.3 # {"$imagepolicy": "flux-system:myapp"}
Notifikácie
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: slack
namespace: flux-system
spec:
type: slack
channel: deployments
secretRef:
name: slack-webhook
---
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: on-call
namespace: flux-system
spec:
providerRef:
name: slack
eventSeverity: error
eventSources:
- kind: Kustomization
name: "*"
- kind: HelmRelease
name: "*"
Štruktúra repozitára
Odporúčaná štruktúra pre multi-environment setup:
k8s-gitops/
├── clusters/
│ ├── production/
│ │ ├── flux-system/ # Flux bootstrap
│ │ ├── infrastructure.yaml # Kustomization pre infra
│ │ └── apps.yaml # Kustomization pre aplikácie
│ └── staging/
│ ├── flux-system/
│ ├── infrastructure.yaml
│ └── apps.yaml
├── infrastructure/
│ ├── base/
│ │ ├── ingress-nginx/
│ │ ├── cert-manager/
│ │ └── monitoring/
│ └── overlays/
│ ├── production/
│ └── staging/
└── apps/
├── base/
│ ├── frontend/
│ └── backend/
└── overlays/
├── production/
└── staging/
Užitočné CLI príkazy
# Stav synchronizácie
flux get all
# Detail konkrétneho zdroja
flux get kustomizations
# Manuálna synchronizácia
flux reconcile kustomization app-production
# Suspend/resume
flux suspend kustomization app-production
flux resume kustomization app-production
# Logy
flux logs --kind=Kustomization --name=app-production
# Export existujúcich zdrojov
flux export source git app-config > git-source.yaml
Záver
FluxCD je elegantný a modulárny GitOps nástroj, ktorý sa výborne hodí pre tímy preferujúce CLI-first prístup a deklaratívnu konfiguráciu. Vďaka natívnej podpore Kustomize, Helm a image automation pokrýva celý lifecycle nasadzovania aplikácií do Kubernetes.