NatronTech Logo
Troubleshooting

Troubleshooting Commands

Stage
Experimental

Troubleshooting Commands

Nützliche Befehle und One-Liner für die tägliche Arbeit mit Kubernetes und Helm.

Debugging Basics

Erster Schritt bei Problemen: Status und Events prüfen.

  • get: Zeigt den aktuellen Status (z.B. CrashLoopBackOff, Pending).
  • describe: Liefert Details und die letzten Events (unverzichtbar bei Scheduling- oder Image-Fehlern).
  • logs: Zeigt die Konsolenausgabe der Applikation.

Offizieller Kubernetes Troubleshooting Guide

Cluster Health

# Basis-Infos
kubectl cluster-info

# API Erreichbarkeit (vom Client)
curl -k "https://<CPL-IP>:6443/livez?verbose"

# Kubelet Health (auf dem Node)
curl http://127.0.0.1:10248/healthz

Aufräumen (Housekeeping)

[!WARNING] Diese Befehle löschen Ressourcen. Vorsicht beim Ausführen in Produktionsumgebungen!

Evicted/Failed Pods entfernen

Löscht alle Pods, die nicht mehr gesund sind (z.B. Evicted, Error).

kubectl get pods --all-namespaces | egrep "Evicted|Error|ContainerStatusUnknown" | awk '{print $1, $2}' | xargs -n2 sh -c 'kubectl delete pod -n "$0" "$1"'

Gescheiterte Jobs bereinigen

Löscht Jobs, die nicht erfolgreich durchgelaufen sind.

kubectl get jobs.batch -o jsonpath='{range .items[?(@.status.failed==1)]}{.metadata.name}{"\n"}{end}' | xargs -r kubectl delete job

Analyse & Übersicht

Welche Images laufen im Cluster?

Listet alle verwendeten Container-Images und zählt deren Häufigkeit.

kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c

Pod Prioritäten anzeigen

kubectl get pods -A -o custom-columns="NAME:.metadata.name,NAMESPACE:.metadata.namespace,PRIORITY:.spec.priorityClassName"

Konnektivitäts-Check (Network Loop)

Ein Bash-Einzeiler, der kontinuierlich eine URL prüft und Status-Code sowie Zeit ausgibt. Ideal, um kurze Aussetzer während Deployments zu erkennen.

while true; do echo -n "$(date '+%Y-%m-%d %H:%M:%S') - "; curl -s -o /dev/null -w "%{http_code}\n" --connect-timeout 1 --max-time 2 https://example.com || echo "FAIL"; sleep 1; done

Standard Pod-Befehle

# Status und IP
kubectl get pods -n <namespace>

# Events und Konfiguration
kubectl describe pod <pod-name> -n <namespace>

# Logs (aktuell)
kubectl logs <pod-name> -n <namespace>

# Logs (vor dem Crash)
kubectl logs <pod-name> -n <namespace> --previous

Helm

# Alle Releases anzeigen
helm list -A

# Aktuell deployte Values auslesen (User-Supplied Values)
helm get values <release-name> -n <namespace>

# Was würde bei einem Upgrade passieren? (Dry-Run)
helm upgrade --install <release-name> <chart-path> -f values.yaml --dry-run

Kustomize

# Manifeste rendern (ohne Apply)
kubectl kustomize <path-to-kustomization-directory>

# Apply mit Prune (löscht entfernte Ressourcen)
# Vorsicht: --all kann gefährlich sein, wenn Selektoren zu breit sind!
kubectl apply -k <path-to-kustomization-directory> --prune --all

On this page