Warum hinter fast jedem Pod ein Deployment steckt — und du nie nackte Pods deployst.
Du kannst einen Pod direkt erstellen. Solltest du aber fast nie. Stirbt der Node, ist der Pod weg — niemand bringt ihn zurück. Diese Lektion zeigt die Kette, die für Selbstheilung und Updates sorgt.
| Schicht | Job |
|---|---|
| Pod | Führt die Container aus. Sterblich, ersetzbar. |
| ReplicaSet | Hält genau N gleiche Pods am Leben. Stirbt einer, erstellt es einen neuen. |
| Deployment | Verwaltet ReplicaSets → ermöglicht rollende Updates & Rollbacks. |
Beim Update erzeugt das Deployment ein neues ReplicaSet (neue Version) und fährt das alte herunter — Pod für Pod. Genau das macht später Rollback möglich.
Kubernetes verbindet die Schichten nicht über Namen, sondern über Labels (Tags am Pod)
und Selectors (Suchfilter). Das Deployment sagt sinngemäß: „alle Pods mit app=web
gehören zu mir“.
spec:
selector:
matchLabels:
app: web # der Selector des Deployments
template:
metadata:
labels:
app: web # dasselbe Label am Pod → sie gehören zusammen
Löschst du einen vom Deployment verwalteten Pod, ersetzt das ReplicaSet ihn binnen Sekunden. Das ist kein Schaden — der Soll-Zustand bleibt erhalten. Schau es dir an:
# Alle drei Schichten nebeneinander (Beispiel-Namespace)
kubectl get deploy,rs,pods -n ai-ops
# Woher kommt ein Pod? Suche im describe nach "Controlled By"
kubectl describe pod -n ai-ops <pod-name> | grep -i "Controlled By"
Controlled By: ReplicaSet/… beweist: dieser Pod ist Teil der Matrjoschka. Ein Pod ganz ohne
„Controlled By“ wäre ein nackter Pod — der hätte kein Sicherheitsnetz.
| Brauchst du… | Objekt |
|---|---|
| zustandslose App (Web, API) | Deployment |
| einen Pod pro Node (Agent, Log-Collector) | DaemonSet |
| stabile Identität + Storage (Datenbank) | StatefulSet |
| einmalige Aufgabe / Cronjob | Job / CronJob |
Für den Anfang gilt: im Zweifel Deployment.