Les 5 · Module 1 · Compose goed onder de knie
Waarom Kubernetes, en wanneer niet
Begrijp wat Kubernetes oplost dat Compose niet doet: gewenste toestand, meerdere nodes, zelfherstel en rolling updates, en weeg eerlijk af wanneer de complexiteit het waard is.
🎯 Na deze les kun je
- het idee van gewenste toestand en controllers uitleggen
- de onderdelen van een cluster benoemen: control plane, nodes, kubelet
- beschrijven wat Kubernetes toevoegt boven Compose
- beargumenteren wanneer Kubernetes niet de juiste keuze is
Compose start containers op één machine en is daarna klaar. Valt die machine uit, dan ligt alles plat. Wil je zonder downtime een nieuwe versie uitrollen, dan moet je dat zelf regelen. Kubernetes is gemaakt voor containers op meerdere machines, die zichzelf herstellen. Deze les is vooral uitleg; vanaf les 6 ga je aan de slag.
Gewenste toestand
In Compose zeg je "start deze containers". In Kubernetes beschrijf je wat er moet zijn:
kind: Deployment
spec:
replicas: 3 # er moeten altijd 3 teller-pods draaien
Controllers vergelijken voortdurend de werkelijkheid met die beschrijving en grijpen in. Crasht een pod, dan maakt de controller een nieuwe. Valt een node uit, dan worden de pods elders gestart. Dit heet een reconciliation loop: niet één keer uitvoeren, maar blijven bijsturen.
De onderdelen
Control plane Nodes (werkpaarden)
├─ API-server ← kubectl praat hier ├─ kubelet: start pods op deze node
├─ etcd (de opgeslagen staat) ├─ container runtime (containerd)
├─ scheduler (welke node?) └─ kube-proxy / CNI: netwerk
└─ controller-manager (controllers)
Alles loopt via de API-server. kubectl apply stuurt je YAML daarheen; etcd slaat het op; de scheduler kiest een node; de kubelet op die
node start de container.
Wat je erbij krijgt
| Behoefte | Compose | Kubernetes |
|---|---|---|
| Meerdere machines | nee | ja |
| Herstarten bij crash | ja (restart) |
ja, plus bij falende liveness |
| Verkeer alleen naar gezonde instanties | nee | ja (readiness) |
| Rolling update zonder downtime | handwerk | ingebouwd, met terugdraaien |
| Automatisch schalen | nee | HorizontalPodAutoscaler |
| Rechten per team | nee | RBAC, namespaces |
Wanneer niet
Kubernetes heeft een prijs: veel concepten, veel YAML, een cluster dat onderhoud vraagt (upgrades, certificaten, monitoring).
Voorspel eerst: een vereniging heeft een website met een database, 200 bezoekers per dag en één vrijwilliger die het onderhoudt. Is Kubernetes een goede keuze?
Uitkomst
Waarschijnlijk niet. Eén server met Docker Compose, automatische back-ups en een uptime-melding geeft hier 99% van het nut, met een fractie van het onderhoud. Kubernetes loont als je meerdere services, meerdere teams, hogere beschikbaarheidseisen of wisselende belasting hebt, of als je organisatie het platform al levert (een beheerd cluster van je hostingpartij). Kies het gereedschap bij het probleem, niet andersom.
Alternatieven die vaak genoeg zijn: Compose op één VM, een PaaS (bijv. Fly.io, Render, Azure Container Apps, Google Cloud Run), of Docker Swarm.
Beheerd of zelf
- Beheerd (AKS, EKS, GKE, DigitalOcean, Scaleway, …): de aanbieder draait de control plane. Jij beheert je workloads.
- Zelf (kubeadm, k3s): volledige controle, volledige verantwoordelijkheid.
- Lokaal (kind, minikube, k3d, Docker Desktop): om te leren en te testen. Deze cursus gebruikt kind.
Typische misvattingen
- "Kubernetes maakt mijn app schaalbaar." Alleen als je app stateless is: geen sessies in het geheugen, geen bestanden op lokale schijf.
- "Kubernetes is een vervanging voor Docker." Kubernetes draait images die je met Docker (of een andere tool) bouwt.
- "Met Kubernetes heb ik geen downtime meer." Alleen met meerdere replica's, goede probes en een database die zelf ook beschikbaar blijft.
Oefenen
- Leg in eigen woorden uit wat een reconciliation loop is, met de teller-app als voorbeeld.
- Volg
kubectl apply -f deployment.yamldoor het cluster: welke onderdelen komen in actie, in welke volgorde? - Noem twee dingen uit de teller-app die het lastig maken om hem zonder aanpassing te schalen.
- Beschrijf een project uit je eigen omgeving en beargumenteer: Compose, PaaS of Kubernetes?
Modelantwoord oefening 1
"Ik leg vast dat er 3 teller-pods moeten zijn. De Deployment-controller kijkt steeds hoeveel er werkelijk draaien. Zijn het er 2 omdat er een crashte, dan maakt hij er één bij. Ik hoef niets te herstarten; het systeem stuurt zelf bij naar wat ik beschreef."
Modelantwoord oefening 2
kubectl → API-server (authenticatie, validatie) → etcd (opslag) → Deployment-controller maakt een ReplicaSet → ReplicaSet-controller maakt pods → scheduler kiest per pod een node → kubelet op die node haalt de image op en start de container via containerd.
Modelantwoord oefening 3
(1) De database: één PostgreSQL met een volume is niet zomaar te verdubbelen. (2) Het wachtwoord staat in de configuratie in plaats van in een Secret. De webapp zelf is wel stateless: elke instantie schrijft naar dezelfde database, dus die kun je schalen.
Modelantwoord oefening 4
Een goed antwoord noemt belasting, aantal services, beschikbaarheidseisen, wie het onderhoudt, en kosten. Bijvoorbeeld: "Interne tool, 20 gebruikers, één ontwikkelaar: Compose op een VM. Webshop met pieken bij acties en drie teams: beheerd Kubernetes."
Lokaal oefenen
Geen live lab. In de volgende les installeer je kind, kubectl en een eerste cluster op je eigen computer.
Samenvatting
- Kubernetes werkt met gewenste toestand; controllers sturen voortdurend bij.
- De API-server is het centrum; etcd, scheduler, controllers en kubelets doen de rest.
- Je krijgt meerdere nodes, zelfherstel, rolling updates en schalen, ten koste van complexiteit.
- Kies Kubernetes als het probleem erom vraagt.
- Volgende les: een lokaal cluster met kind.
📝 Quiz: Waarom Kubernetes, en wanneer niet
Dit was de laatste gratis les
Je hebt les 1–5 van Van Docker Compose naar Kubernetes gratis gevolgd. Wil je verder? Met één aankoop (€ 49,00, eenmalig) krijg je de overige 15 lessen, de live labs en het certificaat. Geen abonnement.