Kubernetes ist seit Jahren der De-facto-Standard für Container-Orchestrierung — und gleichzeitig eine der häufigsten Quellen für Frustration im Entwickleralltag. YAML-Syntax, Indent-Fehler, vergessene Labels, falsch konfigurierte Probes: Die Einstiegshürde ist hoch, die Fehlerquellen vielfältig. Claude Code ändert das fundamental.
Als KI-gestützter Coding-Assistent versteht Claude Code nicht nur die Kubernetes-API, sondern auch deine Applikation. Es generiert kontextsensitive Manifeste, erklärt Fehlermeldungen aus kubectl describe und schlägt produktionsreife Optimierungen vor — von Resource-Limits über Liveness-Probes bis hin zu vollständigen Helm-Charts.
In diesem Artikel zeigen wir, wie Entwickler 2026 mit Claude Code Kubernetes-Workflows drastisch beschleunigen. Alle Beispiele sind mit Kubernetes v1.31 und den aktuellen Best Practices getestet.
📚 Inhaltsverzeichnis
- Kubernetes Grundkonzepte: Pods, Deployments, ReplicaSets
- Services & Networking: ClusterIP, NodePort, LoadBalancer
- Ingress & TLS: nginx Controller, cert-manager, Let's Encrypt
- ConfigMaps & Secrets: Env-Vars, Volume Mounts, ESO
- Helm Charts: values.yaml, Templates, helmfile
- Production: HPA, PDB, Resource-Limits, Probes
1. Kubernetes Grundkonzepte: Pods, Deployments, ReplicaSets
Bevor Claude Code wirklich nützlich wird, lohnt es sich, die drei wichtigsten Kubernetes-Primitiven zu verstehen. Sie bauen aufeinander auf und bilden das Fundament jeder K8s-Deployment-Strategie.
Ein Pod kapselt einen oder mehrere Container, die sich einen Netzwerk-Namespace und Storage teilen. Pods sind ephemer — sie werden nie direkt gemanagt, sondern immer über höhere Abstraktionen wie Deployments.
Claude Code generiert Pods selten direkt — stattdessen arbeitet es mit Deployments, die Pods über ReplicaSets verwalten und bei Ausfällen automatisch neu starten.
Ein Deployment beschreibt den gewünschten Zustand deiner Applikation: welches Container-Image, wie viele Replicas, welche Update-Strategie. Kubernetes sorgt dafür, dass der tatsächliche Zustand dem gewünschten entspricht.
Deployment mit Claude Code generieren
Statt YAML manuell zu schreiben, genügt ein Satz an Claude Code:
Claude Code Prompt: "Erstelle ein Kubernetes Deployment für meine Node.js-API mit dem Image my-registry/api:1.4.2, 3 Replicas, Port 8080, Rolling-Update-Strategie mit maxSurge 1 und maxUnavailable 0, und Resource-Requests von 100m CPU / 128Mi Memory."
deployment.yaml
# Generiert von Claude Code — produktionsreif
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
namespace: production
labels:
app: api
version: "1.4.2"
spec:
replicas: 3
selector:
matchLabels:
app: api
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: api
version: "1.4.2"
spec:
containers:
- name: api
image: my-registry/api:1.4.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: http
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
Grundlegende kubectl-Befehle
Claude Code kennt auch die richtigen kubectl-Befehle für jeden Anwendungsfall:
terminal
# Deployment anwenden
kubectl apply -f deployment.yaml
# Deployment-Status prüfen
kubectl get deployments -n production
kubectl rollout status deployment/api-deployment -n production
# Pods anzeigen (mit Node-Zuordnung)
kubectl get pods -n production -o wide
# Details zu einem Pod
kubectl describe pod api-deployment-7d9b8f-xk2lp -n production
# Logs eines Pods
kubectl logs -f api-deployment-7d9b8f-xk2lp -n production
# Rollback bei Problemen
kubectl rollout undo deployment/api-deployment -n production
# Deployment skalieren
kubectl scale deployment/api-deployment --replicas=5 -n production
Das ReplicaSet wird automatisch vom Deployment erstellt und stellt sicher, dass immer die gewünschte Anzahl an Pod-Replicas läuft. Fällt ein Pod aus, startet das ReplicaSet sofort einen Ersatz.
Claude Code erkennt typische ReplicaSet-Probleme wie ImagePullBackOff, CrashLoopBackOff oder unerfüllte Node-Selectors und schlägt konkrete Lösungen vor.
Claude Code ist besonders wertvoll, wenn du Fehlermeldungen direkt in den Chat einfügst. Ein kubectl describe pod-Output mit OOMKilled liefert sofort die Ursache (zu wenig Memory-Limit) und den Fix (angepasste Resource-Limits).
2. Services & Networking: ClusterIP, NodePort, LoadBalancer
Pods bekommen bei jedem Neustart eine neue IP-Adresse — für stabile Netzwerkkommunikation braucht man Services. Ein Service ist eine stabile virtuelle IP, die Traffic an alle passenden Pods weiterleitet.
| Service-Typ |
Erreichbarkeit |
Typischer Einsatz |
| ClusterIP |
Nur intern im Cluster |
Microservice-zu-Microservice Kommunikation |
| NodePort |
Über Node-IP + Port (30000–32767) |
Entwicklung, lokale Tests ohne LoadBalancer |
| LoadBalancer |
Extern via Cloud-LB (AWS ELB, GCP LB) |
Production-Traffic auf Managed Kubernetes |
| ExternalName |
DNS-Alias auf externen Hostname |
Migration, externe Datenbanken über DNS |
ClusterIP-Service
Der Standard-Service-Typ für interne Kommunikation. Claude Code generiert ihn automatisch passend zum Deployment-Label-Selector:
service-clusterip.yaml
apiVersion: v1
kind: Service
metadata:
name: api-service
namespace: production
labels:
app: api
spec:
type: ClusterIP
selector:
app: api # Muss mit Deployment-Pod-Labels übereinstimmen
ports:
- name: http
port: 80 # Service-Port (intern erreichbar)
targetPort: 8080 # Container-Port
protocol: TCP
Nach dem Anlegen des ClusterIP-Service ist die API intern unter api-service.production.svc.cluster.local:80 erreichbar — oder kurz api-service aus dem gleichen Namespace.
Claude Code erklärt diese DNS-Konventionen und generiert korrektes Service-Discovery in Umgebungsvariablen, ConfigMaps oder Sidecars.
LoadBalancer-Service für Production
service-loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: api-lb
namespace: production
annotations:
# AWS-spezifisch: interner LoadBalancer (kein öffentlicher Zugang)
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
type: LoadBalancer
selector:
app: api
ports:
- name: http
port: 80
targetPort: 8080
- name: https
port: 443
targetPort: 8443
sessionAffinity: ClientIP # Sticky Sessions
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
Service debuggen mit kubectl
terminal
# Service anzeigen + externe IP ermitteln
kubectl get svc api-lb -n production -w
# Endpoints prüfen (sind Pods als Endpoints registriert?)
kubectl get endpoints api-service -n production
# Service von einem Debug-Pod aus testen
kubectl run debug --image=nicolaka/netshoot -it --rm -- \
curl -v http://api-service.production.svc.cluster.local/health
# DNS-Auflösung testen
kubectl run dnstest --image=busybox -it --rm -- \
nslookup api-service.production.svc.cluster.local
Häufiger Fehler: Label-Selector stimmt nicht mit Pod-Labels überein — der Service hat dann keine Endpoints und der Traffic landet im Nichts. Claude Code validiert Label-Selektoren automatisch und warnt bei Mismatches.
3. Ingress & TLS: nginx Controller, cert-manager, Let's Encrypt
Für HTTP/HTTPS-Traffic von außen ist Ingress die Kubernetes-native Lösung. Ingress-Objekte definieren Routing-Regeln (Host-basiert, Pfad-basiert), und ein Ingress Controller (z.B. nginx, Traefik, HAProxy) setzt sie um.
Der nginx Ingress Controller ist der meistgenutzte in Kubernetes. Claude Code generiert den kompletten Setup-Befehl inklusive passender Annotations für dein Cloud-Umfeld.
terminal — Installation nginx Ingress Controller
# Via Helm (empfohlen)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.service.type=LoadBalancer \
--set controller.metrics.enabled=true \
--set controller.podAnnotations."prometheus\.io/scrape"=true
# Warten bis Controller-Pod läuft
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=120s
# Externe IP des Ingress-Controllers ermitteln
kubectl get svc ingress-nginx-controller -n ingress-nginx
cert-manager für automatisches TLS
Claude Code richtet cert-manager mit Let's Encrypt ein — vollautomatische TLS-Zertifikate ohne manuellen Aufwand:
terminal — cert-manager installieren
# cert-manager via Helm installieren
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true \
--version v1.14.0
clusterissuer-letsencrypt.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: devops@meine-firma.de
privateKeySecretRef:
name: letsencrypt-prod-key
solvers:
- http01:
ingress:
class: nginx
Ingress mit TLS und Host-basiertem Routing
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
namespace: production
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
nginx.ingress.kubernetes.io/rate-limit: "100"
nginx.ingress.kubernetes.io/rate-limit-window: "1m"
spec:
tls:
- hosts:
- api.meine-firma.de
- www.meine-firma.de
secretName: api-tls-cert # cert-manager schreibt hier das Zertifikat rein
rules:
- host: api.meine-firma.de
http:
paths:
- path: /v1
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
- path: /health
pathType: Exact
backend:
service:
name: api-service
port:
number: 80
- host: www.meine-firma.de
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-service
port:
number: 80
Claude Code Vorteil: Ingress-Annotations sind berüchtigt für Tippfehler und undokumentiertes Verhalten. Claude Code kennt alle nginx-, Traefik- und AWS-ALB-Annotations auswendig und generiert kontextabhängig die richtigen Werte — inklusive Rate-Limiting, CORS-Headers und Rewrite-Regeln.
4. ConfigMaps & Secrets: Env-Vars, Volume Mounts, ESO
Kubernetes trennt Konfiguration und Secrets sauber vom Container-Image. ConfigMaps speichern nicht-sensitive Konfigurationsdaten, Secrets verschlüsselte sensible Werte wie Passwörter oder API-Keys.
ConfigMap erstellen und einbinden
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: api-config
namespace: production
data:
# Einfache Key-Value-Paare
LOG_LEVEL: "info"
NODE_ENV: "production"
MAX_CONNECTIONS: "100"
CACHE_TTL: "300"
# Mehrzeilige Konfigurationsdatei (als Volume mountbar)
app.config.json: |
{
"database": {
"poolSize": 20,
"idleTimeout": 30000,
"connectionTimeout": 5000
},
"features": {
"rateLimiting": true,
"caching": true,
"metrics": true
}
}
deployment-with-configmap.yaml (Auszug)
spec:
containers:
- name: api
image: my-registry/api:1.4.2
envFrom:
- configMapRef:
name: api-config # Alle Key-Value als Env-Vars einbinden
volumeMounts:
- name: config-volume
mountPath: /app/config
readOnly: true
volumes:
- name: config-volume
configMap:
name: api-config
items:
- key: app.config.json
path: app.config.json
Secrets sicher verwalten
Kubernetes Secrets sind standardmäßig nur base64-kodiert, nicht verschlüsselt. In Production-Clustern sollte man Encryption at Rest aktivieren oder External Secrets Operator (ESO) mit AWS Secrets Manager, HashiCorp Vault oder Azure Key Vault nutzen.
terminal — Secret erstellen
# Secret aus Literal-Werten (kubectl kodiert automatisch base64)
kubectl create secret generic api-secrets \
--from-literal=DATABASE_URL=postgresql://user:pass@db:5432/myapp \
--from-literal=JWT_SECRET=mein-super-geheimes-jwt-secret-key \
--from-literal=REDIS_PASSWORD=redis-password-123 \
--namespace=production \
--dry-run=client -o yaml > secret.yaml
# NIEMALS Secrets in Git committen! sealed-secrets oder ESO nutzen!
external-secrets.yaml — AWS Secrets Manager Integration
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: api-external-secrets
namespace: production
spec:
refreshInterval: "1h"
secretStoreRef:
name: aws-secrets-manager
kind: ClusterSecretStore
target:
name: api-secrets # Erstellt Kubernetes Secret
creationPolicy: Owner
data:
- secretKey: DATABASE_URL
remoteRef:
key: prod/api/database # AWS Secrets Manager Key
property: url
- secretKey: JWT_SECRET
remoteRef:
key: prod/api/auth
property: jwt_secret
5. Helm Charts: values.yaml, Templates, helmfile
Helm ist der Package Manager für Kubernetes. Statt einzelne YAML-Dateien zu verwalten, bündelt Helm alle Kubernetes-Ressourcen in einem wiederverwendbaren Chart. Claude Code generiert komplette Charts inklusive Templates, values.yaml und Dokumentation.
Ein Helm Chart ist ein Verzeichnis mit einer definierten Struktur. Claude Code erstellt die komplette Chart-Struktur auf Anfrage — inklusive NOTES.txt, _helpers.tpl und Tests.
terminal — Helm Chart erstellen
# Neues Chart erstellen
helm create my-api
# Chart-Struktur
my-api/
├── Chart.yaml # Metadaten (Name, Version, Dependencies)
├── values.yaml # Default-Werte
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── configmap.yaml
│ ├── hpa.yaml
│ ├── _helpers.tpl # Template-Hilfsfunktionen
│ └── NOTES.txt # Post-Install-Hinweise
├── charts/ # Abhängige Charts (Subcharts)
└── .helmignore
values.yaml
# Default-Werte — überschreibbar per -f oder --set
replicaCount: 2
image:
repository: my-registry/api
tag: "1.4.2"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
targetPort: 8080
ingress:
enabled: true
className: nginx
host: api.meine-firma.de
tls: true
clusterIssuer: letsencrypt-prod
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
config:
logLevel: info
nodeEnv: production
maxConnections: 100
nodeSelector: {}
tolerations: []
affinity: {}
Helm-Befehle im Alltag
terminal
# Chart installieren
helm install my-api ./my-api \
--namespace production \
--create-namespace \
-f values-production.yaml
# Update (Rolling Upgrade)
helm upgrade my-api ./my-api \
--namespace production \
--set image.tag=1.5.0 \
--atomic \ # Rollback bei Fehler
--wait # Warten bis alle Pods ready
# Release-Übersicht
helm list -n production
# Release-History
helm history my-api -n production
# Rollback auf vorherige Version
helm rollback my-api 3 -n production
# Chart vor Installation prüfen (Dry-Run)
helm upgrade --install my-api ./my-api \
--dry-run --debug \
-f values-production.yaml
# Generierte Manifeste anzeigen
helm template my-api ./my-api -f values-production.yaml
helmfile für Multi-Environment-Management
Claude Code kennt auch helmfile — das deklarative Tool für mehrere Helm-Releases und Umgebungen:
helmfile.yaml
repositories:
- name: ingress-nginx
url: https://kubernetes.github.io/ingress-nginx
- name: jetstack
url: https://charts.jetstack.io
environments:
staging:
values:
- environments/staging.yaml
production:
values:
- environments/production.yaml
releases:
- name: cert-manager
namespace: cert-manager
chart: jetstack/cert-manager
version: v1.14.0
set:
- name: installCRDs
value: true
- name: ingress-nginx
namespace: ingress-nginx
chart: ingress-nginx/ingress-nginx
version: 4.9.1
- name: my-api
namespace: production
chart: ./charts/my-api
values:
- values.yaml
- environments/{{ .Environment.Name }}.yaml
6. Production: HPA, PodDisruptionBudget, Resource-Limits, Probes
Ein Kubernetes-Cluster der nur "läuft" reicht für Production nicht. Hochverfügbarkeit, automatische Skalierung und graceful Degradation erfordern zusätzliche Ressourcen. Claude Code generiert alle produktionsrelevanten Komponenten in einem Zug.
Horizontal Pod Autoscaler (HPA)
Der HPA skaliert Deployments automatisch basierend auf CPU-, Memory- oder Custom-Metriken:
hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-hpa
namespace: production
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-deployment
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 5 Min warten vor Scale-Down
policies:
- type: Pods
value: 2
periodSeconds: 60 # Max 2 Pods pro Minute entfernen
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 100
periodSeconds: 15 # Schnell hochskalieren bei Bedarf
PodDisruptionBudget (PDB)
Ein PDB verhindert, dass bei Cluster-Upgrades oder Node-Drains zu viele Pods gleichzeitig ausfallen:
Ohne PDB kann ein kubectl drain alle Pods einer Anwendung gleichzeitig beenden — auch wenn 0 Replicas verfügbar sind. Mit PDB erzwingt Kubernetes eine Mindestanzahl laufender Pods.
pdb.yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: api-pdb
namespace: production
spec:
minAvailable: 2 # Mindestens 2 Pods müssen immer laufen
selector:
matchLabels:
app: api
Liveness- und Readiness-Probes
Probes sind kritisch für Production: Readiness entscheidet, ob ein Pod Traffic bekommt. Liveness entscheidet, ob Kubernetes den Pod neu startet:
deployment-probes.yaml (Auszug)
containers:
- name: api
image: my-registry/api:1.4.2
livenessProbe:
httpGet:
path: /health/live # Antwortet solange Prozess nicht hängt
port: 8080
initialDelaySeconds: 15 # Warten bis App gestartet ist
periodSeconds: 20
failureThreshold: 3 # 3x fehlschlagen → Pod neu starten
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /health/ready # Antwortet wenn DB-Verbindung etc. bereit
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
successThreshold: 1
startupProbe:
httpGet:
path: /health/live
port: 8080
failureThreshold: 30 # 30 * 10s = 5 Min für langsamen Start
periodSeconds: 10
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 5"] # Graceful Shutdown
terminationMessagePolicy: FallbackToLogsOnError
Vollständiges Production-Deployment mit Claude Code
In der Praxis fragt man Claude Code einfach:
Claude Code Prompt: "Erstelle ein Production-ready Kubernetes Deployment für meine Go-API mit Image registry.io/go-api:2.1.0. Inkl. HPA (2-15 Replicas, 70% CPU), PDB (min 2 available), Liveness/Readiness/Startup Probes auf /healthz, Resource Requests 200m/256Mi, Limits 1000m/512Mi, und Anti-Affinity damit Pods auf verschiedene Nodes verteilt werden."
terminal — Production-Rollout prüfen
# Alle wichtigen Ressourcen auf einmal prüfen
kubectl get deploy,pods,svc,ingress,hpa,pdb -n production
# HPA-Status mit aktuellen Metriken
kubectl get hpa api-hpa -n production
# Events der letzten 30 Min anzeigen (Fehler, Scale-Events)
kubectl get events -n production --sort-by='.lastTimestamp' | tail -20
# Resource-Usage aller Pods
kubectl top pods -n production
# Node-Resource-Auslastung
kubectl top nodes
# Deployment-History anzeigen
kubectl rollout history deployment/api-deployment -n production
# Gezielter Rollback auf Revision 3
kubectl rollout undo deployment/api-deployment --to-revision=3 -n production
Kopiere den Output von kubectl describe pod PODNAME oder kubectl get events direkt in Claude Code. Der Assistent analysiert OOMKilled, ImagePullBackOff, Pending-Zustände, fehlgeschlagene Probes und gibt konkrete Fixes — oft innerhalb von Sekunden.
Besonders wertvoll: Claude Code erklärt nicht nur was falsch ist, sondern auch warum — und passt das Fix direkt an dein bestehendes YAML an.
Fazit: Kubernetes mit Claude Code — produktiver von Tag 1
Kubernetes ist mächtig, aber komplex. Die Lernkurve ist steil, die YAML-Syntax fehleranfällig, und best practices ändern sich mit jeder neuen Version. Claude Code reduziert diese Komplexität drastisch — nicht durch Abstraktion, sondern durch tiefes Verständnis der Kubernetes-API.
- Deployments: Claude Code generiert Rolling-Update-konfigurierte Deployments mit korrekten Labels, Selektoren und Resource-Limits — auf Anhieb richtig.
- Services & Networking: ClusterIP, NodePort und LoadBalancer mit passenden Annotations für AWS, GCP und Azure — kontextabhängig generiert.
- Ingress & TLS: nginx Controller, cert-manager und Let's Encrypt in Minuten statt Stunden konfiguriert.
- Secrets-Management: ESO-Integration mit AWS Secrets Manager, Vault oder Azure Key Vault — sicher und compliance-konform.
- Helm Charts: Komplette Chart-Strukturen mit values.yaml, Templates und helmfile — wiederverwendbar für alle Umgebungen.
- Production: HPA, PDB, Probes und Resource-Limits — die Bausteine für 99,9%+ Uptime.
Der eigentliche Gewinn liegt nicht in einzelnen generierten Manifesten — sondern darin, dass du dich auf Architektur und Geschäftslogik konzentrieren kannst, während Claude Code die YAML-Ebene übernimmt. Kubernetes-Expertise wird nicht überflüssig, aber der Einstieg und der Alltag werden fundamental einfacher.
Claude Code 14 Tage kostenlos testen
Starte noch heute und lass Claude Code deine Kubernetes-Manifeste, Helm-Charts und kubectl-Workflows übernehmen. Kein Setup, keine Kreditkarte für den Test.
Jetzt kostenlos starten →
Kein Kreditkarte erforderlich · 14 Tage Trial · Jederzeit kündbar