Questa pagina descrive come utilizzare Cloud Deploy per inserire la tua 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 le operazioni necessarie per poter eseguire il deployment dell'applicazione utilizzando Cloud Deploy.
Assicurati che l'account del servizio di esecuzione disponga delle autorizzazioni e dei ruoli IAM necessari.
Crea i target e la pipeline di distribuzione.
Cloud Deploy può eseguire il deployment nei cluster Google Kubernetes Engine, Cloud Run e GKE Enterprise. La configurazione di destinazione varia a seconda dell'oggetto in cui stai eseguendo il deployment.
Avere le immagini container e i manifest.
Sono necessarie una o più immagini container di cui eseguire il deployment e uno o più manifest Kubernetes (per il deployment su GKE) o file YAML di servizio (per il deployment in Cloud Run).
Per creare e posizionare le immagini, hai bisogno di una pipeline di integrazione continua, o di qualche altro processo. Il tuo strumento CI può essere Cloud Build, Jenkins o qualsiasi altro elemento che generi immagini container che puoi fornire alla tua pipeline di distribuzione di 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 unskaffold.yaml
minimo. Puoi ottenerne uno in due modi:Crea il tuo.
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 chiedere a Cloud Deploy di crearne uno. Questo file è adatto per l'onboarding, l'apprendimento o la dimostrazione di Cloud Deploy e non deve essere utilizzato per carichi di lavoro di produzione.
Per ulteriori dettagli, consulta Utilizzo di Skaffold con Cloud Deploy. Inoltre, la gestione dei manifest in Cloud Deploy offre ulteriori dettagli sull'utilizzo di Skaffold e Cloud Deploy con gli strumenti di gestione dei manifest, come Helm, Kustomize e kpt.
Configura Cloud Deploy per l'ambiente di runtime di tua scelta
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 l'applicazione di cui vuoi eseguire il deployment in base alla pipeline di distribuzione che hai creato.
Esegui il regolare processo di integrazione continua (CI), creando l'artefatto o gli artefatti di cui è possibile eseguire il deployment.
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 eventuali sottodirectory, ti consigliamo di non eseguirlo dalla home directory o dalla directory root. Esegui il comando dalla directory contenente la configurazione di Skaffold o includi l'opzione
--source=
, descritta più avanti.In questo comando...
RELEASE_NAME
è un nome da assegnare a questa release. Il nome deve essere univoco tra tutte le release per questa pipeline di distribuzione.Puoi specificare nomi dinamici delle release includendo
'$DATE'
,'$TIME'
o entrambi. Ad esempio, se richiami questo comando alle 15:07 UTC,'rel-$TIME'
viene risolto inrel-1507
.'$DATE'
e'$TIME'
devono essere racchiusi tra virgolette singole e l'ora è l'ora UTC della macchina in cui viene richiamato il comando.PIPELINE_NAME
è il nome della pipeline di distribuzione che gestirà il deployment di questa release tramite l'avanzamento 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. Inoltre, Cloud Deploy crea automaticamente un'implementazione ed esegue il deployment dell'immagine nella prima destinazione definita 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 nomi immagine per sostituzioni di percorsi completi delle immagini.
--build-artifacts=<path/file>
Un riferimento a un file di output degli artefatti di build 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:
--from-k8s-manifest=K8S_MANIFEST
La configurazione di Skaffold generata si basa sul manifest Kubernetes passato questo flag. L'utilizzo di questo flag con il flag
--skaffold-file
o--source
, genera un errore. Per maggiori dettagli, consulta Generazione delskaffold.yaml
.--from-run-manifest=RUN_MANIFEST
La configurazione di Skaffold generata si basa sul servizio YAML del servizio Cloud Run a cui passi questo flag. L'utilizzo di questo flag con il flag
--skaffold-file
o--source
, genera un errore. Per maggiori dettagli, consulta Generazione delskaffold.yaml
.
Queste due opzioni si escludono a vicenda.
Puoi anche includere un file .gcloudignore
se nella directory si trovano 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 per carichi di lavoro di produzione.
La procedura seguente 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 tua pipeline di distribuzione.
Nella pagina Dettagli pipeline di distribuzione, fai clic su Crea release per una pipeline di distribuzione specifica.
Nel campo Scegli un container, incolla o digita il percorso dell'immagine del container di cui vuoi eseguire il deployment. Puoi anche utilizzare per la valutazione il container predefinito precompilato in questo campo.
Puoi anche fare clic su Seleziona per scegliere un'immagine container da Artifact Registry o Container Registry.
Fornisci un nome univoco per questa release nel campo Nome della release oppure 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 per questa release nel campo Descrizione.
In Dettagli 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.
Fai clic su Crea.
Cloud Deploy utilizza il manifest generato o la definizione del servizio Cloud Run e il skaffold.yaml
generato per creare la release.
Modifica 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 eseguite da Cloud Build per Cloud Deploy.
Puoi modificare questo timeout nella configurazione per l'ambiente di esecuzione.
Skaffold ha un timeout per il controllo di integrità (
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, è necessario impostare
deploy.statusCheck
sutrue
. Per impostazione predefinita, è corretto. SestatusCheck
èfalse
, non c'è alcun controllo dello stato e l'implementazione viene contrassegnata come riuscita alkubectl apply
completamento.Per le risorse Kubernetes di
kind: Deployment
, c'èDeployment.spec.progressDeadlineSeconds
, ovvero il tempo in cui Kubernetes attende che il deployment risulti stabile.Questo timeout si applica solo a
Deployment
risorse. Ecco come funzionano insieme questi due primi timeout:Se
Deployment.spec.progressDeadlineSeconds
, in Kubernetes, non è impostato, il timeout del controllo di integrità Skaffold è il timeout effettivo, che si tratti di valore predefinito o di esplicitamente configurato.Se il criterio
Deployment.spec.progressDeadlineSeconds
in Kubernetes è impostato, Skaffold ignora il proprio timeout per il controllo di integrità e la scadenza per l'avanzamento di Kubernetes è il timeout effettivo. Tuttavia, se il timeout di Kubernetes è esplicitamente impostato su600
(10 minuti), Skaffold presuppone che sia il valore predefinito (non impostato) e lo ignora, quindi viene utilizzato il timeout Skaffold (se impostato).Se non è impostato nessuno dei due timeout, il timeout effettivo è il valore predefinito di Skaffold
600
(10 minuti).
Oltre a
Deployment
, altre risorse Kubernetes possono avere timeout, che non influiscono sul timeout della stabilità. Se sono presenti alcuni di questi elementi, esaminali per assicurarti che non siano in conflitto con il timeout di stabilità.In caso di timeout di Skaffold (o Cloud Build), il deployment di GKE continuerà ad essere eseguito. Cloud Deploy mostra un errore, ma può comunque avere esito positivo o negativo sul cluster GKE.
Per modificare il timeout di stabilità del deployment:
Assicurati che
deploy.statusCheck
sia impostato sutrue
inskaffold.yaml
.true
è l'impostazione predefinita. Quandotrue
, Skaffold attende i controlli di integrità per segnalare un deployment stabile, in base al valore di 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 riesce.Se vuoi, puoi aggiungere
tolerateFailuresUntilDeadline: true
dopo il giornostatusCheckDeadlineSeconds
.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 del giorno
statusCheckDeadlineSeconds
. Questa impostazione può essere d'aiuto in situazioni in cui disponi di risorse che potrebbero richiedere più tempo (fino alla scadenza del controllo dello stato) per raggiungere uno stato stabile.Ad esempio, se utilizzi Istio o Anthos Service Mesh, il deployment potrebbe non essere 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.
Nel manifest Kubernetes, per le risorse di
kind: Deployment
, impostaDeployment.spec.progressDeadlineSeconds
sullo stesso valore che hai impostato perstatusCheckDeadlineSeconds
.
Passaggi successivi
Scopri di più sul deployment in GKE
Scopri come eseguire il deployment in Cloud Run
Scopri come eseguire il deployment in GKE Enterprise
Scopri come creare la pipeline di distribuzione e i target
Scopri come promuovere una release