CGOA & CAPA Cheatsheet

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)

  1. Declaratief — gewenste toestand beschreven als code (YAML), niet als stappen
  2. Versiebeheerd — alles in Git, de enige bron van waarheid
  3. Automatisch toegepast — goedgekeurde wijzigingen worden automatisch uitgerold
  4. 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