Esegui il debug delle applicazioni Kubernetes con Cloud Code for VS Code

Cloud Code ti consente di eseguire il debug di un'applicazione di cui è stato eseguito il deployment in un cluster Google Kubernetes Engine (GKE) sfruttando skaffold debug.

Puoi eseguire il debug della tua applicazione su un cluster locale (come minikube o Docker Desktop), a GKE o a qualsiasi altro cloud provider.

Con il supporto del debug di Cloud Code, non devi completare configurazione manuale, come l'impostazione del port forwarding o l'inserimento di valori specifici per lingua argomenti di debug. Il debug richiede una versione di Cloud Code in un'applicazione GKE che include un skaffold.yaml e una configurazione di avvio cloudcode.kubernetes.

Debug di un'applicazione GKE

Per iniziare a eseguire il debug dell'applicazione GKE, segui questi passaggi:

  1. Nella barra di stato di Cloud Code, fai clic sul nome del progetto attivo.

    Nome progetto attivo nella barra di stato

  2. Nel menu di scelta rapida visualizzato, seleziona Debug su Kubernetes.

  3. Se richiesto, autentica le credenziali per eseguire ed eseguire il debug di un dell'applicazione in locale.

  4. Se la tua applicazione non dispone della configurazione Skaffold necessaria o Configurazione di avvio di cloudcode.kubernetes, Cloud Code ti aiuta a configurarli.

  5. Conferma se utilizzare il modello attuale Contesto Kubernetes eseguire l'app (o passare all'app che preferisci).

  6. Se hai scelto un cluster remoto come contesto, scegli un'immagine quando ti viene richiesto. registro a cui eseguire il push delle immagini. Se utilizzi Container Registry, puoi vai a un registro esistente o specifica il nome di un registro da creare. Se il tuo progetto ha API Artifact Registry abilitata e almeno in un repository Artifact Registry, può sfogliare e selezionare un repository Artifact Registry esistente.

    Gli esempi riportati di seguito mostrano come specificare dove vengono memorizzate le immagini dei contenitori per alcuni registry comuni:

    Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    Assicurati di avere correttamente autenticato se utilizzi un repository Docker Hub privato.
    Repository di container AWS (ECR) {aws_account_id}.dkr.ecr.{region}.amazonaws.com/{my-app}
    Azure Container Registry (ACR) {my_acr_name}.azurecr.io/{my-app}

    Per generare il nome finale del repository di immagini, Cloud Code concatena questo registro di immagini con il nome dell'immagine specificato di Kubernetes. Questa scelta è memorizzata in cloudcode.kubernetes configurazione dell'avvio (disponibile in .vscode/launch.json).

    Per ulteriori informazioni, consulta guida alla gestione del registro di immagini.

    Cloud Code crea i tuoi container, ne esegue il push al registro, applica le configurazioni Kubernetes al cluster e attende per il lancio.

    Dopo l'implementazione, Cloud Code inoltra automaticamente tutte le porte del contenitore dichiarate alla tua macchina e mostra gli URL nella finestra di output in modo da poter sfogliare l'applicazione in produzione.

  7. Per ogni contenitore di cui è possibile eseguire il debug nell'applicazione, conferma o inserisci il valore nel container remoto dove si trova il programma di cui eseguire il debug individuarlo.

    In alternativa, puoi premere ESC per saltare il debug del contenitore.

    Prompt radice remota

    Cloud Code collega una sessione di debug per ogni contenuto dell'applicazione che può essere sottoposto a debug.

    Ora puoi eseguire le stesse operazioni che esegui normalmente per il debug del codice locale, come l'impostazione di punti di interruzione e l'esecuzione di passaggi per il codice su un ambiente Kubernetes in un cluster Kubernetes.

    Per impostazione predefinita, quando salvi una modifica dell'applicazione Cloud Code esegue nuovamente il deployment dell'applicazione e configura un nuovo debug durante la sessione. Puoi attivare/disattivare questa funzionalità con il flag watch nella barra degli indirizzi avvia la configurazione.

  8. Per esaminare le variabili e le informazioni sullo stack, utilizza la classe Barra laterale di debug. Per interagire con la sessione di debug, utilizza la funzione Console di debug nel debugger del riquadro inferiore.

  9. Al termine della sessione, puoi utilizzare il seguente menu contestuale :

    • Apri i log di deployment: apri i log dell'applicazione per un'istanza il deployment con Esplora log di Cloud Code.
    • Apri URL servizio: apri l'URL del servizio di applicazione di un servizio specifico in un browser web
  10. Se hai disattivato la modalità di visualizzazione nella configurazione di lancio e vuoi apportare modifiche all'applicazione, ricrearla e reimplementarla, nel riquadro Sessioni di sviluppo, metti in pausa l'azione di esecuzione e poi fai clic su Icona Ricrea ed esegui nuovamente il deployment Ricompila e reimplementa l'applicazione.

  11. Per terminare la sessione di debug, fai clic su Icona di interruzione del debug Interrompi nella barra degli strumenti di debug.

    Al termine della sessione di debug, tutte le risorse Kubernetes di cui vengono eliminate dal cluster.

Dettagli configurazione

Cloud Code, basato su Skaffold, automaticamente gestisce i seguenti dettagli di configurazione per tutte le lingue supportate:

  • Esegui il port forwarding della porta di debug in modo che il debugger possa essere collegato.
  • Collegamento di un debugger a uno o più container di cui è possibile eseguire il debug nell'applicazione. Se la tua applicazione ha più container di cui è possibile eseguire il debug (container il cui lingua è supportata dal debug di Cloud Code) configurata in skaffold.yaml, viene collegato un debugger a ogni contenitore di cui è possibile eseguire il debug.
  • Definizioni di mappatura delle fonti persistenti tra le sessioni; puoi personalizzare definizioni modificando direttamente il file .vscode/launch.json.

Cloud Code gestisce anche i seguenti dettagli di configurazione specifici per la lingua:

Node.js

Riscrittura del punto di ingresso da richiamare:

node --inspect=localhost:9229

Python

Installazione del modulo ptvsd utilizzando un container di inizializzazione e riscrivendo il punto di ingresso per richiamare:

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

Vai

L'installazione del Debugger dlv utilizzando un container di inizializzazione e riscrivendo il punto di ingresso in modo la sessione di debug viene eseguita solo con un server di debug (in modalità headless), continua sottoposto a debug all'avvio, accetta più connessioni client e rimane in ascolto localhost:56268:

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

Java

Aggiunta di un ambiente JAVA_TOOLS_OPTIONS con la configurazione appropriata del protocollo JDWP (Java Debug Wire Protocol) in modo che l'agente di debug JDWP ascolti una connessione socket sulla porta 5005 e consenta alla VM di iniziare l'esecuzione prima del collegamento del debugger:

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

Per maggiori dettagli sul debug basato su Skaffold, consulta Documentazione di skaffold debug.

Configurare il container

Per preparare il contenitore per il debug, segui le istruzioni relative alla lingua che stai utilizzando:

Node.js

  • Avvia l'applicazione Node.js con --inspect=<debugPort> dove debugPort proviene dal Collega configurazione. Ad esempio: CMD ["node", "--inspect=9229", "index.js"]

Python

  • Assicurati di avere Modulo ptvsd installato sulla tua macchina e nel tuo container.
  • Avvia l'applicazione Python tramite ptvsd. Crea una corrispondenza con la porta specificata il campo debugPort nel Collega configurazione. Ad esempio:
    CMD ["python", "-m", "ptvsd", "--port", "", "app.py"]

Vai

  • Assicurati di avere installato il pacchetto dlv sulla tua macchina e nel tuo contenitore Go.
  • Avvia l'applicazione Go tramite dlv debug

    La porta specificata nel comando di avvio deve essere la stessa della Valore dell'attributo debugPort in Collega configurazione. Ad esempio:

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

    Suggerimento per la risoluzione dei problemi:quando esegui il debug di un'applicazione Go, l'applicazione si interromperà e attenderà il collegamento di un debugger. Collega un debugger per per avviare il servizio.

Java

  • Assicurati che la JVM sia installata sulla macchina.
  • Avvia l'applicazione Java con le seguenti opzioni, dove debugPort proviene dal Collega configurazione.

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

    Ad esempio, per avviare l'applicazione Java in modalità di debug e ascolta sulla porta debugPort la connessione:

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

.NET Core

  • Assicurati di avere vsdbg, ovvero .NET Core il debugger a riga di comando di Microsoft, installato container Kubernetes.

    Ad esempio:

    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 /dbg/netcore/vsdbg

Imposta la configurazione di collegamento

Per eseguire il collegamento a un contenitore di cui è possibile eseguire il debug, devi disporre di una configurazione di collegamento di tipo cloudcode.kubernetes.

Aggiungi un file .vscode/launch.json

Se il tuo progetto non include un file launch.json nel relativo .vscode puoi aggiungerne una utilizzando il riquadro Debug.

  1. Per accedere al riquadro Debug, fai clic su Icona di debug Esegui ed esegui il debug nella barra delle attività.

  2. Seleziona Aggiungi configurazione dal menu a discesa.

  3. Seleziona Cloud Code: Kubernetes come ambiente.

    Impostazione di Cloud Code: Kubernetes come ambiente

  4. Seleziona l'opzione Collega al pod Kubernetes.

    Seleziona l&#39;opzione di configurazione Kubernetes

  5. Seleziona il linguaggio di programmazione che stai utilizzando.

    Verrà creato e aperto un file launch.json per il progetto e verrà creato collegare automaticamente la configurazione.

  6. Aggiorna gli attributi di configurazione nel file launch.json in modo che corrispondano a quelli di del progetto. Per ulteriori informazioni sugli attributi di configurazione, consulta Attributi di configurazione.

Aggiungi una configurazione di collegamento al file .vscode/launch.json

Per aggiungere una nuova configurazione di collegamento a un file .vscode/launch.json esistente:

  1. Apri il file launch.json.
  2. Per richiamare Intellisense dello snippet, fai clic su Aggiungi configurazione.
  3. Per aggiungere una configurazione di collegamento, seleziona il Cloud Code: collega al pod Kubernetes per il linguaggio che stai utilizzando che utilizzano.
  4. Aggiorna gli attributi nella configurazione in modo che corrispondano a quelli dei tuoi progetto. Per ulteriori informazioni sugli attributi di configurazione, consulta Attributi di configurazione.

Attributi di configurazione

Attributo Descrizione
debugPort Porta di debug utilizzata nel contenitore.
podSelector Insieme di coppie chiave-valore utilizzate per selezionare il pod di debug. Per ulteriori informazioni informazioni, consulta guida sui selettori). L'esempio seguente mostra un tipico podSelector:

"podSelector": { "app": <deployment-name> }
localRoot Percorso della directory locale contenente il programma di cui eseguire il debug. Il valore predefinito è ${workspaceCartella}.
remoteRoot Percorso assoluto della directory remota contenente il programma che stai di cui è stato eseguito il debug (nel container Kubernetes).

collega un debugger al pod Kubernetes

Cloud Code per VS Code supporta l'attacco di un debugger a un pod Kubernetes per Node.js, Python, Go, Java e .NET. Tutto ciò che ti serve è un container di debug e una configurazione di attacco di tipocloudcode.kubernetes.

Per informazioni sulle differenze tra il collegamento a un pod Kubernetes il debug di un'applicazione Kubernetes, Differenze tra il collegamento di un debugger a un pod e il debug di un'applicazione Kubernetes.

Per collegare un debugger al pod Kubernetes, esegui queste attività:

  1. Per accedere al riquadro Debug, fai clic su Icona di debug Esegui ed esegui il debug nella barra delle attività.
  2. Seleziona e avvia la configurazione premendo F5.

    • localhost:${debugPort} viene inoltrata a debugPort sul contenutore durante il debug.

    La sessione di debug è stata configurata correttamente. Puoi eseguire le attività che solitamente esegui durante il debug del codice locale, ad esempio l'impostazione di punti di interruzione passo passo nel codice.

  3. Per esaminare le variabili e le informazioni sullo stack, utilizza la classe Barra laterale di debug. Per interagire con la sessione di debug, utilizza la funzione Console di debug nel debugger del riquadro inferiore.

  4. Per terminare la sessione di debug, fai clic su Icona di interruzione del debug Interrompi nella barra degli strumenti di debug.

Differenze tra il collegamento di un debugger a un pod e il debug di un'applicazione Kubernetes

Collegamento a un pod Kubernetes Esegui il debug di un'applicazione Kubernetes
Esegue il debug di un singolo pod Kubernetes. Esegue il debug di tutti i container di cui è possibile eseguire il debug nell'applicazione.
L'applicazione deve essere in esecuzione nel pod Kubernetes prima del debug. Esegue l'applicazione sul cluster Kubernetes e collega il debugger.
Utilizza la configurazione (.vscode/launch.json) di tipo cloudcode.kubernetes e richiede attach. Utilizza la configurazione (.vscode/launch.json) di tipo cloudcode.kubernetes e richiede launch.
Per ulteriori informazioni, consulta la sezione Configurazioni di lancio e di attacco.
Configurazione di esempio:
{
  "name": "Attach to Kubernetes Pod (NodeJS)",
  "type": "cloudcode.kubernetes",
  "request": "attach",
  "language": "Node",
  "debugPort": 9229,
  "podSelector": {
     "app": "hello-world"
  },
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app"
}
Configurazione di esempio:
{
  "name": "Run/Debug on Kubernetes",
  "type": "cloudcode.kubernetes",
  "request": "launch",
  "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
  "watch": true,
  "cleanUp": true,
  "portForward": true
}
Questa configurazione non può essere utilizzata per eseguire l'applicazione. Questa configurazione può essere utilizzata per eseguire l'applicazione o eseguirne il debug.
Questa configurazione è specifica per la lingua. Questa configurazione non è specifica per la lingua.
Nessun comando dedicato. Comando Debug su Kubernetes.
La modalità di visualizzazione non è disponibile. Dopo aver apportato le modifiche, riavvia manualmente il debugger. La modalità di visualizzazione consente a Cloud Code di riavviare il debugger dopo aver salvato le modifiche.

Passaggi successivi

Richiedi assistenza

Per inviare feedback, segnala problemi su GitHub o fai una domanda Stack Overflow.