Accelera lo sviluppo in Cloud Code for VS Code

Per velocizzare lo sviluppo locale in Cloud Code for VS Code, sfrutta il supporto sincronizzazione e ricaricamento a caldo, deployment automatico al momento del salvataggio e utilizzo dei moduli Skaffold per sviluppare parti di un'applicazione separatamente.

Attiva la sincronizzazione dei file Skaffold e il ricaricamento a caldo

Per migliorare l'efficienza del flusso di lavoro di sviluppo locale ed evitare di dover ricostruire, eseguire nuovamente il deployment e riavviare i pod, Skaffold supporta la copia dei file modificati in un contenitore di cui è stato eseguito il deployment. Ciò significa che, quando apporti modifiche ai file di codice statico e di origine, puoi vedere che le modifiche vengono applicate in pochi secondi, creando un loop di feedback accelerato.

Per i file statici (ad esempio, HTML e CSS), questo comportamento di copia è chiamato sincronizzazione di file.

Per i file di codice sorgente, questo comportamento è chiamato ricaricamento a caldo e supporta i seguenti tipi di file:

  • Go: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj
  • Node.js: *.js, *.mjs, *.coffee, *.litcoffee, *.json

Con la ricarica rapida configurata, Skaffold rileva le modifiche ai file supportati e le sincronizza con il contenitore in esecuzione nel cluster. Le modifiche ai tipi di file che non supportano il ricoriccamento dinamico attivano la ricostruzione dell'immagine e il riavvio del pod.

La sincronizzazione automatica dei file e il ricaricamento a caldo sono abilitate per impostazione predefinita usare Buildpacks 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 elementi Jib e Buildpacks). Questa è l'impostazione predefinita per i Buildpack.
  • infer: le destinazioni per ogni file modificato vengono dedotte dal generatore.
  • manual: devi specificare i file nell'area di lavoro locale e la loro destinazione in il container in esecuzione.

La seguente sezione sync di esempio in un file skaffold.yaml specifica un Sincronizza manual per sincronizzare tutti i /static-html file HTML su 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. Il deployment delle modifiche viene eseguito in Kubernetes senza interrompere e rimuovere il deployment, creando manualmente e il tagging dell'immagine o l'aggiornamento del cluster.

Un ciclo di iterazione standard è simile al seguente:

  1. Apporta una modifica al progetto. Ad esempio, se utilizzi l'app Guestbook Java di Cloud Code, aggiungi un nuovo endpoint alla classe FrontendController come segue:

    1. Apri il file FrontendController.java da src/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);
      }
      
    2. Aggiungi le importazioni necessarie per le nuove annotazioni, RequestMapping e ResponseBody.

  2. Salva le modifiche (Ctrl/Cmd+S) o crea il progetto.

    Puoi visualizzare i log di avanzamento e deployment nella finestra della console. Dopo aver eseguito il deployment delle modifiche, conferma gli aggiornamenti.

  3. 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 Skaffold

Quando si sviluppano applicazioni basate su microservizi, può essere utile lavorare su istanze in modo indipendente per semplificare il debug e il deployment.

Puoi sviluppare e eseguire il debug di parti della tua applicazione in modo indipendente dividendola in moduli Skaffold. Ad esempio, l'esempio Bank of Anthos è un'applicazione contenente dieci microservizi. Il file skaffold.yaml del campione raggruppa questi servizi in cinque moduli Skaffold denominati setup, db, frontend, backend e loadgenerator.

Definisci i moduli e le dipendenze di configurazione di Skaffold

Per definire i moduli Skaffold e le dipendenze della configurazione:

  1. Apri il progetto in cui vuoi definire i moduli.

  2. Apri il file skaffold.yaml.

  3. Se il file skaffold.yaml ha più configurazioni, per creare un configurare un modulo Skaffold, specifica la riga seguente:

    metadata:
      name: MODULE_NAME_1
    

    Ad esempio, in Bank of Anthos skaffold.yaml, il modulo db definisce i deployment dei database:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. Per le configurazioni che richiedono il deployment di un'altra configurazione prima di poter eseguire il deployment della configurazione corrente, devi aggiungere la configurazione alle dipendenze. Per specificare una dipendenza di configurazione, aggiungi un elenco configs alla sezione requires del file skaffold.yaml.

    Ad esempio, il file skaffold.yaml di Bank of Anthos include la dipendenza dalla configurazione setup.

    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 nel stesso file o altri file skaffold.yaml nel progetto corrente.

  5. Testa le dipendenze di configurazione compilando ogni modulo Skaffold singolarmente per assicurarti che vengano di cui vengono eseguiti il deployment con le relative dipendenze seguendo i passaggi descritti in Compilare moduli Skaffold specifici e le relative dipendenze.

Crea moduli Skaffold specifici e le relative dipendenze

Dopo aver definito i moduli e le loro dipendenze, puoi specificare quali moduli da eseguire con Cloud Code nel file launch.json.

Se nel progetto non è definito un file launch.json, quando esegui Cloud Code: Esegui su Kubernetes o Cloud Code: Esegui il debug su Kubernetes, ti viene chiesto di selezionare i moduli da compilare:

  1. Apri la tavolozza dei comandi (Ctrl/Cmd+Shift+P) ed esegui Cloud Codice: esegui su Kubernetes.
  2. Fai clic su Seleziona moduli.
  3. Scegli i moduli di cui vuoi eseguire il deployment e fai clic su OK. Ogni modulo viene creato con le relative dipendenze.
  4. Quando richiesto, scegli un registro di immagini, quindi premi Enter.

Se il progetto ha uno launch.json, segui questi passaggi per scegliere lo Skaffold moduli da creare:

  1. Apri il file launch.json del progetto.

  2. Modifica la configurazione di avvio per aggiungere l'opzione skaffoldFlags con un elenco delimitato da virgole di modules da creare. Se skaffoldFlags 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,
        }
      }
    
  3. Esegui la configurazione di lancio che hai modificato.

Sviluppo continuo su Kubernetes

Dopo aver configurato il target delle esecuzioni con le opzioni desiderate, puoi puoi optare per un'esecuzione regolare della tua applicazione o avviare uno sviluppo nel tuo IDE per propagare le modifiche apportate all'origine le dipendenze per la tua applicazione live.

La destinazione di esecuzione Esegui su Kubernetes avvia il ciclo di sviluppo sul tuo in un cluster Kubernetes. Una volta avviato il ciclo di sviluppo, Cloud Code, utilizzando Skaffold, crea un'immagine per progetto, quindi lo tagga, ne esegue il push nel repository configurato e utilizza kubectl per eseguire il deployment dei manifest Kubernetes del progetto.

  1. Personalizza il deployment utilizzando opzioni di configurazione disponibili.
  2. Se la tua applicazione è configurata per utilizzare i moduli Skaffold, puoi selezionare moduli specifici da compilare o eseguire il deployment.
  3. Apri la tavolozza dei comandi (premi Ctrl/Cmd+Shift+P), quindi esegui il Comando Cloud Code: Run on Kubernetes.
  4. Conferma se utilizzare il modello attuale Contesto Kubernetes eseguire l'app (o passare all'app che preferisci). Per ulteriori informazioni per configurare un contesto Kubernetes, l'impostazione della configurazione.
  5. Se hai scelto un cluster remoto come contesto, quando richiesto, scegli un registry di immagini a cui inviare le immagini. Se utilizzi Container Registry, puoi vai a un registro esistente o specifica il nome di un registro 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.

    Cloud Code crea i container, li invia al registry, applica le configurazioni Kubernetes al cluster e attende l'implementazione.

Passaggi successivi

Richiedi assistenza

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