PerfectScale
kubectl debug: Der komplette Guide zum Troubleshooting von Pods & Nodes
kubectl debug ist ein integrierter Befehl zum Troubleshooting laufender Workloads in einem Kubernetes-Cluster. Er kommt zum Einsatz, wenn Sie einen Container untersuchen müssen, dem grundlegende Debugging-Tools wie eine Shell oder Netzwerk-Utilities fehlen (typisch für minimale "Distroless"-Images), oder wenn ein Pod in einem Crash-Loop feststeckt.
Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.
About Josh Palmer
Head of Content
I'm Josh Palmer, Head of Content at DoiT, where I split my time across multiple business units including DoiT Cloud Intelligence, PerfectScale (Kubernetes cost optimization), and SELECT (Snowflake, Databricks, and BigQuery cost optimization). Before DoiT, I spent four and a half years at OnBoard building content for a board intelligence platform used by 6,000+ organizations, and before that, two years as Content Marketing Manager at Zylo, a SaaS management platform.
My personal pageTL;DR
kubectl debugist der integrierte interaktive Troubleshooting-Befehl von kubectl. Er funktioniert auf drei Arten: einen ephemeren Container zu einem laufenden Pod hinzufügen, eine Kopie eines Pods mit geänderten Einstellungen erstellen oder einen Pod auf einem Node starten, der bei Bedarf privilegierte Rechte erhalten kann.- Nutzen Sie ihn, wenn
kubectl logsundkubectl describenicht ausreichen – etwa bei einem Distroless-Container ohne Shell oder einem Pod imCrashLoopBackOff. - Grundsyntax:
kubectl debug (POD | TYPE/NAME) [flags], am häufigstenkubectl debug my-pod -it --image=busybox. - Debug-Sessions laufen unter einem Debugging-Profil (
--profile, Standardgeneralin aktuellen kubectl-Versionen), das festlegt, welche Capabilities und Namespaces der Debug-Container erhält – er läuft standardmäßig nicht privilegiert. - Best Practice: Beginnen Sie mit Logs/Describe/Events, nutzen Sie ephemere Container nur zum Untersuchen (niemals, um einen laufenden Workload zu patchen), und räumen Sie jeden mit
--copy-toerstellten Pod nach Abschluss wieder auf.
Was ist kubectl debug?
kubectl debug ist ein integrierter Befehl zum Troubleshooting laufender Workloads in einem Kubernetes-Cluster. Er kommt vor allem dann zum Einsatz, wenn Sie einen Container untersuchen müssen, dem grundlegende Debugging-Tools wie eine Shell oder Netzwerk-Utilities fehlen (typisch für minimale "Distroless"-Images), oder wenn ein Pod in einem Crash-Loop feststeckt.
Gängige Befehle:
Die vollständige Syntax finden Sie in der offiziellen Kubernetes-Dokumentation zu kubectl debug.
| Szenario | Beispielbefehl |
|---|---|
| Shell zu laufendem Pod hinzufügen | kubectl debug -it <pod-name> --image=busybox |
| Prozess-Namespace teilen | kubectl debug -it <pod-name> --image=busybox --target=<container-name> |
| Abstürzenden Pod debuggen | kubectl debug <pod-name> -it --copy-to=debug-pod --image=ubuntu -- /bin/bash |
| Cluster-Node debuggen | kubectl debug node/<node-name> -it --image=ubuntu |
Wichtige Flags:
-i/-t(meist kombiniert als-it): Verbindet sofort ein interaktives TTY mit der Konsole des neuen Containers.--target: Gibt einen Container im Pod an, dessen Prozess-Namespace geteilt wird, sodass Sie dessen laufende Prozesse mit Tools wiepssehen können.--copy-to: Benennt einen neuen Pod, der als Kopie des Originals für das Troubleshooting erstellt wird.--profile: Wählt das Debugging-Profil (general,baseline,restricted,netadminodersysadmin), das den Security-Kontext und die Namespaces des Debug-Containers festlegt. Standard istgeneralin aktuellen kubectl-Versionen.
Anwendungsfälle für kubectl debug
Der Befehl arbeitet je nach Zielressource auf drei Arten:
- Ephemere Container: Fügt einem bestehenden, laufenden Pod einen temporären Container mit einem Image Ihrer Wahl (z. B.
busyboxoderubuntu) hinzu. So können Sie Diagnosen durchführen, ohne den Pod neu zu starten. - Pod-Kopien: Erstellt eine Kopie eines Pods mit geänderten Attributen, etwa einem anderen Container-Image oder Befehl. Das ist nützlich für Pods, die beim Start abstürzen und im laufenden Zustand nicht zugänglich sind.
- Node-Debugging: Erstellt einen neuen Pod, der in den Host-Namespaces des Nodes läuft und dessen Root-Dateisystem mountet. Damit lässt sich Troubleshooting auf Infrastruktur-Ebene direkt auf einem Cluster-Node durchführen.

Die Syntax von kubectl debug
Der Befehl kubectl debug unterstützt mehrere Debugging-Workflows: ephemere Container zu Pods hinzufügen, Pod-Kopien für das Troubleshooting erstellen und Nodes debuggen.
kubectl debug (POD | TYPE/NAME) [flags]Zu den häufigsten Flag-Optionen gehören:
| Option | Beschreibung |
|---|---|
-it |
Startet eine interaktive Terminal-Session |
--image |
Legt das Container-Image für das Debugging fest |
--target |
Adressiert einen bestimmten Container innerhalb eines Pods |
--copy-to |
Erstellt eine Kopie eines Pods für das Debugging |
--share-processes |
Aktiviert das Teilen des Prozess-Namespace in kopierten Pods |
--profile |
Wählt das Debugging-Profil (standardmäßig general), das Security-Kontext und Namespaces des Debug-Containers festlegt |
node/NODE_NAME |
Startet eine Debugging-Session für einen Node |
Gängige Befehle mit kubectl debug
1. Shell zu laufendem Pod hinzufügen
Dieses Beispiel fügt einem bestehenden Pod einen ephemeren Container mit Shell hinzu. Der Debug-Container läuft neben den ursprünglichen Containern, ohne sie zu verändern.
kubectl debug my-pod -it --image=busyboxWenn der Pod mehrere Container enthält, können Sie einen bestimmten Container adressieren:
kubectl debug my-pod -it --image=busybox --target=my-containerDas Flag --target teilt den Prozess-Namespace mit dem angegebenen Container, sodass der Debug-Container dessen laufende Prozesse sehen (und mit ihnen interagieren) kann.
2. Prozess-Namespace teilen
Standardmäßig sehen ephemere Container unter Umständen keine Prozesse anderer Container. Das Flag --share-processes aktiviert das Teilen des Prozess-Namespace in einem kopierten Pod, sodass Sie laufende Prozesse containerübergreifend untersuchen können.
kubectl debug my-pod --copy-to=my-pod-debug --share-processes -it --image=busyboxDas ist nützlich für Tools wie ps, top oder strace, wenn Sie Probleme auf Prozessebene untersuchen.
3. Abstürzenden Pod debuggen
Wenn ein Container wiederholt abstürzt, wird er möglicherweise beendet, bevor Sie ihn untersuchen können. Die Option --copy-to erstellt eine Kopie des Pods mit geänderten Einstellungen für das Troubleshooting.
kubectl debug my-pod --copy-to=my-pod-debug -it --image=ubuntuAnschließend können Sie gemountete Volumes, Umgebungsvariablen, Konfigurationsdateien oder Anwendungs-Binaries untersuchen, ohne den ursprünglichen Pod zu beeinträchtigen.
4. Cluster-Node debuggen
kubectl debug kann auch einen temporären Pod erstellen, der an einen Node angehängt ist – für Troubleshooting auf Node-Ebene. Das hilft bei der Untersuchung von kubelet-Problemen, Netzwerkproblemen oder der Festplattenauslastung.
kubectl debug node/my-node -it --image=ubuntuStandardmäßig verwendet das Node-Debugging das Profil general: Der Debug-Pod läuft in den Host-Namespaces des Nodes (hostPID, hostNetwork, hostIPC) und mountet das Root-Dateisystem des Nodes unter /host, läuft aber nicht mit privilegiertem Security-Kontext. Von dort aus können Sie das Host-Dateisystem und Systemdienste untersuchen. Wenn Sie vollen (privilegierten) Root-Zugriff auf den Node benötigen – etwa um Kernel-Module zu laden oder Raw Sockets zu nutzen –, fordern Sie ihn explizit mit --profile=sysadmin an.
kubectl debug vs. kubectl logs vs. kubectl describe
kubectl debug, kubectl logs und kubectl describe sind allesamt Troubleshooting-Befehle, dienen aber unterschiedlichen Zwecken. kubectl logs ruft die Anwendungsausgabe ab, kubectl describe zeigt Details und Events zu Kubernetes-Ressourcen, und kubectl debug bietet interaktiven Zugriff für die Live-Analyse.
| Befehl | Hauptzweck | Typischer Anwendungsfall |
|---|---|---|
kubectl logs |
Container-Logs anzeigen | Anwendungsausgaben und Fehlermeldungen prüfen |
kubectl describe |
Ressourcenzustand und Events einsehen | Scheduling-, Konfigurations- oder Lifecycle-Probleme diagnostizieren |
kubectl debug |
Interaktives Debugging durchführen | Laufende Container, Nodes oder Netzwerkprobleme untersuchen |
kubectl logs
Der Befehl kubectl logs zeigt die stdout- und stderr-Ausgaben von Containern an. Er wird häufig genutzt, um Anwendungsabstürze, Startfehler oder Laufzeitfehler zu identifizieren.
kubectl logs my-podBei Pods mit mehreren Containern geben Sie den Containernamen an:
kubectl logs my-pod -c app-containerDieser Befehl ist leichtgewichtig und sicher, da er den Pod nicht verändert und keine neuen Container erstellt.
kubectl describe
Der Befehl kubectl describe liefert detaillierte Informationen zu Kubernetes-Ressourcen, darunter Labels, Conditions, gemountete Volumes und aktuelle Events.
kubectl describe pod my-podDieser Befehl eignet sich zur Diagnose von Problemen wie:
- Fehlgeschlagenes Scheduling
- Image-Pull-Fehler
- Fehlgeschlagene Probes
- Ressourcenbeschränkungen
- CrashLoopBackOff-Events
Anders als kubectl logs konzentriert er sich auf den Zustand der Kubernetes-Objekte statt auf die Anwendungsausgabe.
kubectl debug
Der Befehl kubectl debug ermöglicht interaktives Troubleshooting, indem er ephemere Container anhängt oder temporäre Debug-Pods erstellt.
kubectl debug my-pod -it --image=busyboxDieser Ansatz hilft, wenn Logs und Ressourcenbeschreibungen nicht ausreichen. Sie können zum Beispiel:
- Netzwerkverbindungen prüfen
- Dateisysteminhalte untersuchen
- Tools zur Prozessanalyse ausführen
- Minimale Container ohne Shell debuggen
- Probleme auf Node-Ebene untersuchen
Da temporäre Debugging-Umgebungen erstellt werden, bietet kubectl debug tieferen Zugriff als die anderen Befehle – bei minimalen Änderungen an produktiven Workloads.
Praktische Beispiele für kubectl debug
Netzwerkverbindungen debuggen
Nutzen Sie einen Debug-Container, um DNS, Service Discovery und ausgehende Netzwerkzugriffe aus dem Netzwerk-Namespace des Pods zu testen.
kubectl debug my-pod -it --image=busybox --target=my-containerFühren Sie im Debug-Container Befehle aus wie:
nslookup kubernetes.defaultwget -qO- http://my-service.default.svc.cluster.localping 10.0.0.10Das ist nützlich, wenn das Anwendungs-Image keine Tools wie nslookup, curl oder ping enthält.
Pod im CrashLoopBackOff debuggen
Erstellen Sie für einen Pod, der ständig neu startet, eine Kopie zur Untersuchung. So bleibt der ursprüngliche Workload unverändert.
kubectl debug my-pod --copy-to=my-pod-debug -it --image=ubuntuIn der Pod-Kopie können Sie Umgebungsvariablen, gemountete Dateien, Konfiguration und Netzwerkzugriff prüfen:
envls -la /etc/configcat /etc/config/app.confSo lassen sich fehlende Dateien, fehlerhafte Umgebungswerte oder Laufzeitabhängigkeiten identifizieren.
Debugging mit geteiltem Prozess-Namespace
Nutzen Sie das Teilen des Prozess-Namespace, wenn Sie Prozesse aus einem anderen Container des Pods untersuchen müssen.
kubectl debug my-pod \ --copy-to=my-pod-debug \ --share-processes \ -it \ --image=ubuntuPrüfen Sie im Debug-Container die laufenden Prozesse:
ps auxtopDas ist nützlich zur Untersuchung hängender Prozesse, Zombie-Prozesse oder unerwarteter Kindprozesse.
Debugging mit eigenem Image
Verwenden Sie ein eigenes Debug-Image, wenn Standard-Images nicht die benötigten Tools enthalten.
kubectl debug my-pod -it \ --image=my-registry.example.com/debug-tools:latest \ --target=my-containerEin eigenes Image kann Tools wie curl, dig, tcpdump, strace oder Datenbank-Clients enthalten. So bleiben Produktions-Images klein, während bei Bedarf trotzdem tiefgehendes Troubleshooting möglich ist.
Best Practices für den Einsatz von kubectl debug
Hier einige bewährte Vorgehensweisen für die Nutzung dieses Befehls.
1. Erst Observability, dann die interaktive Session
Nutzen Sie kubectl logs, kubectl describe, Events, Metriken und Traces, bevor Sie eine interaktive Debug-Session starten. Diese Tools sind schneller, sicherer und reichen oft aus, um das Problem zu identifizieren.
kubectl logs my-podkubectl describe pod my-podkubectl get events --sort-by=.metadata.creationTimestampSo lässt sich klären, ob das Problem an der Anwendung, am Scheduling, an Probes, Ressourcenlimits, am Netzwerk oder an der Kubernetes-Konfiguration liegt. kubectl describe zeigt beispielsweise Image-Pull-Fehler, fehlgeschlagene Readiness Probes oder Fehler beim Mounten von Volumes, bevor Sie Zeit in die direkte Untersuchung des Containers investieren.
Greifen Sie zu kubectl debug, wenn die verfügbaren Signale das Problem nicht erklären oder wenn Sie den Laufzeitzustand aus der Umgebung des Pods heraus untersuchen müssen.
2. Ephemere Container zum Untersuchen nutzen, nicht für Anwendungsänderungen
Ephemere Container sind für das Troubleshooting gedacht. Nutzen Sie sie nicht, um in einem laufenden Workload Dateien zu patchen, Dienste neu zu starten, Abhängigkeiten zu installieren oder das Anwendungsverhalten zu verändern.
Nutzen Sie sie, um den Zustand zu untersuchen, Diagnosebefehle auszuführen und Befunde zu sammeln:
kubectl debug my-pod -it --image=busybox --target=my-containerSie können zum Beispiel die DNS-Auflösung prüfen, gemountete Dateien untersuchen, die Erreichbarkeit von Services testen oder laufende Prozesse einsehen. Diese Aktionen helfen zu verstehen, was passiert, ohne den Workload zu verändern.
Jede Korrektur sollte im Quellcode, im Container-Image, in den Manifesten oder in der Deployment-Pipeline erfolgen. So bleibt das Produktionsverhalten reproduzierbar, und es entstehen keine einmaligen manuellen Änderungen, die nach einem Pod-Neustart wieder verschwinden.
3. Debug-Container statt zusätzlicher Tools im Produktions-Image
Vermeiden Sie es, Shells, Paketmanager und Netzwerk-Tools nur fürs Troubleshooting in Produktions-Images zu installieren. Diese Tools vergrößern das Image und können die Angriffsfläche des Containers erweitern.
Halten Sie Anwendungs-Images stattdessen klein und nutzen Sie bei Bedarf ein separates Debug-Image:
kubectl debug my-pod -it --image=nicolaka/netshoot --target=my-containerDas ist besonders nützlich für minimale Images wie Distroless- oder Scratch-basierte Container, die oft keine Shell enthalten. Ein Debug-Container kann Tools wie curl, dig, tcpdump, ss und ip bereitstellen, ohne das Produktions-Image zu verändern.
Dieser Ansatz sorgt zudem für eine klare Trennung: Das Anwendungs-Image führt den Workload aus, während das Debug-Image nur in kontrollierten Troubleshooting-Sessions zum Einsatz kommt.
4. Freigegebene, sichere Debugging-Images verwenden
Debug-Images enthalten oft leistungsstarke Tools wie tcpdump, strace, curl, dig, Paketmanager und Shell-Utilities. Verwenden Sie ausschließlich freigegebene Images aus vertrauenswürdigen Registries.
Pinnen Sie Image-Versionen, statt Floating Tags zu verwenden:
kubectl debug my-pod -it --image=registry.example.com/debug-tools:1.4.2Freigegebene Images sollten auf Schwachstellen gescannt und aktuell gehalten werden. Sie sollten die Tools enthalten, die Ihre Teams tatsächlich benötigen – ohne überflüssige Pakete.
Auch der Zugriff sollte per RBAC kontrolliert werden. Nicht jeder Benutzer sollte ephemere Container erstellen, sich an sensible Workloads anhängen oder Debug-Sessions auf Node-Ebene starten dürfen. Node-Debugging kann Host-Dateisysteme und Informationen auf Systemebene offenlegen und sollte daher auf vertrauenswürdige Operatoren beschränkt sein – kombinieren Sie das nach Möglichkeit mit dem Flag --profile (restricted oder baseline), um nicht mehr Zugriff zu gewähren, als die Session benötigt.
5. Debug-Pods aufräumen und die Session dokumentieren
Entfernen Sie kopierte Debug-Pods nach dem Troubleshooting, um unnötige Ressourcennutzung und Unordnung im Cluster zu vermeiden.
kubectl delete pod my-pod-debugEphemere Container, die zu bestehenden Pods hinzugefügt wurden, lassen sich nicht aus der Pod-Spezifikation entfernen, stoppen aber, sobald die Debugging-Session endet. Kopierte Pods hingegen verbleiben im Cluster, bis sie gelöscht werden.
Halten Sie fest, was geprüft wurde, welche Befehle ausgeführt wurden und was dabei herauskam. Das erleichtert die Nachbereitung des Vorfalls und hilft, Runbooks für künftige Probleme zu verbessern.
Gute Notizen umfassen den betroffenen Pod oder Node, das verwendete Debug-Image, wichtige Befehlsausgaben und die letztendliche Ursache. So müssen andere Engineers dieselbe Untersuchung später nicht wiederholen.
Weniger manuelles Debugging: Resilienzrisiken proaktiv beheben mit PerfectScale
Befehle wie kubectl debug sind unverzichtbar, wenn Sie einen abstürzenden Pod, einen hängenden Prozess oder ein Problem auf Node-Ebene in Echtzeit untersuchen müssen – doch die meisten dieser Vorfälle gehen auf Ressourcen-Fehlkonfigurationen zurück, die sich früher hätten erkennen lassen. PerfectScale steigert die Resilienz und Performance von Kubernetes autonom: durch Right-Sizing der Workloads, die Vermeidung von Ausfällen und die Optimierung der Ressourcennutzung für 99,99 % Verfügbarkeit. So verbringt Ihr Team weniger Zeit mit interaktiven Debug-Sessions und mehr Zeit mit der Auslieferung neuer Features. Statt darauf zu warten, dass ein Pod ausfällt, und dann zu ephemeren Containern zu greifen, identifiziert und behebt PerfectScale die Resilienzrisiken, die diese Ausfälle überhaupt erst verursachen.
Zentrale Funktionen von PerfectScale:
- Automatische Problembehebung: Identifiziert und behebt Resilienzrisiken sofort, um die Verfügbarkeit zu maximieren und Latenzen zu eliminieren – und verhindert Konfigurationsfehler (fehlende CPU-Requests, fehlende Memory-Requests, fehlende Memory-Limits) sowie Unterversorgung mit Ressourcen wie OOM, CPU-Throttling und Evictions.
- Härtung der Infrastruktur: Verschafft Ihnen einen ganzheitlichen Überblick über Ihre Nodes, um Fehlkonfigurationen proaktiv aufzudecken, verhindert die Überbuchung von Nodes durch präzise Empfehlungen für Memory-Limits, validiert Node Affinities und Taints und wählt die am besten geeigneten Node-Typen für Ihre Pods.
- Priorisierung nach Auswirkung: Fokussiert Ihr Team in Echtzeit auf die kritischsten Probleme dank fortschrittlicher Auto-Priorisierung und richtet Alerts an Ihren SLAs und SLOs aus, damit die Service-Level im Zielbereich bleiben.
- Echtzeit-Alerts und Ticketing-Integrationen: Sendet sofortige Benachrichtigungen über Slack, MS Teams oder Datadog und lässt Sie jedes Problem mit nur einem Klick als Ticket in Ihren etablierten Workflow eskalieren.
- Breite Risikoabdeckung: Erkennt kontinuierlich Evictions, Out-of-Memory-Fehler, mutmaßliche Memory Leaks, CPU-Throttling, Pod-Neustarts, HPAs am Replica-Maximum sowie unterdimensionierte oder fehlende CPU- und Memory-Requests und -Limits.
Erfahren Sie mehr darüber, wie PerfectScale Ihre Cluster stabil hält und den Bedarf an manuellem Troubleshooting reduziert – auf der Plattform zur Kubernetes-Performance-Optimierung.
FAQ
Wofür wird der Befehl kubectl debug verwendet?
kubectl debug dient dem interaktiven Troubleshooting von Kubernetes-Workloads und -Nodes. Der Befehl kann einen ephemeren Container an einen laufenden Pod anhängen, eine modifizierte Kopie eines abstürzenden Pods erstellen oder einen Debug-Pod auf einem Node starten – ganz ohne Debugging-Tools, die bereits im Ziel-Image enthalten sein müssten.
Wie verwende ich kubectl debug bei einem Pod?
Führen Sie kubectl debug <pod-name> -it --image=busybox aus, um einen ephemeren Debug-Container an einen laufenden Pod anzuhängen. Ergänzen Sie --target=<container-name>, um den Prozess-Namespace mit einem bestimmten Container zu teilen, oder --copy-to=<new-pod-name>, um statt des Live-Pods eine Kopie zu debuggen (nützlich bei Pods, die beim Start abstürzen).
Wie verwende ich kubectl debug auf einem Node?
Führen Sie kubectl debug node/<node-name> -it --image=ubuntu aus, um einen Debug-Pod zu erstellen, der in den Host-Namespaces des Nodes läuft und dessen Root-Dateisystem unter /host gemountet hat. Standardmäßig gilt das Profil general, das keinen privilegierten Zugriff gewährt – nutzen Sie --profile=sysadmin, wenn Sie volle Root-Rechte benötigen.
Wie lautet die Syntax des Befehls kubectl debug?
Die allgemeine Form ist kubectl debug (POD | TYPE/NAME) [flags], am häufigsten verwendet mit --image zum Festlegen des Debug-Container-Images, -it für ein interaktives Terminal, --target zum Adressieren eines bestimmten Containers und --copy-to zum Debuggen einer Pod-Kopie.
Worin unterscheidet sich kubectl debug von kubectl exec?
kubectl exec führt einen Befehl innerhalb eines bestehenden Containers im eigenen Image des Pods aus und funktioniert daher nur, wenn dieses Image die benötigten Tools bereits enthält. kubectl debug hängt einen separaten Container (oder Pod) mit einem beliebigen Image Ihrer Wahl an – unverzichtbar bei minimalen oder Distroless-Containern, die gar keine Shell haben.
Verändert kubectl debug den ursprünglichen Pod oder seine Container?
Das Hinzufügen eines ephemeren Containers mit kubectl debug startet die bestehenden Container des Pods weder neu, noch verändert es sie – es wird lediglich ein temporärer Container daneben hinzugefügt. Mit --copy-to geht es noch einen Schritt weiter: Es wird ein separater Pod erstellt, sodass das Original völlig unangetastet bleibt.
Muss ich von kubectl debug erstellte Pods aufräumen?
Ja, bei jedem mit --copy-to erstellten Pod. Diese Pods verbleiben im Cluster, bis Sie sie mit kubectl delete pod <debug-pod-name> löschen. Ephemere Container, die direkt zu einem bestehenden Pod hinzugefügt wurden, benötigen keine separate Bereinigung – sie stoppen, wenn die Session endet, bleiben aber in der Pod-Spezifikation gelistet.