Kubernetes & DevOps

Kubernetes für Entwickler mit Claude Code:
Deployments, Services, Ingress 2026

Claude Code generiert produktionsreife K8s-Manifeste — Deployments, Services, Ingress-Regeln, ConfigMaps, Secrets und Helm-Charts ohne stundenlange YAML-Fehlersuche.

📅 6. Mai 2026 ⏱ 12 min Lesezeit 🔐 Kubernetes v1.31

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

  1. Kubernetes Grundkonzepte: Pods, Deployments, ReplicaSets
  2. Services & Networking: ClusterIP, NodePort, LoadBalancer
  3. Ingress & TLS: nginx Controller, cert-manager, Let's Encrypt
  4. ConfigMaps & Secrets: Env-Vars, Volume Mounts, ESO
  5. Helm Charts: values.yaml, Templates, helmfile
  6. 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.

Pod Die kleinste deploybare Einheit in Kubernetes

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.

Deployment Deklarativer Zustand für deine Applikation

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
ReplicaSet Automatische Selbstheilung für Pods

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
SERVICE Service Discovery im Cluster

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.

INGRESS nginx Ingress Controller installieren

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

SECRET Kubernetes Secrets — base64, nicht verschlüsselt!

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.

HELM Chart-Struktur — Claude Code generiert alles

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:

PRODUCTION PodDisruptionBudget — Hochverfügbarkeit bei Wartung

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
TIPP Claude Code als K8s-Debugger

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.

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