Av Magne Skjeret
Flux er som en utrettelig robotassistent som holder øye med Git-repoet ditt og sørger for at Kubernetes-clusteret alltid ser ut slik som koden i repoet sier det skal. Det er litt som å ha en person som konstant sjekker at alle møblene i huset står der de skal, og flytter dem tilbake hvis noen har rota.
GitOps handler om å bruke Git som én eneste kilde til sannhet (single source of truth) for hvordan infrastrukturen din skal se ut. Alt som kjører i Kubernetes-clusteret ditt er beskrevet i Git, og endringer rulles ut ved å commite til repoet.
Tradisjonelt ville man ofte:
Kjøre kubectl apply fra laptopen sin
Eller sette opp CI/CD som pusher til Kubernetes API
Dette krever at du åpner brannmuren og eksponerer Kubernetes API-et.
Dette er ikke alltid trygt! 🔒
Flux snur hele flyten på hodet. I stedet for at noe utenfor clusteret pusher endringer inn (push-basert), så poller Flux repoet fra innsiden av clusteret (pull-basert):

Fordeler:
✅ Ingen åpning i brannmuren
✅ Kubernetes API er ikke eksponert
✅ Alt er definert i Git
✅ Automatisk synkronisering
✅ Lett å rulle tilbake (bare revert commiten!)
Første steg er å installere Flux i clusteret ditt. Dette gjøres én gang:
flux bootstrap github \
--owner=GITHUB_USER \
--repository=manifests \
--branch=main \
--path=./clusters/production
Dette installerer Flux og setter opp en kobling mellom Git-repoet ditt og clusteret. Den deployer kun fra valgt path.
GitRepository er Flux sin måte å holde øye med et Git-repo på:
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: flux-system
namespace: flux-system
spec:
interval: 5m # Sjekk repoet hvert 5. minutt
url: https://github.com/myorganization/manifests
ref:
branch: main
Flux vil nå laste ned innholdet fra repoet hvert 5. minutt og lagre det som en "artifact" (en slags snapshot).
En Kustomization forteller Flux hvilke filer som skal legges til i clusteret:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: flux-system
namespace: flux-system
spec:
interval: 10m
path: ./clusters/production # Mappen i repoet
prune: true # Fjern ressurser som ikke lenger er i Git
sourceRef:
kind: GitRepository
name: manifests
Når Flux finner nye endringer, legger den automatisk disse til clusteret. Hvis du sletter en fil fra Git, vil Flux også slette ressursen fra clusteret (hvis prune: true).
Du kan definere at noen ting må deployes før andre:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: flux-system
namespace: flux-system
spec:
dependsOn:
- name: infra # Vent til infrastruktur er klar
interval: 10m
path: ./manifests/portal
sourceRef:
kind: GitRepository
name: manifests
Nå vil Flux vente med å deploye manifests/portal til infra er ferdig deployet.
Flux har fantastisk støtte for Helm charts! Ofte vil du bruke Helm charts fra eksterne repositories (som Prometheus, Grafana, PostgreSQL osv.).
Først definerer du hvor Helm chart-repoet ligger:
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: prometheus-community
namespace: flux-system
spec:
interval: 1h # Sjekk for nye chart-versjoner hver time
url: https://prometheus-community.github.io/helm-charts
Så bruker du HelmRelease for å faktisk installere et chart:
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: prometheus
namespace: monitoring
spec:
interval: 15m
chart:
spec:
chart: kube-prometheus-stack # Navnet på chartet
version: ">=79.0.0 <80.0.0" # Versjon (kan bruke ranges!)
sourceRef:
kind: HelmRepository
name: prometheus-community
namespace: flux-system
values:
# Her kan du overstyre Helm values
prometheus:
prometheusSpec:
retention: 30d
storageSpec:
volumeClaimTemplate:
spec:
resources:
requests:
storage: 50Gi
Hva skjer her?
Flux laster ned kube-prometheus-stack chart fra Helm-repoet
Den installer chartet i monitoring namespacet
Values fra values: seksjon overstyrer default-verdiene i chartet
Flux sjekker hvert 15. minutt om det har kommet nye versjoner som matcher >=79.0.0 <80.0.0
En av de kuleste tingene med Flux er at du kan bruke SemVer ranges:
version: "1.x" # Oppgrader automatisk til alle 1.x versjoner
version: ">=1.2.0 <2.0.0" # Oppgrader innenfor dette ranget
Flux vil automatisk oppdage nye versjoner og deploye dem!
Flux kommer med et CLI-verktøy som gjør det lett å sjekke status:
# Se alle GitRepository-kilder
flux get sources git
# Se alle Kustomizations
flux get kustomizations
# Se alle HelmReleases
flux get helmreleases
# Tvinge synkronisering med en gang
flux reconcile kustomization portal --with-source
# Se hva Flux holder på med (live!)
flux logs --follow
Flux gjør GitOps enkelt:
🔄 Automatisk synkronisering mellom Git og Kubernetes
🔒 Ingen eksponering av Kubernetes API utover (pull, ikke push)
📦 Førsteklasses støtte for Helm charts
🎯 Avhengighetsstyring mellom deployments
🔄 Automatisk rollback ved feil
🚀 Auto-upgrade av Helm charts med SemVer
Med Flux kan dere trygt holde alle Kubernetes-manifestene deres i Git, og Flux sørger for at clusteret alltid er i sync. Endringer deployes ved å pushe til Git - ikke noe behov for å åpne brannmurer eller eksponere API-er! 🎉