Inizia a utilizzare Skaffold in Cloud Deploy

Questo documento descrive come iniziare a utilizzare Skaffold come parte di Cloud Deploy, inclusi quanto segue:

  • Configurazione di Skaffold per l'utilizzo con una pipeline di distribuzione di Cloud Deploy
  • Usare Skaffold e Cloud Deploy con strumenti di rendering di terze parti, come Helm e Kustomize
  • Facoltativamente, utilizzare Skaffold per lo sviluppo locale
  • Facoltativamente, utilizza Skaffold per l'integrazione e il deployment continui (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 portabile, che utilizza un'architettura inseribile e 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 al fine di eseguire il deployment dell'applicazione a ogni target in avanzamento. Dopo il deployment, Skaffold esegue controlli di integrità per monitorare il runtime di destinazione per il corretto deployment.

Skaffold per uno sviluppo continuo

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

Skaffold per la distribuzione continua

Puoi anche utilizzare Skaffold per la distribuzione continua con i passaggi di creazione, deployment, rendering e applicazione. Cloud Deploy utilizza le funzionalità di rendering e apply 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 consente di sfruttare le funzionalità di tali strumenti per eseguire il rendering dei manifest. kubectl rimane il deployer per questi manifest.

Non ho mai eseguito il deployment in Kubernetes

Con Skaffold puoi configurare un set 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 di ogni manifest specifico del deployment da uno di questi manifest di base.

Ulteriori informazioni sulla gestione dei manifest, inclusi esempi di utilizzo di Skaffold e Cloud Deploy con strumenti di generazione dei modelli manifest comuni, come Helm e Kustomize.

Cosa serve per far funzionare Cloud Deploy?

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

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

    apiVersion: skaffold/v4beta7
    kind: Config
    
  • Una stanza manifests per GKE, GKE Enterprise o 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 utilizzando un manifest Kubernetes non elaborato:

    manifests:
      rawYaml:
      - deployment.yaml
    

    Se prevedi di utilizzare un renderer (come Helm o Kustomize) per 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 l'utilizzo di questi strumenti.

    Per esempi di Helm e Kustomize, consulta Gestire i manifest

  • Una stanza deploy, con deploy.kubectl, per il deployment in GKE o GKE Enterprise oppure deploy.cloudrun per il deployment in Cloud Run.

    Per i target GKE e GKE Enterprise:

    deploy:
      kubectl: {}
    

    La stanza di deployment esegue il deployment dei manifest dell'applicazione forniti nella stanza del file manifest.

    Per i target Cloud Run:

    deploy:
      cloudrun: {}
    

    La stanza di deployment esegue il deployment dei manifest dell'applicazione forniti nella stanza dei manifest.

Se utilizzi target personalizzati, 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 di Skaffold remota.

Crea 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 identifica i manifest da utilizzare. Consulta la sezione precedente per indicazioni sui contenuti di questo file.

Fai generare i tuoi skaffold.yaml a Cloud Deploy

Se non disponi di un file skaffold.yaml, ma hai un solo file 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 temporanea di origine di Cloud Storage al termine della release.

Il seguente comando include il flag --from-k8s-manifest, che passa il manifest di Kubernetes. Cloud Deploy utilizza le informazioni nel file manifest per generare skaffold.yaml, che viene quindi 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 servizio YAML di 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.

È in uso il file skaffold.yaml generato

Il valore 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 creare una configurazione di Skaffold che differisca tra i tuoi target (utilizzando i profili Skaffold).

Quando utilizzi il file skaffold.yaml generato come punto di partenza per creare una configurazione Skaffold differenziata, assicurati di utilizzare il file nell'archivio di origine di rendering, non il file di cui è stato eseguito il rendering. L'origine di rendering è disponibile per il download dalla scheda Elementi nella pagina **Dettagli release **.

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

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

  • Gli elementi skaffold.yaml sottoposti a rendering è disponibile in Elementi di destinazione.

    Nella sezione Elementi di destinazione, fai clic su Visualizza elementi.

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

Utilizzare Skaffold per lo sviluppo locale

Uno dei punti di forza di Skaffold è che può essere utilizzato per lo sviluppo locale e per CI/CD. In modalità dev, Skaffold controlla i file di origine e, quando rileva una modifica, ricrea le immagini, testa nuovamente ed esegue nuovamente il deployment dei container in un cluster minikube (ad esempio) sulla tua macchina locale.

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

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

Quando arresti la modalità dev, Skaffold pulisce gli 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 usare Skaffold per CI/CD. Cloud Deploy utilizza le funzionalità CI/CD di Skaffold per eseguire il rendering e l'applicazione dei manifest, nonché per il deployment dell'applicazione nei target definiti, date immagini container create utilizzando uno strumento CI come Cloud Build e un registro di immagini come Artifact Registry.

Rendering, deployment e applicazione

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

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

Cloud Deploy non supporta l'utilizzo di altri deployment per eseguire il deployment della tua 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 deployment, consulta Architettura del servizio di Cloud Deploy.

Informazioni sui profili Skaffold

Puoi creare profili Skaffold separati, identificati in skaffold.yaml, in una stanza 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 del manifest tra le destinazioni, ad esempio l'utilizzo di diversi file kustomization.yaml di Kustomize per destinazione.

Aggiungi il supporto Kustomize al tuo skaffold.yaml

L'integrazione della configurazione Kustomize con la configurazione di Cloud Deploy/Skaffold è composta da 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 tuo file skaffold.yaml, crea una stanza deploy per ogni profilo.

    Puoi anche avere una stanza deploy al di fuori di qualsiasi profilo definito, se non utilizzi profili o per una configurazione di deployment predefinita non collegata 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 denominata 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 di Skaffold mostrata qui ha profili separati per le destinazioni test, staging e prod. Mostra inoltre un profilo per lo sviluppo locale. In ogni profilo è presente una stanza deploy.kustomize con un percorso che rimanda alla posizione della kustomizzazione da utilizzare per il target.

Aggiungi il supporto Helm a skaffold.yaml

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

Per utilizzare Helm, devi avere il tuo grafico o i grafici Helm, memorizzati in qualsiasi posizione a cui puoi fare riferimento dall'interno di skaffold.yaml. La posizione può trovarsi in un file system, in un repository, possibilmente insieme al tuo skaffold.yaml o in un repository Open Container Initiative (OCI).

Per utilizzare un grafico Helm, aggiungi una stanza helm al tuo 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 i requisiti in questa stanza 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 i profili Kustomize e Skaffold.

  • Scopri come Cloud Deploy seleziona la versione di Skaffold da utilizzare quando cambia la versione di Skaffold e come determinare quale versione è in uso.

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