Kubernetes-Anwendung debuggen

Mit Cloud Code können Sie ganz einfach Fehler in einer in einem Kubernetes-Cluster bereitgestellten Anwendung beheben. Dazu verwenden Sie skaffold debug. Sie können Fehler in Ihrer Anwendung auf einem lokalen Cluster (z. B. Minikube oder Docker Desktop), Google Kubernetes Engine (GKE) oder einem anderen Cloudanbieter beheben.

Sie müssen keine manuelle Einrichtung vornehmen, z. B. die Portweiterleitung einrichten oder sprachspezifische Debug-Argumente einfügen. Sie benötigen lediglich eine Cloud Code-fähige Kubernetes-Anwendung, die die Konfigurationsdatei skaffold.yaml und die Startkonfiguration cloudcode.kubernetes enthält.

Fehler in Anwendung beheben

  1. Wählen Sie in der Statusleiste von Cloud Code den Befehl Debug on Kubernetes aus.
  2. Wenn Ihre Anwendung nicht die erforderliche Skaffold-Konfiguration oder cloudcode.kubernetes-Startkonfiguration hat, können Sie diese mit Cloud Code einrichten.
  3. Prüfen Sie, ob Sie den aktuellen Kubernetes-Kontext zum Ausführen der Anwendung verwenden oder zu einem bevorzugten Kontext wechseln möchten.
  4. Wenn Sie einen Remote-Cluster als Kontext ausgewählt haben, werden Sie aufgefordert, eine Image-Registry bereitzustellen, auf die die Images übertragen werden.

    In den folgenden Beispielen wird gezeigt, wie Sie angeben, wo Container-Images für einige gängige Registries gespeichert werden:

    Docker Hub docker.io/{account}
    Wenn Sie ein privates Docker Hub-Repository verwenden, achten Sie darauf, dass Sie korrekt authentifiziert sind.
    Google Container Repository (GCR) gcr.io/{project_id}

    Zum Generieren des endgültigen Image-Repository-Namens verkettet Cloud Code diese Image-Registry mit dem in den Kubernetes-Manifesten angegebenen Image-Namen. Diese Auswahl wird in der Startkonfiguration von cloudcode.kubernetes (in .vscode/launch.json) gespeichert.

    Weitere Informationen finden Sie in der Anleitung zur Handhabung von Image-Registrys.

    Cloud Code erstellt Ihre Container, überträgt sie in die Registry, wendet Kubernetes-Konfigurationen auf den Cluster an und wartet auf die Einführung.

    Nach der Einführung leitet Cloud Code alle deklarierten Containerports automatisch an Ihren Computer weiter und zeigt die URLs im Ausgabefenster an, damit Sie in Ihrer Live-Anwendung suchen können.

    Portweiterleitung und Anzeige von URLs im Ausgabefenster

  5. Bestätigen oder bestätigen Sie für jeden debug-fähigen Container in Ihrer Anwendung das Verzeichnis im Remote-Container, in dem sich das Programm befindet, das Sie debuggen möchten.

    Alternativ können Sie "ESC" drücken, um die Fehlerbehebung für den Container zu überspringen.

    Remote-Root-Aufforderung

    Cloud Code hängt eine Debug-Sitzung für jeden debug-fähigen Container in der Anwendung an.

    Sie können nun die gleichen Aufgaben wie bei der Fehlerbehebung für lokalen Code ausführen, z. B. das Festlegen von Haltepunkten und das Aufrufen von Code für einen Live-Kubernetes-Cluster.

    Wenn eine Änderung an der Anwendung automatisch gespeichert wird, stellt Cloud Code Ihre Anwendung standardmäßig noch einmal bereit und richtet eine neue Debugging-Sitzung ein. Sie können dieses Feature in der Startkonfiguration Ihres Projekts mit dem Flag watch umschalten.

  6. In der Debugging-Seitenleiste können Sie Variablen und Stack-Informationen prüfen. Verwenden Sie die Debug Console im Debugger im unteren Bereich, um mit der Debugging-Sitzung zu interagieren.

    Eine Anwendung, die am Haltepunkt angehalten wurde und deren Variablen und Aufrufstapel mit Werten im entsprechenden Bereich gefüllt wurden

  7. Nach Abschluss der Sitzung stehen Ihnen zusätzliche Kontextmenüoptionen zur Überwachung Ihrer Anwendung und ihrer Ressourcen mithilfe der Cloud Code-Statusleiste zur Verfügung, darunter:

    • Bereitstellungslogs öffnen: Mit der Cloud Code-Loganzeige können Sie die Anwendungslogs einer bestimmten Bereitstellung öffnen
    • Dienst-URL öffnen: Mit dieser Option können Sie die Dienst-URL eines bestimmten Dienstes in einem Webbrowser öffnen.
    • Wiedergabemodus aktivieren/deaktivieren:Wechseln Sie den Wiedergabemodus für die aktuelle Sitzung. Standardmäßig überwacht Cloud Code das Dateisystem kontinuierlich auf Änderungen an Ihren Dateien, z. B. Kubernetes-Konfiguration oder -Code, erstellt die Container neu und stellt die Anwendung im Cluster neu bereit, sodass { 101}Änderungen werden nahezu in Echtzeit wiedergegeben.
  8. Klicken Sie zum Beenden der Debugging-Sitzung in der Debug-Symbolleiste auf Symbol DebugDebug-Stopp“ Beenden.

    Nachdem Sie die Debugging-Sitzung beendet haben, werden alle bereitgestellten Kubernetes-Ressourcen aus dem Cluster gelöscht.

Konfigurationsdetails

Cloud Code von Skaffold verarbeitet automatisch die folgenden Konfigurationsdetails für alle unterstützten Sprachen:

  • Portweiterleitung des Debug-Ports, damit der Debugger hinzugefügt werden kann.
  • Anhängen eines Debuggers an einen oder mehrere Debug-fähige Container in Ihrer Anwendung. Wenn für Ihre Anwendung mehrere Debug-fähige Container (Container, deren Sprache von Cloud Code Debug unterstützt wird) in skaffold.yaml konfiguriert sind, wird ein Debugger an jeden dieser Container angehängt.
  • Quellzuordnungsdefinitionen über Sitzungen hinweg: Sie können diese Definitionen anpassen, indem Sie Ihren .vscode/launch.json direkt bearbeiten.

Cloud Code verarbeitet außerdem die folgenden sprachspezifischen Konfigurationsdetails:

Node.js

Neuschreiben des Einstiegspunkts, der aufgerufen werden soll:

node --inspect=localhost:9229

Python

Installieren Sie das ptvsd-Modul mithilfe eines Init-Containers und schreiben Sie den Einstiegspunkt für den Aufruf neu:

python -m ptvsd --host localhost --port 5678

Go

Installieren des dlv-Debuggers mit einem Init-Container und Umschreiben des Einstiegspunkts, sodass die gestartete Debug-Sitzung nur mit einem Debug-Server (im monitorlosen Modus) ausgeführt wird Der Fehlerbehebungsprozess beim Start, akzeptiert mehrere Clientverbindungen und wartet auf localhost:56268:

dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --

Java

Hinzufügen einer Umgebung JAVA_TOOLS_OPTIONS mit der entsprechenden Konfiguration des Java Debug Wire Protocol (JDWP), sodass der JDWP-Debugging-Agent eine Socket-Verbindung auf Port 5005 überwacht und die Ausführung der VM vor Debugger ist angehängt:

jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y

Weitere Informationen zum Skaffold-Debugging finden Sie in der Dokumentation zu skaffold debug.

Debugger an einen Kubernetes-Pod anhängen

Cloud Code for VS Code unterstützt auch das Anhängen eines Debuggers an einen Kubernetes-Pod. Einen Vergleich finden Sie unter Kubernetes-Pod im Vergleich zum Debugging einer Kubernetes-Anwendung.