Pod (Kubernetes): de kleinste deploybare eenheid
Een Pod bestaat uit één of meer containers die samen draaien op dezelfde node. Deze containers delen niet alleen de host, maar ook resources zoals opslag en netwerk. Alle containers binnen een Pod hebben hetzelfde IP-adres, delen dezelfde poortruimte en hebben toegang tot gemeenschappelijke bestandssystemen. Kubernetes beschrijft dit als een "logical host" — de containers gedragen zich alsof ze onderdeel zijn van één logische machine.
Deze opzet is bewust gekozen. Een Pod is ontworpen om meerdere, nauw gekoppelde containers te hosten die samen één service vormen. Denk aan een webserver met een aparte container voor het comprimeren van statische assets, of een database met een sidecar voor het synchroniseren van backups. Kubernetes plaatst, scheduled en beheert deze containers altijd samen op dezelfde node. Ze starten en stoppen gelijktijdig.
Pod als atomic unit
Vanuit architectuurstandpunt is een Pod de atomic unit van Kubernetes. Alles wat groter is — Deployments, Services, StatefulSets — bouwt op één of meerdere Pods. Wanneer je een Deployment aanmaakt, definieer je de gewenste toestand voor een bepaald aantal identieke Pods. Kubernetes handhaaft dat aantal automatisch, ook als een Pod crasht of wordt verwijderd.Elke Pod heeft een unieke UID, toegewezen door de Kubernetes API server. Deze UID blijft behouden gedurende de levensduur van de Pod. Pods zijn transient — tijdelijk en vervangbaar. Zodra een Pod wordt beëindigd of verwijderd, komt hij niet meer terug. Kubernetes start automatisch een nieuwe Pod op basis van dezelfde specificatie via een Deployment of ReplicaSet. In plaats van machines te repareren, vervang je ze.
Levenscyclus van een Pod
De Kubernetes-documentatie beschrijft vier fasen voor een Pod:- Pending: de Pod is aangemaakt en ingepland, maar de containers zijn nog niet gestart.
- Running: één of meer containers draaien binnen de Pod.
- Succeeded: alle containers zijn beëindigd en succesvol uitgevoerd (bijvoorbeeld een batchjob).
- Failed: een container faalt en kan niet herstarten, of de Pod kan niet gepland worden op een node.
Pods beheren met kubectl
kubectl is de standaard command-line interface voor Kubernetes. Met `kubectl get pods` vraag je een lijst van actieve Pods op, inclusief status, herstartaantallen en de node waarop ze draaien. `kubectl describe podStappen: een Pod aanmaken en beheren
1. Maak een Pod-specificatiebestand aan met de naam `nginx-pod.yaml`:apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
<ul><li>name: nginx</li></ul>
image: nginx:1.25
ports:
- containerPort: 802. Start de Pod met kubectl:
kubectl apply -f nginx-pod.yaml
Dit stuurt de specificatie naar de Kubernetes API server, die de Pod op een beschikbare node plaatst.
3. Controleer de status van de Pod:
kubectl get pods nginx-pod
De output toont de fase (Pending of Running), het aantal herstarts en de node.
4. Bekijk gedetailleerde informatie over de Pod:
kubectl describe pod nginx-pod
Dit toont events, configuratie en eventuele foutmeldingen.
5. Bekijk de logs van de container:
kubectl logs nginx-pod
Dit toont de stdout-output van de nginx-container.
6. Open een shell in de container:
kubectl exec -it nginx-pod -- /bin/bash
Je werkt nu direct in de containeromgeving.
7. Verwijder de Pod:
kubectl delete pod nginx-pod
De Pod wordt beëindigd en komt niet meer terug.
crictl voor low-level beheer
Naast kubectl bestaat crictl, ontworpen voor het beheren van CRI-compatibele container runtimes zoals containerd. Met `crictl pods` zie je alle Kubernetes-pods op een specifieke node, onafhankelijk van de Kubernetes API. Dit is handig voor systeembeheerders die toegang nodig hebben op het niveau van de containerinfrastructuur.Grafische tools
Freelens, een open source Kubernetes IDE, biedt een dashboard met real-time inzichten in clusterstatus, inclusief Pod-status. Je kunt workloads visualiseren, netwerk- en opslagconfiguraties bekijken en rechtstreeks toegang krijgen tot de terminal van een Pod. Podman Desktop stelt gebruikers in staat om containers en Pods te beheren via een grafische interface, met ondersteuning voor Kubernetes-workloads uit een lokale ontwikkelomgeving. Deze tools vergemakkelijken dagelijks beheer, vooral voor gebruikers die liever geen command-line tools gebruiken.Hogere-niveau objecten
In productie manage je zelden Pods direct. Gebruik hogere-niveau objecten zoals Deployments of StatefulSets, die automatisch Pods aanmaken, updaten en schalen. Een Deployment zorgt bijvoorbeeld dat er altijd drie replica's van een bepaalde Pod draaien. Als een Pod faalt, start de Deployment-controller automatisch een nieuwe aan. Dit declaratieve model — waarin je zegt wat je wilt en Kubernetes zorgt voor de rest — is een kernvoordeel van het platform.Netwerken binnen een Pod
Omdat alle containers in een Pod hetzelfde IP-adres delen, communiceren ze met elkaar via `localhost`. Dit vereenvoudigt interne communicatie: een applicatiecontainer roept een sidecar-container aan alsof het een lokaal proces is. Externe toegang tot de Pod gebeurt via Services, die een stabiel netwerkendpoint bieden dat niet verandert als Pods worden vernieuwd. Dit ontkoppelt de netwerklaag van de onderliggende Pods.Opslag binnen een Pod
Via volumes kunnen containers in dezelfde Pod toegang krijgen tot hetzelfde bestandssysteem, bijvoorbeeld voor het delen van configuratiebestanden of het bufferen van data. In tegenstelling tot tijdelijke container-opslag blijft deze data bestaan zolang de Pod actief is, ook als een container herstart.Verificatie
Controleer of je Pod correct draait:kubectl get pods nginx-pod -o wide
De output toont de fase `Running`, het IP-adres van de Pod en de node waarop hij draait.
Veelgestelde problemen
Pod blijft in Pending-fase hangen De Pod kan niet gepland worden op een node. Controleer met `kubectl describe podContainer blijft herstarten (CrashLoopBackOff)
De container start maar faalt direct. Bekijk de logs met `kubectl logs
kubectl exec werkt niet
De container heeft geen shell of de Pod is niet in Running-fase. Controleer de status met `kubectl get pods` en probeer `kubectl exec -it
De Pod blijft de fundamentele bouwsteen van Kubernetes — maar de vraag is niet of je Pods direct beheert, maar hoe ver je de automatisering erboven durft te leggen.