Per velocizzare lo sviluppo locale in Cloud Code per Cloud Shell, sfrutta la sincronizzazione dei file e il ricaricamento rapido, il deployment automatico al salvataggio e utilizza i moduli Skaffold per sviluppare separatamente porzioni di un'applicazione.
Attivare la sincronizzazione dei file Skaffold e il ricaricamento rapido
Per migliorare l'efficienza del flusso di lavoro di sviluppo locale ed evitare di dover ricompilare, eseguire nuovamente il deployment e riavviare i pod, Skaffold supporta la copia dei file modificati in un container di cui è stato eseguito il deployment. Ciò significa che quando apporti modifiche ai file di codice sorgente e statici, puoi vedere le modifiche avere effetto in pochi secondi, il che accelera il ciclo di feedback.
Per i file statici (come i file HTML e CSS), questo comportamento di copia dei file è chiamato sincronizzazione dei file.
Per i file di codice sorgente, questo comportamento è chiamato ricarica rapida e supporta i seguenti tipi di file:
- Go: *.go
- Java: *.java, *.kt, *.scala, *.groovy, *.clj
- NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json
Con il ricaricamento rapido configurato, Skaffold rileva le modifiche ai file supportati e le sincronizza con il container in esecuzione sul cluster. Le modifiche ai tipi di file che non supportano il ricaricamento a caldo attivano una ricompilazione dell'immagine e il riavvio del pod.
La sincronizzazione automatica dei file e il ricaricamento rapido sono attivati per impostazione predefinita quando utilizzi Buildpack come builder preferito. Per altri builder come
Docker, puoi specificare una sezione sync
nel file skaffold.yaml
per l'artefatto che stai personalizzando.
L'impostazione di sincronizzazione può essere una delle seguenti (in ordine di preferenza):
auto
: Skaffold configura automaticamente la sincronizzazione. (solo per gli artefatti Jib e Buildpacks). Questa è l'impostazione predefinita per i buildpack.infer
: Le destinazioni di ogni file modificato vengono dedotte dal builder.manual
: Devi specificare i file nell'area di lavoro locale e la loro destinazione nel container in esecuzione.
La seguente sezione sync
di esempio in un file skaffold.yaml
specifica una
sincronizzazione manual
per sincronizzare tutti i file HTML /static-html
con la cartella static
in un container:
build: artifacts: - image: gcr.io/k8s-skaffold/node-example context: node sync: manual: - src: 'static-html/*.html' dest: static
Per un'analisi dettagliata della sincronizzazione dei file e della specifica delle regole di sincronizzazione, consulta la guida di Skaffold sulla sincronizzazione dei file.
Aggiungere nuove funzionalità durante lo sviluppo su Kubernetes
Dopo aver configurato la sincronizzazione dei file e il ricaricamento rapido, avvia un ciclo di iterazione e aggiungi altre funzionalità al tuo progetto. Le modifiche vengono implementate nel cluster Kubernetes senza arrestare e rimuovere il deployment, creare e taggare manualmente l'immagine o aggiornare il cluster.
Un ciclo di iterazione standard è simile al seguente:
Apporta una modifica al progetto. Ad esempio, se utilizzi l'app Guestbook Java di Cloud Code, aggiungi un nuovo endpoint alla classe
FrontendController
nel seguente modo:Apri il file
FrontendController.java
dasrc/main/java/cloudcode/guestbook/frontend
e aggiungi quanto segue:@RequestMapping("/greeting") @ResponseBody public String greeting(@RequestParam(value="name", defaultValue="World") String name) { return String.format("Hello from Kubernetes with IntelliJ, %s!", name); }
Aggiungi le importazioni necessarie per le nuove annotazioni,
RequestMapping
eResponseBody
.
Salva le modifiche (
Ctrl
/Cmd+S
) o crea il progetto.Puoi monitorare l'avanzamento e i log di deployment nella finestra della console. Dopo il deployment delle modifiche, conferma gli aggiornamenti.
Per terminare la sessione di sviluppo continuo, fai clic sull'icona Interrompi.
Cloud Code elimina tutte le risorse Kubernetes utilizzate per la sessione di sviluppo.
Sviluppare applicazioni di microservizi utilizzando le configurazioni di Skaffold
Quando sviluppi applicazioni di microservizi, può essere utile lavorare su sezioni separate in modo indipendente per semplificare il debug e il deployment.
Puoi sviluppare ed eseguire il debug di parti della tua applicazione in modo indipendente suddividendola
in moduli Skaffold. Ad esempio, l'esempio
Bank of Anthos
è un'applicazione contenente dieci microservizi. I gruppi di file
skaffold.yaml
dell'esempio raggruppano questi servizi in cinque moduli Skaffold denominati setup
, db
,
frontend
, backend
e loadgenerator
.
Definisci i moduli Skaffold e le dipendenze di configurazione
Per definire i moduli Skaffold e le dipendenze di configurazione:
Apri il progetto in cui vuoi definire i moduli.
Apri il file
skaffold.yaml
.Se il file
skaffold.yaml
ha più configurazioni, per trasformare una configurazione in un modulo Skaffold, specifica la seguente riga:metadata: name: MODULE_NAME_1
Ad esempio, in Bank of Anthos
skaffold.yaml
, il modulodb
definisce i deployment del database:Per le configurazioni che si basano sul deployment di un'altra configurazione prima che possa essere eseguito il deployment di quella attuale, devi aggiungere la configurazione alle dipendenze. Per specificare una dipendenza di configurazione, aggiungi un elenco
configs
alla sezionerequires
del fileskaffold.yaml
.Ad esempio, il file
skaffold.yaml
di Bank of Anthos include la dipendenza di configurazionesetup
.Per definire una dipendenza, aggiungi quanto segue al file
skaffold.yaml
, dove DEPENDENCY_NAME è il nome della dipendenza.requires: - configs: DEPENDENCY_NAME
Le configurazioni elencate in questo modo possono fare riferimento alle dipendenze definite nello stesso file o in altri file
skaffold.yaml
del progetto corrente.Testa le dipendenze della configurazione creando separatamente ciascuno dei moduli Skaffold per assicurarti che vengano implementati con le relative dipendenze seguendo i passaggi descritti in Creare moduli Skaffold specifici e le relative dipendenze.
Crea moduli Skaffold specifici e le relative dipendenze
Dopo aver definito i moduli e le relative dipendenze, puoi specificare quali
moduli vuoi eseguire con Cloud Code nel file launch.json
.
Se il tuo progetto non ha un file launch.json
definito, quando esegui Cloud
Code: Run on Kubernetes o Cloud Code: Debug on Kubernetes, ti viene chiesto di selezionare i moduli da compilare:
- Apri la tavolozza dei comandi (
Ctrl
/Cmd
+Shift
+P
) e poi esegui Cloud Code: Run on Kubernetes. - Fai clic su Seleziona moduli.
- Scegli i moduli di cui vuoi eseguire il deployment e poi fai clic su Ok. Ogni modulo è creato con le sue dipendenze.
- Quando richiesto, scegli un registro delle immagini e premi
Enter
.
Se il tuo progetto ha un launch.json
, segui questi passaggi per scegliere i moduli Skaffold da compilare:
Apri il file
launch.json
del progetto.Modifica la configurazione di avvio per aggiungere l'opzione
skaffoldFlags
con un elenco delimitato da virgole dimodules
da compilare. SeskaffoldFlags
viene omesso, vengono creati tutti i moduli.{ "name": "Run on Kubernetes", "type": "cloudcode.kubernetes", "request": "launch", "skaffoldConfig": "${workspaceFolder}/skaffold.yaml", "skaffoldFlags": { "modules": ["MODULE_NAME_2,MODULE_NAME_2"], "watch": true, "cleanUp": true, } }
Esegui la configurazione di avvio che hai modificato.
Sviluppo continuo su Kubernetes
Dopo aver configurato il target di esecuzione con le opzioni che preferisci, puoi optare per un'esecuzione normale dell'applicazione o avviare un ciclo di iterazione di sviluppo nell'IDE per propagare le modifiche apportate all'origine e alle dipendenze all'applicazione live.
La destinazione di esecuzione Esegui su Kubernetes avvia il ciclo di sviluppo sul tuo cluster Kubernetes. Dopo aver avviato il ciclo di sviluppo, Cloud Code, utilizzando Skaffold, crea un'immagine per il progetto, quindi la tagga, la invia al repository configurato e utilizza kubectl per eseguire il deployment dei manifest Kubernetes del progetto.
- Personalizza il deployment utilizzando le opzioni di configurazione disponibili.
- Se la tua applicazione è configurata per utilizzare moduli Skaffold, puoi selezionare moduli specifici da compilare o di cui eseguire il deployment.
- Apri la tavolozza dei comandi (premi
Ctrl
/Cmd
+Shift
+P
) e poi esegui il comando Cloud Code: Run on Kubernetes. - Conferma se utilizzare il contesto Kubernetes attuale per eseguire l'app (o passare a uno preferito). Per ulteriori informazioni sulla configurazione di un contesto Kubernetes, consulta Configurazione.
Se hai scelto un cluster remoto come contesto, quando ti viene richiesto, scegli un registro di immagini in 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.
Cloud Code crea i container, li invia al registro, applica le configurazioni Kubernetes al cluster e attende l'implementazione.
Passaggi successivi
- Utilizza il cluster minikube integrato di Cloud Code per lo sviluppo locale.
- Eseguire il debug dell'applicazione in Cloud Code
- Leggi i dettagli sulla funzionalità di sincronizzazione dei file di Skaffold