Questa pagina descrive come utilizzare Cloud Deploy per distribuire l'applicazione negli ambienti di runtime di destinazione previsti. Prima di procedere, devi creare la pipeline di importazione e i target.
Prima di iniziare
Questa sezione descrive le risorse che devi avere prima di poter eseguire il deployment dell'applicazione utilizzando Cloud Deploy.
Assicurati che il tuo account di servizio di esecuzione abbia i ruoli e le 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 di destinazione varia in base all'ambiente in cui esegui il deployment.
Avere le immagini container e i manifest.
Sono necessarie una o più immagini container da eseguire e uno o più manifest Kubernetes (per il deployment su GKE) o file YAML di servizio (per il deployment su Cloud Run).
Per creare e posizionare le immagini, hai bisogno di una pipeline di integrazione continua o di un altro processo. Lo strumento CI può essere Cloud Build, Jenkins o qualsiasi altro strumento che genera immagini container che puoi fornire alla pipeline di distribuzione Cloud Deploy.
Disporre di un file di configurazione
skaffold.yaml
.Cloud Deploy chiama
skaffold render
per eseguire il rendering dei manifest Kubernetes utilizzando questo file eskaffold apply
per eseguirne il deployment nella destinazione. Per farlo, Skaffold richiede almeno un valore minimo diskaffold.yaml
. Puoi ottenerne uno in due modi:Creane uno.
Tieni presente che il file
skaffold.yaml
deve fare riferimento al namespace corrispondente a una versione di Skaffold supportata nella prima riga, come in questo esempio:`apiVersion: skaffold/v4beta7`
Lascia che sia generato per te.
Se non hai ancora 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 Utilizzare Skaffold con Cloud Deploy. Inoltre, la pagina 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 tuo runtime, ora puoi inviare l'applicazione da eseguire in base alla pipeline di importazione che hai creato.
Esegui la normale procedura di integrazione continua (CI), creando l'elemento o gli elementi di cui è possibile eseguire il deployment.
Avvia la pipeline di distribuzione chiamando Cloud Deploy per creare una release.
Esegui il seguente 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 di tutti i contenuti della directory e di eventuali sottodirectory, ti consigliamo di non eseguirlo dalla home directory o dalla directory principale. Esegui il comando dalla directory contenente la configurazione di Skaffold o includi l'opzione
--source=
, descritta di seguito.In questo comando…
RELEASE_NAME
è il 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 release dinamiche includendo
'$DATE'
o'$TIME'
o entrambi. Ad esempio, se esegui questo comando alle 15:07 UTC,'rel-$TIME'
si risolve inrel-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 attraverso la progressione dei target. Questo nome deve corrispondere al camponame
nella definizione della pipeline.REGION
è il nome della regione in cui stai creando la release, ad esempious-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 esegue il deployment dell'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 elementi di build di Skaffold, che può essere passato per rappresentare le sostituzioni dei percorsi completi delle immagini.
Queste due opzioni si escludono a vicenda.
Puoi anche includere uno dei seguenti flag per consentire a Cloud Deploy di generare un file skaffold.yaml
per te:
--from-k8s-manifest=K8S_MANIFEST
La configurazione di Skaffold generata si basa sul manifest Kubernetes a cui passi questo flag. L'utilizzo di questo flag con il flag
--skaffold-file
o con il--source
genera un errore. Per ulteriori dettagli, consulta Generare il tuoskaffold.yaml
.--from-run-manifest=RUN_MANIFEST
La configurazione Skaffold generata si basa sul file YAML del servizio Cloud Run a cui passi questo flag. L'utilizzo di questo flag con il
--skaffold-file
o con il flag--source
genera un errore. Per ulteriori dettagli, consulta Genera il tuoskaffold.yaml
.
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.
Creare una release dalla console Google Cloud
Puoi utilizzare la console Google Cloud per creare una release per una pipeline di importazione. Questo è utile per provare Cloud Deploy, ma non è adatto per i workload di produzione.
La procedura riportata di seguito presuppone che tu abbia già creato una pipeline di distribuzione e uno o più target. Puoi anche utilizzare la console Google Cloud per creare la pipeline di importazione.
Nella pagina Dettagli pipeline di distribuzione, fai clic su Crea uscita per una pipeline di distribuzione specifica.
Nel campo Scegli un contenitore, incolla o digita il percorso dell'immagine del contenitore di cui vuoi eseguire il deployment. Per la valutazione, puoi anche utilizzare il contenitore predefinito precompilato in questo campo.
Puoi anche fare clic su Seleziona per scegliere un'immagine container da Artifact Registry o Container Registry.
Specifica un nome univoco per questa release nel campo Nome release o utilizza il nome predefinito fornito.
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 all'implementazione nella finestra di dialogo Promuovi o nel comando
gcloud deploy releases promote
.Se vuoi, includi una descrizione di questa release nel campo Descrizione.
In Dettagli di deployment, inserisci un nome per il deployment GKE o per 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.
Fai clic su Crea.
Cloud Deploy utilizza il manifest o la definizione del servizio Cloud Run generati 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 distinti che influiscono sul tempo di attesa del sistema per il report di un deployment stabile da parte di Kubernetes:
Cloud Build ha un timeout di 1 ora per le operazioni eseguite per Cloud Deploy.
Puoi modificare questo timeout nella configurazione dell'ambiente di esecuzione.
Skaffold ha un timeout del controllo di stato (
deploy.statusCheckDeadlineSeconds
), ovvero il tempo in secondi di attesa per la stabilizzazione dei deployment.Il valore predefinito è 600 secondi (10 minuti). Per utilizzare questo timeout,
deploy.statusCheck
deve essere impostato sutrue
. Per impostazione predefinita, è così. SestatusCheck
èfalse
, non viene eseguito alcun controllo dello stato e l'implementazione viene contrassegnata come riuscita al termine dikubectl apply
.Per le risorse Kubernetes di
kind: Deployment
, è presenteDeployment.spec.progressDeadlineSeconds
, ovvero il tempo che Kubernetes attende prima che il deployment venga segnalato come stabile.Questo timeout si applica solo alle risorse
Deployment
. Ecco come interagiscono i primi due timeout:Se
Deployment.spec.progressDeadlineSeconds
, in Kubernetes, non è impostato, il tempo di attesa del controllo di integrità di Skaffold è il tempo di attesa effettivo, che sia predefinito o impostato esplicitamente.Se in Kubernetes è impostato
Deployment.spec.progressDeadlineSeconds
, Skaffold ignora il proprio timeout del controllo di integrità e la scadenza del progresso di Kubernetes è il timeout effettivo. Tuttavia, se il timeout di Kubernetes è impostato esplicitamente su600
(10 minuti), Skaffold presume che sia il valore predefinito (non impostato) e lo ignora, quindi viene utilizzato il timeout di Skaffold (se impostato).Se non viene impostato alcun timeout, il timeout effettivo è quello predefinito di Skaffold
600
(10 minuti).
Oltre ai
Deployment
, altre risorse Kubernetes possono avere timeout, che non influiscono sul timeout di stabilità. Se sono presenti, esaminali per assicurarti che non siano in conflitto con il timeout di stabilità.Se Skaffold (o Cloud Build) scade, il deployment GKE continua a essere eseguito. Cloud Deploy mostra un errore, ma può comunque riuscire o non riuscire nel cluster GKE.
Per modificare il timeout di stabilità del deployment:
Assicurati che
deploy.statusCheck
sia impostato sutrue
inskaffold.yaml
.true
è il valore predefinito. Quandotrue
, Skaffold attende che i controlli di integrità registrino un deployment stabile, in base al valore del timeout nel passaggio successivo.In
skaffold.yaml
, impostastatusCheckDeadlineSeconds
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.Se vuoi, puoi aggiungere
tolerateFailuresUntilDeadline: true
dopostatusCheckDeadlineSeconds
.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 le risorse 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 al seguente:
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.
Nel manifest Kubernetes, per le risorse di
kind: Deployment
, impostaDeployment.spec.progressDeadlineSeconds
sullo stesso valore impostato perstatusCheckDeadlineSeconds
.
Passaggi successivi
Scopri di più sul deployment in GKE
Scopri di più sul deployment in Cloud Run
Scopri di più sul deployment in GKE Enterprise
Scopri come creare la pipeline di distribuzione e i target
Scopri come promuovere una release