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 u een Deployment aanmaakt, definieert u 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, vervangt u 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` vraagt u een lijst van actieve Pods op, inclusief status, herstartaantallen en de node waarop ze draaien. `kubectl describe pod <naam>` geeft gedetailleerde informatie over configuratie, gebeurtenissen en fouten. `kubectl logs <podnaam>` toont de uitvoer van containers binnen de Pod — essentieel voor debugging. Voor interactieve toegang biedt `kubectl exec -it <podnaam> -- sh` een shell binnen een container.Stappen: 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
U 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` ziet u 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 de clusterstatus, inclusief de Pod-status. U 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 vanuit een lokale ontwikkelomgeving. Deze tools vergemakkelijken het dagelijkse beheer, vooral voor gebruikers die liever geen command-line tools gebruiken.Objecten op hoger niveau
In productie beheert u zelden Pods rechtstreeks. Gebruik objecten op hoger niveau zoals Deployments of StatefulSets, die automatisch Pods aanmaken, updaten en schalen. Een Deployment zorgt er bijvoorbeeld voor 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 — waarbij u aangeeft wat u 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 de 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 wanneer 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 containeropslag blijft deze data bestaan zolang de Pod actief is, ook wanneer een container herstart.Verificatie
Controleer of uw 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 de 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 onmiddellijk. Bekijk de logs met `kubectl logs
kubectl exec werkt niet
De container heeft geen shell of de Pod bevindt zich niet in de 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 u Pods rechtstreeks beheert, maar hoe ver u de automatisering erboven durft te leggen.