Debugger an einen Kubernetes-Pod anhängen

Cloud Code for VS Code unterstützt das Anhängen eines Debuggers an einen Kubernetes-Pod für Node.js, Python, Go, Java und .NET. Sie benötigen nur einen Debug-Container und eine Anhangkonfiguration vom Typ cloudcode.kubernetes.

Informationen darüber, wie sich das Anhängen an einen Kubernetes-Pod vom Debugging einer Kubernetes-Anwendung unterscheidet, finden Sie unter Anhängen an einen Kubernetes-Pod im Vergleich zum Debugging einer Kubernetes-Anwendung.

Container einrichten

Folgen Sie der Anleitung für die verwendete Sprache, um den Container für das Debugging vorzubereiten:

Node.js

  • Starten Sie die Node.js-Anwendung mit --inspect=<debugPort>, wobei debugPort aus der Anhang-Konfiguration stammt. Beispiel: CMD ["node", "--inspect=9229", "index.js"]

Python

  • Achten Sie darauf, dass das ptvsd-Modul auf Ihrem Computer und im Container installiert ist.
  • Starten Sie die Python-Anwendung über ptvsd. Ordnen Sie den angegebenen Port dem Feld debugPort in der Anhang-Konfiguration zu. Beispiel:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]
    

Go

  • Achten Sie darauf, dass das dlv-Paket auf Ihrem Computer und in Ihrem Go-Container installiert ist.
  • Starten Sie Ihre Go-Anwendung über dlv debug.

    Der im Startbefehl angegebene Port sollte mit dem Attributwert debugPort in der Anhang-Konfiguration übereinstimmen. Beispiel:

    CMD ["dlv", "debug", "--headless", "--listen=:<debugPort>", "--log"]
    

    Tipp zur Fehlerbehebung: Beim Beheben von Fehlern in einer Go-Anwendung hält die Anwendung an und wartet auf das Hinzufügen eines Debuggers. Fügen Sie einen Debugger hinzu, damit der Dienst gestartet werden kann.

Java

  • Achten Sie darauf, dass JVM auf Ihrem Computer installiert ist.
  • Starten Sie die Java-Anwendung mit den folgenden Optionen, wobei debugPort aus der Anhang-Konfiguration stammt.

    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=,quiet=y
    

    So starten Sie die Java-Anwendung im Fehlerbehebungsmodus und beobachten den Port debugPort für die Verbindung:

    ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=<debugPort>,quiet=y", "-jar", "my-app-1.0.jar"]
    

.NET Core

  • Achten Sie darauf, dass auf Ihrem Kubernetes-Container vsdbg, der .NET Core-Befehlszeilen-Debugger von Microsoft, installiert ist.

    Beispiel:

    RUN apt-get update 
    && apt-get install -y --no-install-recommends unzip
    && apt-get install -y procps
    && rm -rf /var/lib/apt/lists/*
    && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg

Eine Anhang-Konfiguration einrichten

Wenn Sie einen debugfähigen Container hinzufügen möchten, benötigen Sie eine Anhang-Konfiguration vom Typ cloudcode.kubernetes.

Projekte, die nicht die Datei ".vscode/launch.json" haben

Wenn Ihr Projekt keine Datei "launch.json" im Ordner .vscode hat, können Sie über das Debug-Feld eine Datei hinzufügen.

  1. Gehen Sie zum Debug-Feld (über das Symbol Debug-Ansicht Fehlerbehebungssymbol in der linken Aktivitätsleiste) und wählen Sie Konfiguration hinzufügen im Drop-down-Menü aus.

    Konfiguration über den Bereich &quot;Debug&quot; hinzufügen

  2. Wählen Sie Cloud Code: Kubernetes als Umgebung aus.

    Cloud Code Kubernetes als Umgebung festlegen

  3. Option Attach to Kubernetes Pod auswählen.

    Kubernetes-Konfigurationsoption auswählen

  4. Wählen Sie die entsprechende Programmiersprache aus.

    Bevorzugte Programmiersprache auswählen

    Dadurch wird eine Datei launch.json für Ihr Projekt erstellt und geöffnet und eine Anhangskonfiguration erstellt. Sie können jetzt die Konfigurationsattribute in dieser Datei aktualisieren, um sie an die Ihres Projekts anzupassen. Weitere Informationen zu Konfigurationsattributen finden Sie unter Konfigurationsattribute.

Projekte mit der Datei ".vscode/launch.json"

So fügen Sie einer vorhandenen .vscode/launch.json-Datei eine neue Anhang-Konfiguration hinzu:

  1. Öffnen Sie die Datei launch.json.
  2. Klicken Sie auf Snippet hinzufügen, um das Snippet Intellisense aufzurufen.
  3. Wählen Sie das Snippet Cloud Code: Attach to Kubernetes Pod (Cloud Code: An Kubernetes-Pod anhängen) für die Sprache aus, die Sie verwenden.
  4. Dadurch wird eine Anhang-Konfiguration hinzugefügt. Sie können jetzt die Attribute in dieser Konfiguration aktualisieren, um sie an die Ihres Projekts anzupassen. Weitere Informationen zu Konfigurationsattributen finden Sie in dieser Tabelle.

Konfigurationsattribute

Attribut Beschreibung
debugPort Debug-Port für den Container
podSelector Satz von Schlüssel/Wert-Paaren, die zum Auswählen des Pods für die Fehlerbehebung verwendet werden (weitere Informationen zum Selektor). Beispiel für einen typischen podSelector:

"podSelector": { "app": <deployment-name> }

localRoot Pfad zum lokalen Verzeichnis, in dem das Programm enthalten ist, für das Sie die Fehlerbehebung durchführen. Die Standardeinstellung ist ${workspaceFolder}.
remoteRoot Absoluter Pfad zum Remote-Verzeichnis (im Kubernetes-Container) mit dem Programm, in dem Sie die Fehlerbehebung ausführen.

Debugger an einen Kubernetes-Pod anhängen

Nachdem Sie die Konfiguration und den Container eingerichtet haben:

  1. Fehlerbehebungsansicht öffnen Fehlerbehebungssymbol.
  2. Verwenden Sie F5, um die Konfiguration auszuwählen und zu starten.
    • localhost:${debugPort} wird während der Fehlerbehebung an den Container debugPort weitergeleitet.
  3. Die Fehlerbehebungssitzung wurde erfolgreich eingerichtet.
  4. Sie können jetzt alle Aufgaben ausführen, die Sie normalerweise beim Debuggen von lokalem Code ausführen, z. B. das Festlegen von Haltepunkten und das Durchlaufen von Code.
  5. 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.

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

Anhängen an einen Kubernetes-Pod im Vergleich zum Debugging einer Kubernetes-Anwendung

An einen Kubernetes-Pod anhängen Kubernetes-Anwendung debuggen
Fehler in einem einzelnen Kubernetes-Pod werden behoben. Fehler in allen debug-fähigen Containern in der Anwendung werden behoben.
Die Anwendung muss im Kubernetes-Pod ausgeführt werden, bevor die Fehlerbehebung erfolgt. Führt die Anwendung im Kubernetes-Cluster aus und hängt den Debugger an.
Verwendet die Konfiguration (.vscode/launch.json) des Typs 'cloudcode.kubernetes' und die Anforderung 'attach'. Verwendet die Konfiguration (.vscode/launch.json) vom Typ „cloudcode.kubernetes“ und fordert „starten“ an.
Weitere Informationen finden Sie unter Konfigurationen starten und anhängen.
Beispielkonfiguration:

{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
Beispielkonfiguration:

{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
Diese Konfiguration kann nicht zum Ausführen der Anwendung verwendet werden. Diese Konfiguration kann zum Ausführen oder Debuggen der Anwendung verwendet werden.
Diese Konfiguration ist sprachspezifisch. Diese Konfiguration ist sprachunabhängig.
Kein eigener Befehl. Debug on Kubernetes-Befehl.
Der Watch-Modus ist nicht verfügbar, also starten Sie den Debugger manuell, nachdem Sie Änderungen vorgenommen haben. Im Überwachungsmodus kann Cloud Code den Debugger neu starten, nachdem Sie die Änderungen gespeichert haben.

Support

Wenn Sie Feedback senden möchten, können Sie Probleme auf GitHub melden oder eine Frage in Stack Overflow stellen.