Esegui il deployment dell'applicazione

Questa pagina descrive come utilizzare Cloud Deploy per ottenere la tua applicazione negli ambienti di runtime di destinazione previsti. Prima di farlo, devi crea la pipeline di distribuzione e i target.

Prima di iniziare

Questa sezione descrive cosa devi disporre prima di poter il deployment della tua applicazione con Cloud Deploy.

  • Assicurati che il tuo account di servizio di esecuzione dispone dei ruoli e le autorizzazioni IAM necessari.

  • Crea la pipeline di distribuzione e i target.

    Cloud Deploy può eseguire il deployment su Google Kubernetes Engine, Cloud Run e GKE Enterprise. La configurazione di destinazione è diversa a seconda di quale di queste esegui il deployment.

  • Prepara le immagini container e i manifest.

    Ti servono una o più immagini container di cui eseguire il deployment e una o più immagini Kubernetes (per il deployment su GKE) o i file YAML del servizio (per il deployment in Cloud Run).

    Hai bisogno di una pipeline di integrazione continua o di un altro processo per creare e posizionare le immagini. Il tuo strumento CI può essere Cloud Build, Jenkins o qualsiasi altro strumento che produca immagini container che puoi fornire alla tua pipeline di distribuzione di Cloud Deploy.

  • Avere un file di configurazione skaffold.yaml.

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

    • Creane una personalizzata.

      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`
      
    • Fai in modo che venga generato per te.

      Se non hai ancora un file skaffold.yaml, puoi fai in modo che Cloud Deploy ne crei uno per te. Questo file è adatto per l'onboarding, l'apprendimento o la dimostrazione Cloud Deploy e non deve essere utilizzato per carichi di lavoro di produzione.

    Consulta Utilizzo di Skaffold con Cloud Deploy per ulteriori dettagli. Inoltre, vedi Gestire i manifest in Cloud Deploy ha maggiori dettagli sull'utilizzo di Skaffold e Cloud Deploy con 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, ora può inviare la tua applicazione di cui eseguire il deployment in base la pipeline che hai creato.

  1. Esegui il regolare processo di integrazione continua (CI), creando l'elemento di cui è possibile o artefatti.

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

    Esegui il comando seguente 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 di tutti i contenuti ed eventuali sottodirectory, potresti non voler eseguire il comando dalla home page o dalla directory principale. Esegui il comando dalla directory contenente la configurazione Skaffold o includere l'opzione --source=, descritta in un secondo momento.

    In questo comando...

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

    Puoi specificare i nomi delle release dinamici includendo '$DATE' o '$TIME' oppure entrambi. Ad esempio, se richiami questo comando alle 15:07 UTC, 'rel-$TIME' restituisce rel-1507. '$DATE' e '$TIME' devono essere racchiusi tra virgolette singole e l'ora è l'ora UTC sulla macchina in cui richiami il comando.

    PIPELINE_NAME è il nome della pipeline di distribuzione che gestirà il deployment di questa release attraverso l'avanzamento target. Questo nome deve corrispondere al campo name nella definizione della pipeline.

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

Questo comando carica un file tar contenente le tue configurazioni in un Cloud Storage bucket e crea la release. Cloud Deploy offre inoltre crea un'implementazione ed esegue il deployment dell'immagine nel primo target definito di distribuzione dei container.

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 nomi delle immagini alle sostituzioni del percorso completo.

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

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

Queste due opzioni si escludono a vicenda.

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

Queste due opzioni si escludono a vicenda.

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

Crea una release dalla console Google Cloud

Puoi usare la console Google Cloud per creare una release per una distribuzione una pipeline o un blocco note personalizzato. È utile per provare Cloud Deploy, ma non è adatto ai carichi di lavoro di produzione.

La procedura seguente presuppone che tu abbia già creato una pipeline di distribuzione uno o più target. (puoi anche utilizzare la console Google Cloud) crea la tua pipeline di distribuzione.)

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

    dettagli della pipeline di distribuzione, che mostra il pulsante Crea release

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

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

  3. Fornisci un nome univoco per questa release nel campo Nome release oppure usa il nome predefinito fornito.

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

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

  5. Se vuoi, includi una descrizione per questa release nella Descrizione .

  6. In Dettagli deployment, inserisci un nome per il tuo cluster GKE deployment o servizio Cloud Run oppure usa il nome predefinito fornito.

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

  7. Fai clic su Crea.

    La finestra di dialogo per la creazione della release

Cloud Deploy utilizza il manifest generato la definizione del servizio Cloud Run e l'oggetto skaffold.yaml generato, per creare la release.

Modifica il timeout del deployment

Per i deployment nel target GKE e GKE Enterprise ci sono tre timeout separati che influenzano il tempo di esecuzione attende che Kubernetes segnali un deployment stabile:

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

    Puoi modificare questo timeout nella per l'ambiente di esecuzione.

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

    Il valore predefinito è 600 secondi (10 minuti). Per usare questo timeout, deploy.statusCheck deve essere impostato su true. Per impostazione predefinita, lo è. Se statusCheck è false, esiste non è un controllo dello stato, l'implementazione è contrassegnata come riuscita dopo il giorno kubectl apply termina correttamente.

  • Per le risorse Kubernetes di kind: Deployment, Deployment.spec.progressDeadlineSeconds, ovvero il tempo di attesa da parte di Kubernetes affinché il deployment segnali come stabile.

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

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

    • Se Deployment.spec.progressDeadlineSeconds in Kubernetes è impostato, Skaffold ignora il proprio timeout per il controllo di integrità e i progressi di Kubernetes è il timeout effettivo. Tuttavia, se il timeout di Kubernetes impostato esplicitamente su 600 (10 minuti), Skaffold presume che si tratti default (non impostato) e lo ignora; viene utilizzato il timeout Skaffold (se impostato).

    • Se non viene impostato alcun timeout, il timeout effettivo è lo Skaffold il valore predefinito è 600 (10 minuti).

    Oltre a Deployment, altre risorse Kubernetes possono avere timeout, che non influenzano il timeout della stabilità. Se una di queste opzioni è presente, controlla per assicurarsi di non essere in conflitto con il timeout della stabilità.

    In caso di timeout di Skaffold (o Cloud Build), GKE che il deployment continua a essere eseguito. Cloud Deploy mostra un errore, può comunque avere esito positivo o negativo sul cluster GKE.

Per modificare il timeout della stabilità del deployment:

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

    true è l'impostazione predefinita. Quando true, Skaffold attende i controlli di integrità per segnalerà un deployment stabile, soggetto al valore di timeout nel passaggio successivo.

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

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

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

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

    Questa impostazione indica a Skaffold di non uscire in caso di errore di un singolo deployment, ma sono tollerati errori fino alla scadenza di statusCheckDeadlineSeconds. Questa impostazione può essere d'aiuto quando disponi di risorse che necessitano di 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.
    

    L'impostazione funziona solo con Skaffold 2.0 o versioni successive.

  4. Nel manifest Kubernetes, per le risorse di kind: Deployment, imposta Deployment.spec.progressDeadlineSeconds sullo stesso valore impostato per statusCheckDeadlineSeconds.

Passaggi successivi