Inizia a utilizzare Skaffold in Cloud Deploy

Questo documento descrive come iniziare a utilizzare Skaffold nell'ambito di Cloud Deploy, tra cui:

  • Configurazione di Skaffold per l'utilizzo con una pipeline di distribuzione Cloud Deploy
  • Utilizzo di Skaffold e Cloud Deploy con strumenti di rendering di terze parti, come Helm e Kustomize
  • (Facoltativo) Utilizzo di Skaffold per lo sviluppo locale
  • (Facoltativo) Utilizzo di Skaffold per l'integrazione continua e il deployment continuo (CI/CD)

Perché Skaffold?

Vuoi sapere perché Cloud Deploy utilizza Skaffold e perché devi gestire una configurazione Skaffold? Continua a leggere.

Ho esperienza con CI/CD, ma al momento non utilizzo Skaffold

Skaffold è uno strumento a riga di comando open source per migliorare la produttività degli sviluppatori. Orchestra sviluppo continuo, integrazione continua (CI) e distribuzione continua (CD).

Skaffold fornisce una configurazione dichiarativa e portatile, utilizzando un'architettura modulare, che ti consente di utilizzare strumenti diversi per la fase di rendering.

Quando viene creata una release, Cloud Deploy chiama Skaffold per il rendering dei manifest. Al momento del deployment, Cloud Deploy chiama di nuovo Skaffold per applicare questi manifest per distribuire l'applicazione in ogni target nella progressione. Dopo il deployment, Skaffold esegue controlli di integrità per monitorare il runtime di destinazione per un deployment riuscito.

Skaffold per lo sviluppo continuo

Quando utilizzi Skaffold per lo sviluppo continuo, le immagini vengono create, testate e implementate in un cluster (o Minikube) man mano che modifiche il codice. Le estensioni IDE Cloud Code for VS Code e Cloud Code for IntelliJ integrano Skaffold in Visual Studio Code e negli IDE JetBrains per lo sviluppo continuo.

Skaffold per la distribuzione continua

Puoi anche utilizzare Skaffold per la distribuzione continua, con passaggi di creazione, deployment, rendering e applicazione. Cloud Deploy utilizza le funzionalità di rendering e applicazione di Skaffold. Per utilizzare Cloud Deploy, devi avere almeno un file di configurazione skaffold.yaml valido.

Tramite Skaffold, puoi anche eseguire l'integrazione con strumenti di gestione dei manifest di terze parti, come Helm e Kustomize. L'utilizzo di Skaffold in questo modo ti consente di utilizzare le funzionalità di questi strumenti per il rendering dei manifest. kubectl rimane il deployer per questi manifest.

Non ho mai eseguito il deployment in Kubernetes

Con Skaffold, puoi configurare un insieme di base di manifest per tutti i tuoi deployment. Puoi quindi utilizzare il motore di rendering di Skaffold, tramite Cloud Deploy, per eseguire il rendering e poi il deployment di ogni manifest specifico per il deployment da uno di questi manifest di base.

Scopri di più sulla gestione dei manifest, inclusi esempi di utilizzo di Skaffold e Cloud Deploy con strumenti comuni per la creazione di modelli di manifest, come Helm e Kustomize.

Cosa è necessario per far funzionare Cloud Deploy?

Per utilizzare una pipeline di distribuzione Cloud Deploy di base, il file di configurazione skaffold.yaml deve avere almeno la seguente configurazione:

  • Le informazioni dell'intestazione necessarie per tutte le configurazioni di skaffold.yaml:

    apiVersion: skaffold/v4beta7
    kind: Config
    
  • Una sezione manifests, per GKE, per i cluster GKE collegati o per Cloud Run che elenca tutti i manifest Kubernetes non elaborati (a meno che tu non utilizzi uno strumento di gestione dei manifest, come Helm o Kustomize).

    Ecco un esempio che utilizza un manifest Kubernetes non elaborato:

    manifests:
      rawYaml:
      - deployment.yaml
    

    Se prevedi di utilizzare un renderer (come Helm o Kustomize) per eseguire il rendering dei manifest, consulta Aggiungere il supporto di Helm a skaffold.yaml e Aggiungere il supporto di Kustomize a skaffold.yaml per indicazioni su come configurare Skaffold per utilizzare questi strumenti.

    Per esempi di Helm e Kustomize, vedi Gestire i manifest

  • Una sezione deploy, con deploy.kubectl per il deployment su GKE o sui cluster GKE collegati oppure deploy.cloudrun per il deployment su Cloud Run.

    Per GKE e i cluster collegati a GKE:

    deploy:
      kubectl: {}
    

    La sezione deploy esegue il deployment dei manifest dell'applicazione forniti nella sezione manifests.

    Per le destinazioni Cloud Run:

    deploy:
      cloudrun: {}
    

    La sezione deploy esegue il deployment dei manifest dell'applicazione forniti nella sezione manifests.

Se utilizzi target personalizzati, il tuo skaffold.yaml deve avere l'intestazione (apiVersion e kind:), oltre alle azioni personalizzate che il target personalizzato utilizzerà se il tipo di target personalizzato non fa già riferimento a una configurazione Skaffold remota.

Creare un file skaffold.yaml

Cloud Deploy utilizza Skaffold per il rendering e il deployment delle applicazioni.

Per ogni release, devi fornire almeno un file skaffold.yaml che identifichi i manifest da utilizzare. Consulta la sezione precedente per indicazioni su cosa deve essere inserito in questo file.

Fai in modo che Cloud Deploy generi il tuo skaffold.yaml

Se non hai un file skaffold.yaml, ma hai un singolo manifest Kubernetes o un file di definizione del servizio Cloud Run, Cloud Deploy può generare un file skaffold.yaml per te.

Il file Skaffold generato sarà disponibile nella directory di staging dell'origine Cloud Storage al termine della release.

Il seguente comando include il flag --from-k8s-manifest, che passa il manifest Kubernetes. Cloud Deploy utilizza le informazioni nel manifest per generare skaffold.yaml, che viene poi utilizzato per la release.

gcloud deploy releases create  RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION

Per generare skaffold.yaml da un file YAML del servizio Cloud Run, utilizza lo stesso comando, ma con --from-run-manifest anziché --from-k8s-manifest.

L'utilizzo di uno di questi flag con il flag --skaffold-file o --source genera un errore.

Utilizzo del file skaffold.yaml generato

Il skaffold.yaml generato è adatto per l'onboarding, l'apprendimento e la dimostrazione di Cloud Deploy. Dopo aver acquisito familiarità con Cloud Deploy e per i carichi di lavoro di produzione, potresti voler utilizzare una configurazione Skaffold che differenzi i target (utilizzando i profili Skaffold).

Quando utilizzi il file skaffold.yaml generato come punto di partenza per creare la tua configurazione Skaffold differenziata, assicurati di utilizzare il file nell'archivio di origine del rendering, non il file sottoposto a rendering. La sorgente di rendering è disponibile per il download dalla scheda Artefatti nella pagina Dettagli uscita.

  • skaffold.yaml generato è incluso nell'origine del rendering archiviata in un bucket Cloud Storage.

    Puoi visualizzare questo file scaricando il file .tar.gz ed estraendolo.

  • Il skaffold.yaml sottoposto a rendering è disponibile in Artefatti di destinazione.

    Nella sezione Artefatti di destinazione, fai clic su Visualizza artefatti.

    Pagina dei dettagli della release, che mostra gli artefatti di origine e di destinazione del rendering

Utilizzo di Skaffold per lo sviluppo locale

Uno dei punti di forza di Skaffold è che puoi utilizzarlo per lo sviluppo locale e per la CI/CD. In modalità dev, Skaffold monitora i file di origine e, quando rileva una modifica, ricostruisce le immagini, esegue nuovamente i test e ridistribuisce i container in un cluster minikube (ad esempio) sulla macchina locale.

Quando utilizzi Skaffold in questo modo, puoi utilizzare gli stessi comandi localmente e per il deployment remoto.

Se utilizzi Skaffold per lo sviluppo locale, puoi definire profili Skaffold separati per le tue destinazioni e una sezione di deployment predefinita per lo sviluppo locale.

Quando interrompi la modalità dev, Skaffold esegue la pulizia degli artefatti di cui è stato eseguito il deployment dal cluster.

Utilizzo di Skaffold per CI/CD

Oltre a utilizzare Skaffold per la creazione e il deployment locali continui, puoi utilizzare Skaffold per la CI/CD. Cloud Deploy utilizza le funzionalità CI/CD di Skaffold per eseguire il rendering e applicare i manifest e per eseguire il deployment dell'applicazione alle destinazioni definite, date le immagini container create utilizzando uno strumento CI come Cloud Build e un registro delle immagini come Artifact Registry.

Esegui il rendering, il deployment e l'applicazione

Skaffold separa il processo di rendering del manifest dal deployment. Cloud Deploy chiama skaffold render, per il rendering dei manifest e skaffold apply per applicarli al target.

Questa separazione tra rendering e applicazione ti consente di acquisire lo stato dichiarativo completo dell'applicazione nella configurazione, in modo che possa essere applicato in modo sicuro e ripetibile (ad esempio, per i rollback). Questa tecnica semplifica anche le approvazioni. Poiché i manifest vengono visualizzati per tutti i target prima della prima implementazione, puoi vedere il codice YAML visualizzato che verrà applicato a ogni target.

Cloud Deploy non supporta l'utilizzo di altri deployer per il deployment dell'applicazione. Tuttavia, puoi utilizzare strumenti come Helm o Kustomize per il rendering.

Per scoprire di più su come Cloud Deploy esegue il deployment utilizzando kubectl come deployer, consulta Architettura del servizio Cloud Deploy.

Informazioni sui profili Skaffold

Puoi creare profili Skaffold separati, identificati in skaffold.yaml, in una sezione profiles:.

Quando utilizzi i profili Skaffold con Cloud Deploy, puoi creare profili separati per tutti o alcuni dei tuoi target. Ad esempio, profili diversi per dev, staging e prod.

I profili non sono necessari per utilizzare Skaffold in Cloud Deploy, ma sono utili per definire le personalizzazioni dei manifest tra le destinazioni, ad esempio utilizzando file Kustomize kustomization.yaml diversi per ogni destinazione.

Aggiungere il supporto di Kustomize a skaffold.yaml

L'integrazione della configurazione Kustomize con la configurazione Cloud Deploy/Skaffold consiste in quanto segue:

  1. Includi un file kustomization.yaml tra i file di configurazione.

    Puoi archiviare i file di configurazione in una directory locale o in un bucket Cloud Storage.

  2. Nel file skaffold.yaml, crea una sezione deploy per ogni profilo.

    Puoi anche avere una sezione deploy al di fuori di qualsiasi profilo definito, se non utilizzi i profili o per una configurazione di deployment predefinita non associata a un profilo.

    Di seguito è riportata una configurazione di Skaffold di esempio che mostra deploy stanze per profilo e utilizza un'app di esempio fittizia chiamata my-app:

    apiVersion: skaffold/v4beta7
    kind: Config
    build:
      artifacts:
        - image: my-app-web-profiles
          context: my-app-web-profiles
        - image: my-app-application-profiles
          context: my-app-application-profiles
      googleCloudBuild:
        projectId: ${PROJECT_ID}
    profiles:
    - name: local
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/local
    - name: test
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/test
    - name: staging
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/staging
    - name: prod
      manifests:
        kustomize:
          paths:
            - my-app-application-profiles/kubernetes/prod
    deploy:
      kubectl: {}
    

    La configurazione Skaffold mostrata qui ha profili separati per i target test, staging e prod. Mostra anche un profilo per lo sviluppo locale. In ogni profilo è presente una sezione deploy.kustomize con un percorso che punta alla posizione della personalizzazione da utilizzare per la destinazione.

Aggiungere il supporto di Helm al tuo skaffold.yaml

Puoi utilizzare Helm per eseguire il rendering dei manifest. Cloud Deploy non utilizza Helm per il deployment delle applicazioni e supporta solo kubectl come deployer.

Per utilizzare Helm, devi disporre di uno o più grafici Helm memorizzati in una posizione a cui puoi fare riferimento dall'interno di skaffold.yaml. Questa posizione può trovarsi in un file system, in un repository, possibilmente insieme a skaffold.yaml o in un repository Open Container Initiative (OCI).

Per utilizzare un grafico Helm, aggiungi una sezione helm al file skaffold.yaml.

apiVersion: skaffold/v4beta7
kind: Config
build:
  artifacts:
  - image: skaffold-helm-image
manifests:
  helm:
    releases:
    - name: skaffold-helm-image
      chartPath: charts
deploy:
  kubectl: {}

Il riferimento skaffold.yaml mostra cosa è richiesto in questa sezione helm.

Funzionalità di Skaffold non supportate

Le seguenti funzionalità di Skaffold non possono essere utilizzate in Cloud Deploy:

Passaggi successivi

  • Visita il sito di Skaffold per scoprire come funziona e cosa può fare per te.

  • Esercitati a utilizzare Cloud Deploy con Kustomize e i profili Skaffold.

  • Scopri come Cloud Deploy seleziona le versioni degli strumenti da utilizzare e come determinare quali versioni sono in uso.

  • Scopri come utilizzare i profili Skaffold con strumenti avanzati di gestione dei manifest come Helm, Kustomize e kpt.