No description
Find a file
2026-03-01 00:32:30 +01:00
apps Restructure main and translate workshop docs to Dutch 2026-02-28 17:06:24 +01:00
docs docs: clarify command context and workshop flow 2026-03-01 00:32:30 +01:00
manifests/argocd Restructure main and translate workshop docs to Dutch 2026-02-28 17:06:24 +01:00
scripts docs: clarify command context and workshop flow 2026-03-01 00:32:30 +01:00
.gitignore chore: fix repo URL, gitignore IDE dirs, and prerequisite docs 2026-02-28 16:07:57 +01:00
README.md docs: clarify command context and workshop flow 2026-03-01 00:32:30 +01:00
Vagrantfile Split host/vm scripts and fix Argo tunnel workflow 2026-02-28 20:04:01 +01:00

Kubernetes GitOps Workshop

Twee en een half tot vier uur hands-on cluster operations met ArgoCD, MetalLB, Ingress-Nginx en Tekton. Alles draait lokaal op een single-node k3s cluster in een VM.


Vóór je begint

Je hebt drie dingen nodig op je laptop. Installeer ze de dag van tevoren — niet op de dag zelf.

Tool Download
VirtualBox 7.x https://www.virtualbox.org/wiki/Downloads — op Windows: reboot alleen als installer/Windows daarom vraagt
Vagrant 2.4.x https://developer.hashicorp.com/vagrant/downloads
Git https://git-scm.com/downloads

Minimaal 12 GB vrij RAM en ~15 GB schijfruimte. Snelle check:

VM

VBoxManage --version && vagrant --version && git --version

Als één van de drie niets teruggeeft: installeren en opnieuw proberen.


Aan de slag

Fork eerst de repo naar je eigen GitHub-account — ga naar https://github.com/paulharkink/ops-demo en klik Fork. Zo kun je zelf pushen zonder dat je toegang nodig hebt tot de originele repo.

  1. Clone je fork op je host-machine.

HOST

git clone https://github.com/JOUW_USERNAME/ops-demo.git && cd ops-demo
  1. Start de VM.

VM

vagrant up
  1. Run bootstrap vanaf je host (script voert bootstrap in de VM uit).

HOST

./scripts/host/bootstrap-from-host.sh

HOST

./scripts/host/bootstrap-from-host.ps1
  1. Open ArgoCD UI via tunnel.

HOST

./scripts/host/argocd-ui-tunnel.sh

HOST

./scripts/host/argocd-ui-tunnel.ps1
  1. Open in je browser:
http://localhost:8080

Volg daarna de oefeningen in volgorde. Zie docs/vm-setup.md als er iets misgaat bij de VM. Deze quickstart voert bootstrap al uit. In Oefening 01 kun je dan direct door naar verificatie en commit/push van apps/root.yaml.

Belangrijk:

  • Je hoeft het VM-IP niet te weten om in te loggen of te tunnelen; gebruik vagrant ssh.
  • Je hoeft de repo niet opnieuw in de VM te clonen: Vagrant mount je host-repo automatisch als /vagrant.

Oefeningen

# Oefening Gids Type Tijd
01 ArgoCD bootstrappen docs/01-argocd-bootstrap.md Kern 30 min
02 podinfo deployen via GitOps docs/02-deploy-podinfo.md Kern 30 min
03 MetalLB + Ingress-Nginx docs/03-metallb-ingress.md Kern 45 min
04 Tekton pipeline docs/04-tekton-pipeline.md Kern 45 min
05 App upgrade + reflectie docs/05-app-upgrade.md Kern 15 min
06 Prometheus + Grafana docs/06-monitoring.md Bonus 60 min

Beginners: focus op 0103 (~1u45m). De rest: probeer 0105 te halen.


Stack

Component Rol Versie
k3s Kubernetes v1.31.4
ArgoCD GitOps engine v2.13.x (chart 7.7.11)
MetalLB Bare-metal LoadBalancer v0.14.9
Ingress-Nginx HTTP-routing chart 4.12.0
Tekton CI-pipeline v0.65.1
podinfo Demo-app 6.6.2 → 6.7.0
kube-prometheus-stack Observability (bonus) chart 68.4.4

Vastgelopen?

Elke solution branch is standalone per oefening (niet cumulatief). Je kunt een PR openen van een solution branch naar jouw eigen branch om precies te zien wat er in die specifieke oefening mist.

Branch Bevat
solution/01-argocd-bootstrap ArgoCD draait
solution/02-deploy-podinfo podinfo gesynchroniseerd via ArgoCD
solution/03-metallb-ingress LAN-toegang via MetalLB + Ingress
solution/04-tekton-pipeline Volledige GitOps CI-loop
solution/05-app-upgrade podinfo op v6.7.0
solution/06-monitoring Prometheus + Grafana actief

Troubleshooting

Probleem Oplossing
A VirtualBox machine with the name 'ops-demo' already exists Je hebt waarschijnlijk twee repo-kopieen met dezelfde VM-naam. Check vagrant global-status --prune. Stop of destroy de andere omgeving, of geef een unieke VM-naam in een van de Vagrantfiles.
vagrant up faalt terwijl vagrant status zegt poweroff Je zit mogelijk in een andere repo-map dan de VM die nu draait. Controleer de directory kolom in vagrant global-status --prune.
Ik weet het ArgoCD admin-wachtwoord niet (meer) Lees het opnieuw uit: vagrant ssh -c "export KUBECONFIG=/home/vagrant/.kube/config; kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d"
Ik kan niet inloggen met vagrant ssh Controleer eerst of je in de juiste repo-map staat (pwd) en run vagrant status. Als de VM niet draait: vagrant up. Helpt dat niet: vagrant global-status --prune en check de directory.
ArgoCD UI niet bereikbaar op http://localhost:8080 Start de tunnel opnieuw: ./scripts/host/argocd-ui-tunnel.sh (of .ps1 op Windows).
kubectl lijkt naar de verkeerde cluster te wijzen Gebruik de host-scripts (./scripts/host/bootstrap-from-host.sh en ./scripts/host/argocd-ui-tunnel.sh) of log in met vagrant ssh en werk vanuit /vagrant. De bootstrap heeft cluster-checks en stopt bij mismatch.
root app blijft Unknown of OutOfSync Controleer of apps/root.yaml naar jouw fork verwijst en of je die commit/push hebt gedaan. Daarna in ArgoCD op Refresh klikken.
Tekton pipeline kan niet pushen naar GitHub Zet credentials opnieuw: in VM ./scripts/vm/set-git-credentials.sh <github-user> <github-pat> (na vagrant ssh + cd /vagrant) of vanaf host vagrant ssh -c "/vagrant/scripts/vm/set-git-credentials.sh <github-user> <github-pat>". Gebruik een PAT met juiste repo-rechten.
MetalLB/Ingress hostnames werken niet Wacht tot networking apps Healthy zijn in ArgoCD en controleer of het host-only netwerk 192.168.56.x actief is.

Handige debug-commando's:

VM

vagrant global-status --prune
vagrant status
kubectl get applications -n argocd
kubectl get pods -A

Netwerk

Jouw laptop
    │  192.168.56.x (VirtualBox host-only)
    ▼
VM: 192.168.56.10
    └── MetalLB pool: 192.168.56.200192.168.56.220
            └── 192.168.56.200  →  Ingress-Nginx
                    ├── podinfo.192.168.56.200.nip.io
                    ├── argocd.192.168.56.200.nip.io
                    └── grafana.192.168.56.200.nip.io  (bonus)