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

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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. Minikuba oder Docker Desktop), Google Kubernetes Engine (GKE) oder einem anderen Cloud-Anbieter beheben.

Mit der Debugging-Unterstützung von Cloud Code müssen Sie keine manuelle Einrichtung wie die Portweiterleitung einrichten oder sprachspezifische Debug-Argumente einschleusen. Zur Fehlerbehebung ist eine Cloud Code-fähige Kubernetes-Anwendung erforderlich, 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 dann auf Fehler in Kubernetes beheben.
  2. Wenn Ihre Anwendung nicht die erforderliche Skaffold- oder cloudcode.kubernetes-Startkonfiguration hat, hilft Ihnen Cloud Code 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, wählen Sie bei entsprechender Aufforderung eine Image-Registry aus, an 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 die Artifact Registry API aktiviert ist und Sie mindestens ein Artifact Registry-Repository haben, können Sie ein vorhandenes Artifact Registry-Repository auswählen und auswählen.

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

    Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    Achten Sie darauf, dass Sie korrekt authentifiziert werden, 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 das Debuggen des Containers zu überspringen.

    Remote-Root-Aufforderung

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

    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:

    • Deployment-Logs öffnen:Öffnen Sie mit 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 Uhrmodus in Ihrer Startkonfiguration deaktiviert haben und Änderungen an Ihrer Anwendung vornehmen und die Anwendung neu erstellen und bereitstellen möchten, pausieren Sie im Bereich „Entwicklungssitzungen“ die Ausführungsaktion und klicken Sie dann auf Symbol: Neu erstellen und neu bereitstellenAnwendung 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 unterstützt von Skaffold 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 Ihre Anwendung mehrere debugfähige Container (Container, deren Sprache von Cloud Code Debug unterstützt wird) in skaffold.yaml konfiguriert hat, wird jedem Debug-Container ein Debugger hinzugefügt.
  • Definitionen der Quellzuordnung über mehrere Sitzungen hinweg beibehalten. Sie können diese Definitionen anpassen, indem Sie die Datei .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.