Eseguire il debug delle applicazioni Kubernetes in Cloud Code per Cloud Shell

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 dell'applicazione su un cluster locale (come minikube o Docker Desktop), GKE o qualsiasi altro provider cloud.

Grazie al supporto del debug di Cloud Code, non devi completare la configurazione manuale, ad esempio impostare l'inoltro delle porte o inserire argomenti di debug specifici per la lingua. Il debug richiede un'applicazione GKE pronta per Cloud Code che includa un file di configurazione skaffold.yaml e una configurazione di avvio cloudcode.kubernetes.

Eseguire il 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 del progetto attivo nella barra di stato

  2. Nel menu Selezione rapida visualizzato, seleziona Debug su Kubernetes.

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

  4. Conferma se utilizzare il contesto Kubernetes attuale per eseguire l'app (o passare a uno preferito).

  5. Se hai scelto un cluster remoto come contesto, quando ti viene richiesto, scegli un registro di immagini a cui eseguire il push delle immagini.

    Se il tuo progetto ha l'API Artifact Registry abilitata e almeno un repository Artifact Registry, puoi sfogliare e selezionare un repository Artifact Registry esistente.

    Gli esempi seguenti mostrano come specificare dove vengono archiviate le immagini container per alcuni registri comuni:

    Artifact Registry REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME
    Docker Hub docker.io/ACCOUNT
    Assicurati di essere autenticato correttamente se utilizzi un repository Docker Hub privato.

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

    Per maggiori informazioni, consulta la guida alla gestione del registro delle immagini.

    Cloud Code crea i container, li invia al registro, applica le configurazioni Kubernetes al cluster e attende il rollout.

    Dopo l'implementazione, Cloud Code esegue automaticamente il port forwarding di tutte le porte del container dichiarate sulla tua macchina e mostra gli URL nella finestra di output in modo che tu possa sfogliare l'applicazione live.

  6. Per ogni container di cui è possibile eseguire il debug nell'applicazione, conferma o inserisci la directory nel container remoto in cui si trova il programma di cui vuoi eseguire il debug.

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

    Prompt di root remoto

    Cloud Code collega una sessione di debug per ogni container di cui è possibile eseguire il debug nell'applicazione.

    Ora puoi eseguire le stesse attività che svolgi normalmente durante il debug del codice locale, ad esempio impostare punti di interruzione ed eseguire il codice passo passo, su un cluster Kubernetes live.

    Per impostazione predefinita, quando una modifica all'applicazione viene salvata automaticamente, Cloud Code esegue nuovamente il deployment dell'applicazione e configura una nuova sessione di debug. Puoi attivare/disattivare questa funzionalità con il flag watch nella configurazione di avvio del progetto.

  7. Per esaminare le variabili e le informazioni sullo stack, utilizza la barra laterale di debug. Per interagire con la sessione di debug, utilizza la console di debug nel riquadro inferiore del debugger.

  8. Al termine della sessione, puoi utilizzare i seguenti comandi del menu contestuale:

    • Apri i log di deployment:apri i log dell'applicazione di un deployment specifico con Esplora log di Cloud Code.
    • Apri URL servizio:apre l'URL del servizio dell'applicazione di un servizio specifico in un browser web
  9. Se hai disattivato la modalità di osservazione nella configurazione di avvio e vuoi apportare modifiche all'applicazione e ricompilarla e rieseguire il deployment dell'applicazione, 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 riesegui il deployment dell'applicazione.

  10. 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 è stato eseguito il deployment vengono eliminate dal cluster.

Dettagli configurazione

Cloud Code, basato su Skaffold, gestisce automaticamente i seguenti dettagli di configurazione per tutti i linguaggi supportati:

  • 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 linguaggio è supportato dal debug di Cloud Code) configurati in skaffold.yaml, viene collegato un debugger a ogni container di cui è possibile eseguire il debug.
  • Mantenimento delle definizioni di mappatura delle origini tra le sessioni. Puoi personalizzare queste definizioni modificando direttamente il file .vscode/launch.json.

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

Node.js

Riscrivere l'entry point per richiamare:

node --inspect=localhost:9229

Python

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

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

Go

Installazione del debugger dlv utilizzando un contenitore di inizializzazione e riscrivendo il punto di ingresso in modo che la sessione di debug avviata venga eseguita solo con un server di debug (in modalità headless), continui il processo di cui è stato eseguito il debug all'avvio, accetti più connessioni client e ascolti su localhost:56268:

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

Java

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

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