Esegui il deployment dell'applicazione

Questa pagina descrive come utilizzare Cloud Deploy per distribuire l'applicazione negli ambienti di runtime di destinazione previsti. Prima di farlo, devi creare la pipeline di distribuzione e i target.

Prima di iniziare

Questa sezione descrive gli elementi che devi avere a disposizione prima di poter eseguire il deployment dell'applicazione utilizzando Cloud Deploy.

  • Assicurati che il tuo service account di esecuzione disponga dei ruoli e delle autorizzazioni IAM necessari.

  • Crea la pipeline di distribuzione e i target.

    Cloud Deploy può eseguire il deployment in cluster Google Kubernetes Engine, Cloud Run e GKE Enterprise. La configurazione della destinazione varia a seconda della destinazione del deployment.

  • Avere le immagini container e i manifest.

    Hai bisogno di una o più immagini container da eseguire il deployment e di uno o più manifest Kubernetes (per il deployment su GKE) o file YAML del servizio (per il deployment su Cloud Run).

    Per creare e inserire le immagini, devi disporre di una pipeline di integrazione continua o di un altro processo. Il tuo strumento CI può essere Cloud Build, Jenkins o qualsiasi altro strumento che generi immagini container che puoi fornire alla pipeline di distribuzione di Cloud Deploy.

  • Avere un file di configurazione skaffold.yaml.

    Cloud Deploy chiama skaffold render per eseguire il rendering dei manifest Kubernetes utilizzando questo file e skaffold apply per eseguirne il deployment nel target. Per farlo, Skaffold richiede almeno un skaffold.yaml minimo. Puoi ottenerlo in due modi:

    • Creane uno.

      Tieni presente che il file skaffold.yaml deve fare riferimento allo spazio dei nomi corrispondente a una versione di Skaffold supportata nella prima riga, come in questo esempio:

      `apiVersion: skaffold/v4beta7`
      
    • Fallo generare per te.

      Se non hai già un file skaffold.yaml, puoi chiedere a Cloud Deploy di crearne uno per te. Questo file è adatto per l'onboarding, l'apprendimento o la dimostrazione di Cloud Deploy e non deve essere utilizzato per i carichi di lavoro di produzione.

    Per ulteriori dettagli, consulta la sezione Utilizzo di Skaffold con Cloud Deploy. Inoltre, la sezione Gestione dei manifest in Cloud Deploy fornisce ulteriori dettagli sull'utilizzo di Skaffold e Cloud Deploy con strumenti di gestione dei manifest, come Helm, Kustomize e kpt.

Configura Cloud Deploy per l'ambiente di runtime che preferisci

Cloud Deploy può eseguire il deployment della tua applicazione in uno dei seguenti ambienti di runtime:

Richiama la pipeline di distribuzione per creare una release

Dopo aver configurato Cloud Deploy per il deployment nel runtime, puoi inviare la tua applicazione per il deployment in base alla pipeline di distribuzione che hai creato.

  1. Esegui il normale processo di integrazione continua (CI), creando l'artefatto o gli artefatti distribuibili.

  2. Avvia la pipeline di distribuzione chiamando Cloud Deploy per creare una release.

    Esegui questo comando dalla directory contenente la configurazione di Skaffold:

    gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --region=REGION
    

    Poiché questo comando crea un file tar dell'intero contenuto della directory e di tutte le sottodirectory, ti consigliamo di non eseguirlo dalla directory home o principale. Esegui il comando dalla directory contenente la configurazione di Skaffold o includi l'opzione --source=, descritta in seguito.

    In questo comando…

    RELEASE_NAME è un nome da assegnare a questa release. Il nome deve essere univoco tra tutte le release di questa pipeline di distribuzione.

    Puoi specificare i nomi delle uscite dinamiche includendo '$DATE' o '$TIME' o entrambi. Ad esempio, se invochi questo comando alle 15:07 UTC, 'rel-$TIME' viene risolto in rel-1507. '$DATE' e '$TIME' devono essere tra virgolette singole e l'ora è l'ora UTC della macchina in cui richiami il comando.

    PIPELINE_NAME è il nome della pipeline di distribuzione che gestirà il deployment di questa release durante la progressione dei target. Questo nome deve corrispondere al campo name nella definizione della pipeline.

    REGION è il nome della regione in cui stai creando la release, ad esempio us-central1. Campo obbligatorio.

Questo comando carica un file tar contenente le configurazioni in un bucket Cloud Storage e crea la release. Cloud Deploy crea anche automaticamente un rollout e implementa l'immagine nel primo target definito nella pipeline di distribuzione.

Oltre ai parametri mostrati con questo comando, puoi includere una delle seguenti opzioni:

  • --images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>

    Una raccolta di sostituzioni del nome dell'immagine con il percorso completo dell'immagine.

  • --build-artifacts=<path/file>

    Un riferimento a un file di output degli artefatti di build di Skaffold, che può essere passato per rappresentare le sostituzioni del percorso completo dell'immagine.

Queste due opzioni si escludono a vicenda.

Puoi anche includere uno dei seguenti flag per fare in modo che Cloud Deploy generi un file skaffold.yaml per te:

Queste due opzioni si escludono a vicenda.

Puoi anche includere un file .gcloudignore se nella directory sono presenti file che non vuoi includere nel file tar.

Crea una release dalla console Google Cloud

Puoi utilizzare la console Google Cloud per creare una release per una pipeline di distribuzione. Questo è utile per provare Cloud Deploy, ma non è adatto ai workload di produzione.

La procedura seguente presuppone che tu abbia già creato una pipeline di distribuzione e una o più destinazioni. Puoi anche utilizzare la console Google Cloud per creare la pipeline di distribuzione.)

  1. Nella pagina Dettagli pipeline di distribuzione, fai clic su Crea release per una pipeline di distribuzione specifica.

    Dettagli della pipeline di distribuzione, che mostrano il pulsante Crea release

  2. Nel campo Scegli un contenitore, incolla o digita il percorso dell'immagine del contenitore di cui vuoi eseguire il deployment. Puoi anche utilizzare il container precompilato predefinito in questo campo per la valutazione.

    Puoi anche fare clic su Seleziona per scegliere un'immagine container da Artifact Registry.

  3. Fornisci un nome univoco per questa release nel campo Nome release o utilizza il nome predefinito fornito.

  4. Fornisci un nome per l'implementazione nel campo Nome implementazione oppure utilizza il nome predefinito fornito.

    Questo nome viene utilizzato per l'implementazione nella prima destinazione per questa release. Per i target successivi, puoi assegnare un nome al lancio nella finestra di dialogo Promuovi o nel comando gcloud deploy releases promote.

  5. (Facoltativo) Includi una descrizione per questa release nel campo Descrizione.

  6. In Dettagli del deployment, inserisci un nome per il deployment GKE o il servizio Cloud Run oppure utilizza il nome predefinito fornito.

    Per GKE, Cloud Deploy genera il manifest per te. Per Cloud Run, Cloud Deploy genera la definizione del servizio, che viene utilizzata per creare il servizio.

  7. Fai clic su Crea.

    Finestra di dialogo Crea release

Cloud Deploy utilizza il manifest generato o la definizione del servizio Cloud Run e il file skaffold.yaml generato per creare la release.

Modificare il timeout del deployment

Per i deployment nei cluster di destinazione GKE e GKE Enterprise, esistono tre timeout separati che influiscono sul tempo di attesa del sistema prima che Kubernetes segnali un deployment stabile:

  • Cloud Build ha un timeout di 1 ora per le operazioni che Cloud Build esegue per Cloud Deploy.

    Puoi modificare questo timeout nella configurazione dell'ambiente di esecuzione.

  • Skaffold ha un timeout del controllo di integrità (deploy.statusCheckDeadlineSeconds), ovvero il tempo, in secondi, da attendere prima che i deployment si stabilizzino.

    Il valore predefinito è 600 secondi (10 minuti). Per utilizzare questo timeout, deploy.statusCheck deve essere impostato su true. Per impostazione predefinita, è così. Se statusCheck è false, non viene eseguito alcun controllo dello stato e l'implementazione viene contrassegnata come riuscita al termine di kubectl apply.

  • Per le risorse Kubernetes di kind: Deployment, esiste Deployment.spec.progressDeadlineSeconds, che è il tempo che Kubernetes attende prima che il deployment venga segnalato come stabile.

    Questo timeout è applicabile solo alle risorse Deployment. Ecco come funzionano i primi due timeout:

    • Se Deployment.spec.progressDeadlineSeconds in Kubernetes non è impostato, il timeout del controllo di integrità di Skaffold è il timeout effettivo, che sia quello predefinito o impostato in modo esplicito.

    • Se Deployment.spec.progressDeadlineSeconds in Kubernetes è impostato, Skaffold ignora il proprio timeout del controllo di integrità e il timeout effettivo è la scadenza di avanzamento di Kubernetes. Tuttavia, se il timeout di Kubernetes è impostato esplicitamente su 600 (10 minuti), Skaffold presuppone che sia il valore predefinito (non impostato) e lo ignora, e viene utilizzato il timeout di Skaffold (se impostato).

    • Se non viene impostato alcun timeout, il timeout effettivo è quello predefinito di Skaffold pari a 600 (10 minuti).

    Oltre ai Deployment, altre risorse Kubernetes possono avere timeout che non influiscono sul timeout di stabilità. Se sono presenti, rivedili per assicurarti che non siano in conflitto con il timeout di stabilità.

    Se Skaffold (o Cloud Build) va in timeout, il deployment GKE continua a essere eseguito. Cloud Deploy mostra un errore, ma l'operazione può comunque riuscire o non riuscire sul cluster GKE.

Per modificare il timeout di stabilità del deployment:

  1. Assicurati che deploy.statusCheck sia impostato su true in skaffold.yaml.

    true è il valore predefinito. Quando true, Skaffold attende che i controlli di integrità segnalino un deployment stabile, in base al valore di timeout nel passaggio successivo.

  2. In skaffold.yaml, imposta statusCheckDeadlineSeconds sul numero di secondi che vuoi attendere.

    deploy:
      ...
      statusCheck: true
      statusCheckDeadlineSeconds: 600
      ...
    

    Il valore predefinito è 600 (10 minuti). Skaffold attende questo periodo di tempo per un deployment stabile. Se questo tempo viene superato prima che il deployment sia stabile, il deployment non va a buon fine.

  3. Se vuoi, puoi aggiungere tolerateFailuresUntilDeadline: true dopo statusCheckDeadlineSeconds.

    Questa impostazione indica a Skaffold di non uscire se un singolo deployment non va a buon fine, ma di tollerare gli errori fino alla scadenza di statusCheckDeadlineSeconds. Questa impostazione può essere utile in situazioni in cui hai risorse che potrebbero richiedere più tempo (fino alla scadenza del controllo dello stato) per raggiungere uno stato stabile.

    Ad esempio, se utilizzi Istio o Cloud Service Mesh, potresti avere un deployment non riuscito con un messaggio simile a questo:

    error iptables validation failed; workload is not ready for Istio.
    When using Istio CNI, this can occur if a pod is scheduled before the node is ready.
    
  4. Nel manifest Kubernetes, per le risorse di kind: Deployment, imposta Deployment.spec.progressDeadlineSeconds sullo stesso valore impostato per statusCheckDeadlineSeconds.

Passaggi successivi