Fehler in einer Kubernetes-Anwendung in Cloud Code für Cloud Shell beheben

Mit Cloud Code können Sie Fehler in einer Anwendung, die in einem Kubernetes-Cluster bereitgestellt wurde, mithilfe von skaffold debug ganz einfach beheben. Sie können Fehler in Ihrer Anwendung auf einem lokalen Cluster (z. B. Minikube oder Docker Desktop), Google Kubernetes Engine (GKE) oder einem anderen Cloud-Anbieter beheben.

Sie müssen keine manuelle Einrichtung wie das Einrichten der Portweiterleitung oder das Einfügen von sprachspezifischen Debug-Argumenten vornehmen. Sie benötigen einfach eine Cloud Code-fähige Kubernetes-Anwendung, die eine skaffold.yaml-Konfigurationsdatei und eine cloudcode.kubernetes-Startkonfiguration enthält.

Fehler in Anwendung beheben

  1. Klicken Sie in der Statusleiste auf Cloud Code-Statusleiste Cloud Code und wählen Sie dann Debug on Kubernetes aus.
  2. Wenn Ihre Anwendung keine erforderliche Skaffold-Konfiguration oder cloudcode.kubernetes-Startkonfiguration hat, unterstützt Cloud Code Sie bei der Einrichtung.
  3. Geben Sie an, ob Sie den aktuellen Kubernetes-Kontext zum Ausführen der Anwendung verwenden oder ob Sie zu einem bevorzugten Kontext wechseln möchten.
  4. Wenn Sie einen Remote-Cluster als Kontext ausgewählt haben, wenn Sie dazu aufgefordert werden, wählen Sie eine Image-Registry aus, in die die Images übertragen werden sollen. Wenn Sie Container Registry verwenden, können Sie zu einer vorhandenen Registry wechseln oder den Namen der zu erstellenden Registry angeben. Wenn für Ihr Projekt Artifact Registry API aktiviert und mindestens ein Artifact Registry-Repository vorhanden ist, können Sie dort ein Artifact Registry-Repository auswählen.

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

    Container Registry gcr.io/{project_id}
    Docker Hub reseller.io/{account}
    Achten Sie darauf, dass Sie richtig authentifiziert sind, wenn Sie ein privates Docker Hub-Repository verwenden.

    Um den endgültigen Namen des Image-Repositorys zu generieren, verkettet Cloud Code diese Image-Registry mit dem in den Kubernetes-Manifesten angegebenen Image-Namen. Diese Auswahl wird in Ihrer cloudcode.kubernetes-Startkonfiguration gespeichert (in .vscode/launch.json).

    Weitere Informationen finden Sie im Leitfaden zur Image-Registry.

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

    Nach Abschluss der Einführung leitet Cloud Code alle deklarierten Containerports automatisch an Ihren Computer weiter und zeigt die URLs im Ausgabefenster an. So können Sie Ihre Live-Anwendung durchsuchen.

  5. Für jeden debugfähigen Container in Ihrer Anwendung werden Sie aufgefordert, das Verzeichnis im Remote-Container, in dem sich das zu debuggende Programm befindet, zu bestätigen oder einzugeben.

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

    Remote-Root-Aufforderung

    Cloud Code fügt für jeden debugfähigen Container in der Anwendung eine Debug-Sitzung hinzu.

    Sie können jetzt die gleichen Aufgaben ausführen, die Sie normalerweise beim Debuggen von lokalem Code ausführen, z. B. das Festlegen von Haltepunkten und das Durchlaufen von Code in einem Live-Kubernetes-Cluster.

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

  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.

  7. Nach Abschluss Ihrer Sitzung können Sie die folgenden Kontextmenübefehle verwenden:

    • Bereitstellungslogs öffnen: Öffnen Sie mit dem Cloud Code-Log-Explorer die Anwendungslogs einer bestimmten Bereitstellung
    • Dienst-URL öffnen: Öffnen Sie die Anwendungsdienst-URL eines bestimmten Dienstes in einem Webbrowser.
  8. Wenn Sie den Watch-Modus in Ihrer Startkonfiguration deaktiviert haben und Änderungen an Ihrer Anwendung vornehmen und die Anwendung neu erstellen und neu bereitstellen möchten, pausieren Sie die Ausführungsaktion und klicken Sie auf Symbol: Neu erstellen und neu bereitstellen Anwendung neu erstellen und noch einmal bereitstellen.

  9. Klicken Sie zum Beenden der Debugging-Sitzung in der Debug-Symbolleiste auf Symbol für Debug-Stopp Stop.

    Nach Beendigung der Debugging-Sitzung werden alle bereitgestellten Kubernetes-Ressourcen aus dem Cluster gelöscht.

Konfigurationsdetails

Cloud Code, bereitgestellt von Skaffold, verarbeitet die folgenden Konfigurationsdetails automatisch 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 debugfähige Container (Container, deren Sprache von Cloud Code Debug unterstützt wird) in skaffold.yaml konfiguriert sind, wird an jeden dieser debugfähigen Container ein Debugger 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 Fehlerbehebungssitzung nur mit einem Fehlerbehebungsserver (im monitorlosen Modus) den Debug-Prozess beim Start fortsetzt, mehrere Client-Verbindungen akzeptiert und unter localhost:56268 empfängt:

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

Java

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

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

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

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 Anhängen an einen Kubernetes-Pod im Vergleich zum Debugging einer Kubernetes-Anwendung.