Cloud Code ti consente di eseguire il debug di un'applicazione di cui è stato eseguito il deployment
per il cluster Google Kubernetes Engine (GKE)
skaffold debug
Puoi eseguire il debug dell'applicazione su un cluster locale (come minikube o Docker Desktop), GKE o qualsiasi altro provider cloud.
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 un'applicazione GKE Cloud Code-ready che includa un file di configurazione skaffold.yaml
e una configurazione di lancio cloudcode.kubernetes
.
Debug di un'applicazione GKE
Per iniziare il debug dell'applicazione GKE, segui questi passaggi passaggi:
Nella barra di stato di Cloud Code, fai clic sul nome del progetto attivo.
Nel menu Scelta rapida visualizzato, seleziona Esegui il debug su Kubernetes.
Se la tua applicazione non dispone della configurazione Skaffold necessaria o Configurazione di avvio di
cloudcode.kubernetes
, Cloud Code ti aiuta a configurarli.Conferma se utilizzare il modello attuale Contesto Kubernetes eseguire l'app (o passare all'app che preferisci).
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 accedere a un registry esistente o specificare il nome di un registry da creare. Se nel tuo progetto è abilitata l'API Artifact Registry e hai almeno un repository Artifact Registry, puoi 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.Per generare il nome del repository dell'immagine finale, Cloud Code concatena questo registry delle immagini con il nome dell'immagine specificato nei manifest 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.
Per ogni contenitore di debug nella tua applicazione, conferma o inserisci la directory nel contenitore remoto in cui si trova il programma da eseguire il debug.
In alternativa, puoi premere ESC per saltare il debug del contenitore.
Cloud Code collega una sessione di debug per ogni elemento di cui è possibile eseguire il debug containerizzato nell'applicazione.
Ora puoi eseguire le stesse attività 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 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 lancio del progetto.Per ispezionare le variabili e le informazioni sullo stack, utilizza la barra laterale di debug. Per interagire con la sessione di debug, utilizza la funzione Console di debug nel debugger del riquadro inferiore.
Al termine della sessione, puoi utilizzare il seguente menu contestuale :
- Apri log di deployment: apri i log dell'applicazione di un deployment specifico con Esplora log di Cloud Code.
- Apri URL servizio: apri l'URL del servizio di applicazione di un servizio specifico in un browser web
Se hai disattivato la modalità orologio nella configurazione di avvio e vuoi modificare l'applicazione, ricrearla e eseguirne nuovamente il deployment, Nel riquadro Sessioni di sviluppo, fermati sull'azione Esegui e fai clic su Ricrea ed esegui nuovamente il deployment dell'applicazione.
Per terminare la sessione di debug, fai clic su 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, automaticamente gestisce i seguenti dettagli di configurazione per tutte le lingue supportate:
- Port forwarding della porta di debug in modo da poter collegare il debugger.
- Collega un debugger a uno o più container di debug nella tua 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
, a ogni container di cui è possibile eseguire il debug è associato un debugger. - Definizioni di mappatura delle fonti persistenti tra le sessioni; puoi personalizzare
definizioni modificando direttamente il file
.vscode/launch.json
.
Cloud Code gestisce anche le seguenti impostazioni dettagli della configurazione:
Node.js
Riscrivere l'entry point da chiamare:
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 ulteriori dettagli sul debug basato su Skaffold, consulta la
documentazione di skaffold debug
.
Configurare il container
Per preparare il contenitore per il debug, segui le istruzioni per il linguaggio che stai utilizzando:
Node.js
- Avvia l'applicazione Node.js con
--inspect=<debugPort>
dovedebugPort
proviene dalla configurazione dell'attacco. Ad esempio:CMD ["node", "--inspect=9229", "index.js"]
Python
- Assicurati di avere installato il modulo
ptvsd
sulla tua macchina e nel tuo contenitore. - Avvia l'applicazione Python tramite
ptvsd
. Crea una corrispondenza con la porta specificata il campodebugPort
nel Collega configurazione. Ad esempio:CMD ["python", "-m", "ptvsd", "--port", "
", "app.py"]
Vai
- Assicurati di avere
Pacchetto
dlv
installato sulla macchina e sul container 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: durante il debug di un'applicazione Go, l'applicazione si arresta e attende l'attacco di un debugger. Collega un debugger per per avviare il servizio.
Java
- Assicurati che la JVM sia installata sulla tua macchina.
Avvia l'applicazione Java con le seguenti opzioni, dove
debugPort
proviene dalla configurazione dell'attacco.-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 la connessione sulla porta
debugPort
: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 installato
vsdbg
, il debugger a riga di comando .NET Core di Microsoft, nel contenitore 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
Configura la configurazione dell'attacco
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 progetto non ha un file launch.json
nella cartella .vscode
, puoi aggiungerne uno utilizzando il riquadro di debug.
Per accedere al riquadro Debug, fai clic su Debug nella barra delle attività.
Seleziona Aggiungi configurazione dal menu a discesa.
Seleziona Cloud Code: Kubernetes come ambiente.
Seleziona l'opzione Collega al pod Kubernetes.
Seleziona il linguaggio di programmazione che stai utilizzando.
Verrà creato e aperto un file
launch.json
per il progetto e verrà creata una configurazione di allegato.Aggiorna gli attributi di configurazione nel file
launch.json
in modo che corrispondano a quelli di del tuo progetto. Per ulteriori informazioni sugli attributi di configurazione, consulta Attributi di configurazione.
Aggiungi una configurazione di attacco al file .vscode/launch.json
Per aggiungere una nuova configurazione di collegamento a un file .vscode/launch.json
esistente:
- Apri il file
launch.json
. - Per richiamare lo snippet Intellisense, fai clic su Aggiungi configurazione.
- Per aggiungere una configurazione di collegamento, seleziona il Cloud Code: collega allo snippet del pod Kubernetes per la lingua che stai utilizzando che utilizzano.
- Aggiorna gli attributi nella configurazione in modo che corrispondano a quelli del progetto. Per ulteriori informazioni sugli attributi di configurazione, consulta Attributi di configurazione.
Attributi di configurazione
Attributo | Descrizione |
---|---|
debugPort | Porta di debug utilizzata nel container. |
podSelector | Insieme di coppie chiave-valore utilizzate per selezionare il pod di debug. Per maggiori 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 sottoposto a debug. Il valore predefinito è ${workspaceFolder}. |
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 Cloud Shell 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 tipo cloudcode.kubernetes
.
Per informazioni sulle differenze tra l'attacco a un pod Kubernetes e il debugging di un'applicazione Kubernetes, consulta Differenze tra l'attacco di un debugger a un pod e il debugging di un'applicazione Kubernetes.
Per collegare un debugger al pod Kubernetes, esegui queste attività:
- Per accedere al riquadro di debug, fai clic su Debug nella barra delle attività.
Seleziona e avvia la configurazione premendo
F5
.localhost:${debugPort}
viene inoltrata adebugPort
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.
Per ispezionare 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 del debugger in basso.
Per terminare la sessione di debug, fai clic su Interrompi nella barra degli strumenti di debug.
Differenze tra il collegamento di un debugger a un pod e il debug di un'applicazione Kubernetes
Collega a un pod Kubernetes | Eseguire il debug di un'applicazione Kubernetes |
---|---|
Esegue il debug di un singolo pod Kubernetes. | Esegui il debug di tutti i container di 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 la richiesta attach .
|
Utilizza la configurazione (.vscode/launch.json) di tipo cloudcode.kubernetes e la richiesta 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 o eseguire il debug dell'applicazione. |
Questa configurazione è specifica per la lingua. | Questa configurazione non è specifica per la lingua. |
Nessun comando dedicato. | Comando Debug su Kubernetes. |
Passaggi successivi
- Utilizza le funzionalità di sincronizzazione file e ricaricamento a caldo per velocizzare lo sviluppo.
- Imposta un sviluppo continuo in Cloud Code.
- Visualizza i log di Kubernetes in Cloud Code.