Accelerare lo sviluppo in Cloud Code per VS Code

Per velocizzare lo sviluppo locale in Cloud Code per VS Code, sfrutta la sincronizzazione dei file e il ricaricamento rapido, il deployment automatico al salvataggio e utilizza i moduli Skaffold per sviluppare separatamente parti di un'applicazione.

Abilitare la sincronizzazione dei file e il ricaricamento rapido di Skaffold

Per migliorare l'efficienza del workflow di sviluppo locale ed evitare di dover ricompilare, rieseguire 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 statici e di codice sorgente, puoi vederle applicate 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 ricaricamento rapido 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 rapido attivano una ricompilazione dell'immagine e un riavvio del pod.

La sincronizzazione automatica dei file e il ricaricamento rapido sono attivati per impostazione predefinita quando utilizzi i 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 artefatti.) Questa è l'impostazione predefinita per i buildpack.
  • infer: le destinazioni di ogni file modificato vengono dedotte dal builder.
  • manual: devi specificare i file nello spazio di lavoro locale e la loro destinazione nel container in esecuzione.

La seguente sezione sync di esempio in un file skaffold.yaml specifica una manual sincronizzazione 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 progetto. Le modifiche vengono sottoposte a deployment nel cluster Kubernetes senza arrestare e rimuovere il deployment, creare ed etichettare manualmente l'immagine o aggiornare il 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 monitorare l'avanzamento e i log di deployment nella finestra della console. Una volta eseguito il deployment delle modifiche, confermale.

  3. Per terminare la sessione di sviluppo continua, fai clic sull'icona Arresta.

    Cloud Code elimina tutte le risorse Kubernetes utilizzate per la sessione di sviluppo.

Sviluppare applicazioni basate su microservizi utilizzando le configurazioni di Skaffold

Quando sviluppi applicazioni basate su 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 dell'applicazione in modo indipendente suddividendo l'applicazione in moduli Skaffold. Ad esempio, l' esempio Bank of Anthos è un'applicazione che contiene dieci microservizi. Il file dell'esempio raggruppa questi servizi in cinque moduli Skaffold denominati setup, db, frontend, backend e loadgenerator.skaffold.yaml

Definire i moduli Skaffold e le dipendenze di configurazione

Per definire i moduli Skaffold e le dipendenze di 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 trasformare una configurazione in un modulo Skaffold, specifica la seguente riga:

    metadata:
      name: MODULE_NAME_1
    

    Ad esempio, in skaffold.yaml di Bank of Anthos, il modulo db definisce i deployment del 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 si basano sul deployment di un'altra configurazione prima che possa essere eseguito 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 di 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 nello stesso file o in altri file skaffold.yaml nel progetto corrente.

  5. Verifica le dipendenze di configurazione creando separatamente ciascuno dei moduli Skaffold per assicurarti che venga eseguito il deployment con le relative dipendenze seguendo i passaggi descritti in Creare moduli Skaffold specifici e le relative dipendenze.

Creare moduli Skaffold specifici e le relative dipendenze

Dopo aver definito i moduli e le relative dipendenze, puoi specificare i moduli che vuoi eseguire con Cloud Code nel file launch.json.

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

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

Se il progetto ha un file launch.json, segui questi passaggi per scegliere i moduli Skaffold da creare:

  1. Apri il file launch.json del progetto.

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

Sviluppo continuo su Kubernetes

Dopo aver configurato la destinazione di esecuzione con le opzioni che preferisci, puoi scegliere di eseguire normalmente l'applicazione o avviare un ciclo di iterazione di sviluppo nell'IDE per propagare le modifiche apportate al codice sorgente e alle dipendenze all'applicazione live.

La destinazione di esecuzione Esegui su Kubernetes avvia il ciclo di sviluppo sul cluster Kubernetes. Dopo aver avviato il ciclo di sviluppo, Cloud Code, utilizzando Skaffold, crea un'immagine per il progetto, quindi la 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 le opzioni di configurazione disponibili.
  2. Se l'applicazione è configurata per utilizzare i moduli Skaffold, puoi selezionare moduli specifici da creare o di cui eseguire il deployment.
  3. Apri la tavolozza dei comandi (premi Ctrl/Cmd+Shift+P) e poi esegui il comando Cloud Code: Esegui su Kubernetes.
  4. Conferma se utilizzare il contesto Kubernetes corrente per eseguire l'app (o passare a uno preferito). Per ulteriori informazioni sulla configurazione di un contesto Kubernetes, consulta la sezione Configurare la configurazione.
  5. Se hai scelto un cluster remoto come contesto, quando ti viene richiesto, scegli un registro immagini in cui eseguire il push delle immagini. Se nel 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, ne esegue il push nel registro, applica le configurazioni Kubernetes al cluster e attende il rollout.

Passaggi successivi

Richiedi assistenza

Per inviare feedback, segnalare problemi su GitHub, o porre una domanda su Stack Overflow.