7 KiB
Final Talk — GitOps in de praktijk
Duur: ~20 min + Q&A
Format: Slides of whiteboard, optioneel met live demo
1. Wat we gebouwd hebben (7 min)
Architectuurdiagram
┌─────────────────────────────────────────────────────────┐
│ Jouw laptop │
│ │
│ Browser ──────────────────────────────────────────► │
│ podinfo.192.168.56.200.nip.io │
│ argocd.192.168.56.200.nip.io │
│ grafana.192.168.56.200.nip.io (bonus) │
└────────────────────────┬────────────────────────────────┘
│ VirtualBox host-only
▼ 192.168.56.200 (MetalLB)
┌─────────────────────────────────────────────────────────┐
│ VM: ops-demo (192.168.56.10) │
│ │
│ ┌──────────────────┐ ┌───────────────────────────┐ │
│ │ Ingress-Nginx │ │ ArgoCD │ │
│ │ (LB: .200) │ │ kijkt naar deze Git repo │ │
│ └──────┬───────────┘ └───────────┬───────────────┘ │
│ │ │ synct │
│ ▼ ▼ │
│ ┌──────────────────┐ ┌───────────────────────────┐ │
│ │ podinfo │ │ MetalLB │ │
│ │ (Deployment) │ │ (geeft LAN IP's uit) │ │
│ └──────────────────┘ └───────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Tekton Pipeline │ │
│ │ clone → validate → bump tag → git push │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
De GitOps loop (vertel dit hardop)
- Alles in de cluster staat als declaratie in deze Git repo
- ArgoCD kijkt naar de repo en reconcilet de cluster naar die gewenste state
- De Tekton pipeline wordt zelf ook door ArgoCD gedeployed, en pusht commits die ArgoCD daarna weer synct
- De enige
kubectl applydie je vandaag deed: bootstrap van ArgoCD + PipelineRun triggeren
Stack recap
| Component | Rol |
|---|---|
| k3s | Single-binary Kubernetes |
| ArgoCD | GitOps engine (App-of-Apps) |
| MetalLB | Bare-metal LoadBalancer |
| Ingress-Nginx | HTTP routing op hostname |
| Tekton | CI pipeline (in-cluster) |
| podinfo | Demo-applicatie |
| kube-prometheus-stack | Observability (bonus) |
2. Waarom GitOps in productie (8 min)
De oude manier: imperatieve deploys
VM
# Iemand draait dit op vrijdagmiddag kubectl set image deployment/api api=company/api:v2.3.1-hotfix # Geen review. Geen audit trail. Niemand weet wie dit om 16:47 deed.
De GitOps manier
PR: "bump API naar v2.3.1-hotfix"
→ peer review
→ merge
→ ArgoCD synct
→ deploy gebeurt
→ Git commit IS de audit trail
Belangrijkste voordelen
Audit trail: Elke clusterwijziging heeft een Git commit: wie, wat, wanneer, waarom.
Drift detection: Als iemand direct kubectl apply doet, ziet ArgoCD drift en kan het automatisch terugdraaien. De cluster convergeert altijd terug naar wat in Git staat.
Disaster recovery: Cluster weg? vagrant up + ./scripts/vm/bootstrap.sh + kubectl apply -f apps/root.yaml en ArgoCD bouwt alles opnieuw op. Git is je backup.
Samenwerking tussen teams: Developers openen PR's voor deploys. Ops reviewt manifest-wijzigingen. Geen SSH-sleutels op productie nodig.
Rollback: git revert <commit> + git push. Geen speciale tooling nodig.
Het App-of-Apps pattern (kort)
Eén root Application beheert alle andere Applications. Nieuwe service toevoegen = één YAML-file in apps/ toevoegen. De root app pakt die automatisch op.
apps/root.yaml ──manages──► apps/argocd.yaml
apps/apps/podinfo.yaml
apps/networking/metallb.yaml
apps/networking/ingress-nginx.yaml
apps/ci/tekton.yaml
apps/ci/pipeline.yaml
apps/monitoring/prometheus-grafana.yaml
3. Wat is de volgende stap (5 min)
Secrets management
Vandaag: plain Kubernetes Secrets met GitHub PATs.
In productie: Vault + external-secrets-operator
Vault (secret store)
→ external-secrets-operator haalt secrets op
→ maakt Kubernetes Secrets aan
→ ArgoCD synct de rest
Multi-cluster met ApplicationSets
Vandaag: één cluster, één repo.
In productie: 10 clusters, één repo.
# ArgoCD ApplicationSet: deploy podinfo naar elke cluster uit de lijst
generators:
- list:
elements:
- cluster: staging
- cluster: prod-eu
- cluster: prod-us
Progressive delivery
Vandaag: rolling update (all-or-nothing).
In productie: Argo Rollouts met canary of blue/green.
Nieuwe versie → 5% van traffic
→ metrics goed → 20% → 50% → 100%
→ metrics slecht → auto-rollback
Optionele live demo (~5 min)
Doe een one-line wijziging in manifests/apps/podinfo/deployment.yaml (bijv. UI-kleur),
push naar GitHub, klik Refresh in ArgoCD en laat pod restart + nieuwe UI zien.
De groep heeft dit al gedaan, maar live verteld landt de GitOps loop beter.
Q&A prompts (als het stil valt)
- "Hoe pak je database migrations aan in een GitOps flow?"
- "Wat gebeurt er als twee mensen tegelijk naar Git pushen?"
- "Wanneer is GitOps NIET de juiste tool?" (antwoord: local dev, scripts, one-off jobs)
- "Hoe houd je secrets op schaal uit Git?"