Debugger an einen Kubernetes-Pod anhängen

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

Informationen zum Anhängen an einem Kubernetes-Pod unterscheiden sich von Debugging in Kubernetes-Anwendungen unter Kubernetes-Pod anhängen.

Container einrichten

Folgen Sie der Anleitung für die verwendete Sprache, um den Container für die Fehlerbehebung 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

  • Das Modul ptvsd muss auf Ihrer Maschine und in Ihrem Container installiert sein.
  • 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

  • Das Paket dlv muss auf Ihrer Maschine und im Go-Container installiert sein.
  • 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 Debugging einer Go-Anwendung wird die Anwendung angehalten und wartet, bis ein Debugger angefügt wurde. Fügen Sie einen Debugger hinzu, damit der Dienst gestartet werden kann.

Java

  • Prüfen Sie, ob JVM auf Ihrer Maschine installiert ist.
  • Starten Sie die Java-Anwendung mit den folgenden Optionen, wobei debugPort aus der Anhangskonfiguration stammt.

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

    So starten Sie beispielsweise die Java-Anwendung im Fehlerbehebungsmodus und beobachten Port debugPort auf eine Verbindung:

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

.NET Core

  • In Ihrem Kubernetes-Container muss der .NET Core-Befehlszeilen-Debugger von Microsoft (vsdbg) installiert sein.

    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

Zum Anhängen an einen Debug-fähigen Container benötigen Sie eine Anhangskonfiguration des Typs 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. Rufen Sie über das Symbol für die Fehlerbehebungsansicht (Fehlerbehebungssymbol) in der Aktivitätsleiste den Bereich "Debug" auf. Wählen Sie dann im Drop-down-Menü Add Configuration 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.

    In einer geöffneten launch.json-Datei angezeigte 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 Add Configuration, um das Snippet Intellisense aufzurufen.
  3. Wählen Sie eines der Cloud Code: Attach to Kubernetes Pod-Snippets für die gewünschte Sprache aus.
  4. Dadurch wird eine Anhangskonfiguration hinzugefügt. Sie können jetzt Attribute in dieser Konfiguration aktualisieren, um sie an die Ihres Projekts anzupassen. Weitere Informationen zu Konfigurationsattributen finden Sie in dieser Tabelle.

    Fügen Sie eine Kubernetes-Anhang-Konfiguration hinzu

Konfigurationsattribute

Attribut Beschreibung
debugPort Im Container verwendeter Fehlerbehebungsport.
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

Wenn Sie die Konfiguration und den Container eingerichtet haben:

  1. Debug-Ansicht ö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.

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

  6. Klicken Sie zum Beenden der Debugging-Sitzung in der Debug Toolbar auf Symbol: Debug-Stopp Stop (Beenden).

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

An einen Kubernetes-Pod anhängen Kubernetes-Anwendung debuggen
Behebt Fehler in einem einzelnen Kubernetes-Pod. Debuggt alle Debug-fähigen Container in der Anwendung.
Die Anwendung muss vor dem Debugging im Kubernetes-Pod ausgeführt werden. Führt die Anwendung auf dem Kubernetes-Cluster aus und hängt den Debugger an.
Verwendet die Konfiguration (.vscode/launch.json) vom Typ „cloudcode.kubernetes“ und fordert „anhängen“ an. 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.
Es gibt keinen eigenen Befehl. **Debug on Kubernetes**-Befehl.
Der Überwachungsmodus ist nicht verfügbar. Starten Sie den Debugger manuell, nachdem Sie Änderungen vorgenommen haben. Im Überwachungsmodus kann Cloud Debugger den Debugger neu starten, nachdem Sie Änderungen gespeichert haben.

Support

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