GitOps en Argo Cheatsheet voor CGOA en CAPA: concepten op één pagina
De kernconcepten, commando’s en patronen voor het CGOA (GitOps) en CAPA (Argo) examen op één pagina. Beide zijn meerkeuze-examens — begrip telt meer dan commando’s uit het hoofd kennen.
🔑 De vier GitOps-principes (CGOA)
- Declaratief — gewenste toestand beschreven als code (YAML), niet als stappen
- Versiebeheerd — alles in Git, de enige bron van waarheid
- Automatisch toegepast — goedgekeurde wijzigingen worden automatisch uitgerold
- Continu geverifieerd — werkelijke toestand wordt voortdurend vergeleken met Git
Push vs Pull: Push = CI/CD pusht naar cluster (minder veilig). Pull = agent in cluster haalt op uit Git (GitOps-voorkeur, veiliger).
📐 Kustomize (CGOA)
# Structuur
mijn-app/
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ └── service.yaml
└── overlays/
├── dev/kustomization.yaml
└── productie/kustomization.yaml
# overlays/productie/kustomization.yaml
resources:
- ../../base
replicas:
- name: myapp
count: 5
images:
- name: myapp
newTag: v2.1.0
# Bekijken zonder toepassen
kubectl kustomize overlays/productie
# Toepassen
kubectl apply -k overlays/productie
🔄 Flux (CGOA)
# Installeren
curl -s https://fluxcd.io/install.sh | bash
# Bootstrappen op GitHub
flux bootstrap github \
--owner=mijn-org \
--repository=mijn-gitops-repo \
--branch=main \
--path=clusters/productie
# Status bekijken
flux get all
flux get sources git
flux get kustomizations
# Handmatig synchroniseren
flux reconcile source git flux-system
flux reconcile kustomization flux-system
# GitRepository resource
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: mijn-app
namespace: flux-system
spec:
interval: 1m
url: https://github.com/mijnorg/mijn-app
ref:
branch: main
---
# Kustomization resource
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: mijn-app
namespace: flux-system
spec:
interval: 5m
sourceRef:
kind: GitRepository
name: mijn-app
path: "./overlays/productie"
prune: true
🚀 ArgoCD (CAPA)
# Installeren
kubectl create namespace argocd
kubectl apply -n argocd \
-f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# Initieel wachtwoord ophalen
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
# CLI inloggen
argocd login <server> --username admin --password <pass>
# Application aanmaken
argocd app create mijn-app \
--repo https://github.com/mijnorg/mijn-app \
--path overlays/productie \
--dest-server https://kubernetes.default.svc \
--dest-namespace productie
# Synchroniseren
argocd app sync mijn-app
# Status bekijken
argocd app list
argocd app get mijn-app
argocd app diff mijn-app
# Terugdraaien
argocd app rollback mijn-app <revisie-id>
ArgoCD statussen:
Synced = cluster = Git ✓ | OutOfSync = verschil gedetecteerd
Healthy = alle resources operationeel | Degraded = iets ongezond
Progressing = bezig met bijwerken
# Automatische sync in Application-spec
syncPolicy:
automated:
prune: true # Verwijder wat niet in Git staat
selfHeal: true # Herstel handmatige wijzigingen
🎯 Argo Rollouts (CAPA)
# Canary deployment
strategy:
canary:
steps:
- setWeight: 10 # 10% naar nieuwe versie
- pause: {duration: 5m}
- setWeight: 50
- pause: {} # Handmatig goedkeuren
- setWeight: 100
# Blue/Green deployment
strategy:
blueGreen:
activeService: myapp-actief
previewService: myapp-preview
autoPromotionEnabled: false
# Rollout beheren
kubectl argo rollouts get rollout myapp --watch
kubectl argo rollouts promote myapp # Promoten
kubectl argo rollouts abort myapp # Stoppen
kubectl argo rollouts undo myapp # Terugdraaien
⚙️ Argo Workflows (CAPA)
# Workflow uitvoeren
argo submit workflow.yaml --watch
argo list
argo logs <workflow>
# DAG-patroon (parallelle taken)
- name: pipeline
dag:
tasks:
- name: ophalen
template: data-ophalen
- name: verwerken # Na ophalen
template: verwerken
dependencies: [ophalen]
- name: laden # Na verwerken
template: laden
dependencies: [verwerken]
🔐 Beveiliging in GitOps
# Sealed Secrets (veilig in Git opslaan)
kubeseal --format yaml < secret.yaml > sealed-secret.yaml
git add sealed-secret.yaml # Nu veilig om te committen
# Rollback in GitOps
git revert HEAD # Nieuwe commit die ongedaan maakt
git push origin main # GitOps-operator pikt het op
📊 DORA-metrics (CGOA)
- Deployment frequency — hoe vaak wordt er uitgerold?
- Lead time for changes — van commit tot productie
- Change failure rate — welk % uitrollingen veroorzaakt problemen?
- Time to restore service — hoe snel herstel na incident?
⚡ Examentips
- CGOA en CAPA zijn meerkeuze — begrijpen telt meer dan commando’s
- Ken het verschil tussen Flux en ArgoCD (beide pull-based, maar anders opgezet)
- Argo Workflows ≠ Argo Rollouts — weet welke tool waarvoor dient
- Drift = clustertoestand wijkt af van Git — GitOps-operators corrigeren dit automatisch
- Progressive delivery = canary/blue-green/feature flags — kennen welke wanneer