Kubernetes Pods & Deployments

6 Kernkonzepte
Die wichtigsten Konzepte für Pods und Deployments in Kubernetes: Pod · Deployment · ReplicaSet · Labels & Selectors · Rolling Updates · kubectl commands Deployments sind der Standard-Weg, um Anwendungen in Kubernetes auszurollen und zu verwalten. Sie bieten Rolling Updates, Rollbacks und Skalierung – Pods sind die kleinste deploybare Einheit.

Pod – Kleinste deploybare Einheit

Pod · Container · Shared Network
apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80

Pods sind die kleinste deploybare Einheit in Kubernetes. Ein Pod enthält einen oder mehrere Container, die sich ein Netzwerk und Storage teilen. Container im gleichen Pod kommunizieren über localhost.

Beispiele
# Pod aus YAML erstellen
kubectl apply -f pod.yaml
# Pods auflisten
kubectl get pods
# Pod mit 2 Containern (Sidecar)
spec:
containers:
- name: app
image: myapp:latest
- name: sidecar
image: sidecar:latest
# Pod löschen
kubectl delete pod nginx-pod
Tipp: Pods sind "ephemeral" – sie werden nicht automatisch neu gestartet, wenn sie sterben. Für produktive Workloads verwenden Sie Deployments, die Pods verwalten und neu starten.

Deployment – Anwendungen ausrollen

Deployment · spec · replicas · strategy
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25

Deployments verwalten ReplicaSets und Pods und bieten Rolling Updates, Rollbacks und Skalierung. Sie sind der Standard-Weg, um Anwendungen in Kubernetes auszurollen.

Beispiele
# Deployment erstellen
kubectl create deployment nginx --image=nginx:1.25 --replicas=3
# Deployment aus YAML
kubectl apply -f deployment.yaml
# Deployments auflisten
kubectl get deployments
# Deployment skalieren
kubectl scale deployment nginx --replicas=5
# Image aktualisieren
kubectl set image deployment/nginx nginx=nginx:1.26
# Deployment löschen
kubectl delete deployment nginx
Tipp: Deployments kümmern sich um die gewünschte Anzahl von Replicas und führen automatisch Rolling Updates durch, wenn Sie das Image oder andere Teile der Spezifikation ändern.

ReplicaSet – Pod-Replikation

ReplicaSet · replicas · selector · template
apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-rs spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25

ReplicaSets stellen sicher, dass immer eine bestimmte Anzahl von Pod-Replikas läuft. Sie werden von Deployments verwaltet – in der Praxis arbeiten Sie selten direkt mit ReplicaSets.

Beispiele
# ReplicaSets anzeigen
kubectl get replicasets
# Von Deployment verwaltete ReplicaSets
kubectl describe deployment nginx
# ReplicaSet direkt erstellen (selten nötig)
kubectl apply -f replicaset.yaml
Tipp: Sie müssen ReplicaSets nicht direkt verwalten – Deployments übernehmen diese Aufgabe automatisch. ReplicaSets sind dennoch nützlich, um die Historie von Rollouts zu verfolgen.

Labels & Selectors – Ressourcen organisieren

labels · selector · matchLabels · matchExpressions
metadata: labels: app: web tier: frontend version: v1 selector: matchLabels: app: web

Labels sind Schlüssel-Wert-Paare, die zur Organisation und Selektion von Kubernetes-Ressourcen verwendet werden. Selectors wählen Ressourcen anhand ihrer Labels aus.

Beispiele
# Nach Labels filtern
kubectl get pods -l app=nginx
# Mehrere Labels
kubectl get pods -l app=nginx,tier=frontend
# Label zu Pod hinzufügen
kubectl label pod nginx-pod version=v1
# Label entfernen
kubectl label pod nginx-pod version-
# Alle Pods mit bestimmten Labels anzeigen
kubectl get pods --show-labels
Tipp: Labels sind das Herzstück von Kubernetes' Organisationsmodell. Verwenden Sie konsistente Labels wie app, tier und version für bessere Übersicht und Selektion.

Rolling Updates & Rollbacks – Zero-Downtime-Updates

rollout · strategy · maxSurge · maxUnavailable
kubectl rollout status deployment/nginx kubectl rollout history deployment/nginx kubectl rollout undo deployment/nginx kubectl rollout undo deployment/nginx --to-revision=2

Rolling Updates aktualisieren Pods schrittweise ohne Downtime. Rollbacks setzen ein Deployment auf eine frühere Revision zurück – ideal für Fehlerbehebung.

Update-Strategien

Strategie Beschreibung
RollingUpdate Pods werden schrittweise ersetzt (Standard)
Recreate Alle Pods werden gleichzeitig gelöscht und neu erstellt (Downtime)
Beispiele
# Status des Rollouts prüfen
kubectl rollout status deployment/nginx
# History anzeigen
kubectl rollout history deployment/nginx
# Auf vorherige Revision zurücksetzen
kubectl rollout undo deployment/nginx
# Auf bestimmte Revision zurücksetzen
kubectl rollout undo deployment/nginx --to-revision=2
# Rolling-Update-Parameter in YAML
spec:
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
Tipp: kubectl rollout undo ist Ihr bester Freund bei fehlgeschlagenen Updates. Die History zeigt alle Revisionen – so können Sie jederzeit zurück zu einer stabilen Version.

kubectl Befehle – Die wichtigsten Kommandos

apply · get · describe · logs · exec · delete
kubectl get pods kubectl describe pod nginx kubectl logs -f nginx-pod kubectl exec -it nginx-pod -- bash

kubectl ist das Kommandozeilen-Tool zur Verwaltung von Kubernetes-Clustern. Diese Befehle sind für die tägliche Arbeit unverzichtbar.

Die wichtigsten kubectl-Befehle

Befehl Beschreibung
kubectl get <resource> Ressourcen auflisten (pods, deployments, services)
kubectl get all Alle Ressourcen im Namespace anzeigen
kubectl describe <resource> <name> Detaillierte Informationen zu einer Ressource
kubectl logs <pod-name> Logs eines Pods anzeigen
kubectl logs -f <pod-name> Logs live verfolgen
kubectl exec -it <pod-name> -- bash Shell im Pod öffnen
kubectl apply -f <file> Ressource aus YAML erstellen oder aktualisieren
kubectl delete -f <file> Ressource aus YAML löschen
kubectl delete <resource> <name> Ressource nach Namen löschen
kubectl scale deployment <name> --replicas=N Deployment skalieren
kubectl rollout status deployment/<name> Status eines Rollouts prüfen
kubectl rollout undo deployment/<name> Rollback durchführen
kubectl port-forward <pod> local:remote Port-Weiterleitung für Debugging
kubectl -n <namespace> Namespace für den Befehl angeben
Beispiele
kubectl get pods -o wide # Mit zusätzlichen Details
kubectl get deployment -n production # In Namespace production
kubectl describe pod nginx-pod # Detaillierte Infos
kubectl logs -f --tail=50 web-pod # Letzte 50 Log-Zeilen live
kubectl exec -it web-pod -- /bin/sh # Shell (sh) im Container
kubectl port-forward pod/web-pod 8080:80 # Port-Fowarding
Tipp: Verwenden Sie kubectl get all, um eine schnelle Übersicht über alle Ressourcen in einem Namespace zu erhalten. Mit -w (watch) können Sie Änderungen live verfolgen.

Pods & Deployments im Überblick

Pod Kleinste deploybare Einheit
1+ Container, shared Network
Deployment Anwendungen ausrollen
Rolling Updates, Rollbacks
ReplicaSet Pod-Replikation
Wird von Deployment verwaltet
Labels Ressourcen organisieren
app, tier, version
Selector Ressourcen selektieren
matchLabels, matchExpressions
Rollout Updates & Rollbacks
status, history, undo

Quick Summary

Pod
Kleinste Einheit
Deployment
Anwendungen ausrollen
ReplicaSet
Pod-Replikation
Labels
Organisation
rollout
Updates/Rollbacks
kubectl
Cluster-Verwaltung
kubectl create deployment nginx --image=nginx:1.25 --replicas=3 · kubectl rollout undo deployment/nginx