Utilizzare un criterio di deployment per limitare i rollout
Questa guida rapida mostra come impedire le implementazioni di Cloud Deploy in una destinazione in un periodo di tempo specificato e come eseguire l'override di tale restrizione.
In questa guida rapida, imparerai a:
Crea una configurazione Skaffold e un manifest Kubernetes o una definizione del servizio Cloud Run per specificare l'immagine del contenitore (predefinita) da eseguire.
Definisci la pipeline di distribuzione Cloud Deploy e un target di deployment che rimandi a un cluster GKE o a un servizio Cloud Run.
Questa pipeline include una sola fase per l'unico target.
Configurare un criterio di deployment per una destinazione.
Il criterio definisce un intervallo di date durante il quale vietare le implementazioni a quel determinato target.
Crea una release.
Di solito, quando crei una release, Cloud Deploy crea un'implementazione per il primo target nell'avanzamento della pipeline di distribuzione. Nel in questo caso, poiché esiste un criterio che impedisce il deployment nella destinazione, per il target non viene creato.
Visualizza i risultati nella console Google Cloud.
Per via di questo criterio, non vedrai un'implementazione per la release nessuna azione in attesa nella visualizzazione della pipeline di distribuzione.
Sostituisci il criterio di deployment.
Questo override comporta la creazione dell'implementazione in Cloud Deploy per il target.
Visualizza i risultati nella console Google Cloud.
Dal momento che il criterio è stato sostituito, puoi notare che è presente un implementazione in corso (o completata, se è trascorso un periodo di tempo sufficiente).
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Assicurati che il valore predefinito
L'account di servizio Compute Engine ha le autorizzazioni sufficienti.
L'account di servizio potrebbe già disporre delle autorizzazioni necessarie. Questi passaggi sono inclusi per i progetti che disattivano la concessione automatica di ruoli per il servizio predefinito .
- Per prima cosa, aggiungi il ruolo
clouddeploy.jobRunner
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner"
- Aggiungi il ruolo
clouddeploy.policyAdmin
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.policyAdmin"
- Aggiungi il ruolo sviluppatore per il tuo runtime specifico.
- Per GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer"
- Per Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer"
-
Aggiungi il ruolo
iam.serviceAccountUser
, che include l'actAs
autorizzazione per eseguire il deployment nel runtime:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
Se hai già installato Google Cloud CLI, assicurati di eseguire all'ultima versione:
gcloud components update
Crea l'ambiente di runtime
Se stai eseguendo il deployment in Cloud Run, puoi saltare questo comando.
Per GKE, crea un cluster: quickstart-cluster-qsprod
.
L'endpoint API Kubernetes del cluster deve essere raggiungibile dalla rete dall'internet pubblico. I cluster GKE sono accessibili esternamente
predefinito.
gcloud container clusters create-auto quickstart-cluster-qsprod \
--project=PROJECT_ID \
--region=us-central1
Prepara la configurazione Skaffold e il manifest dell'applicazione
Cloud Deploy utilizza Skaffold per fornire i dettagli di cosa eseguire il deployment e come target.
In questa guida rapida creerai un file skaffold.yaml
, che identifica
il manifest di Kubernetes da utilizzare per il deployment dell'app di esempio.
Apri una finestra del terminale.
Crea una nuova directory e aprila.
GKE
mkdir deploy-policy-quickstart cd deploy-policy-quickstart
Cloud Run
mkdir deploy-policy-quickstart cd deploy-policy-quickstart
Crea un file denominato
skaffold.yaml
con il seguente contenuto:GKE
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}
Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}
Questo file è una configurazione Skaffold minima. Per questa guida rapida, creerai . Ma puoi anche fai in modo che Cloud Deploy ne crei uno per te, per applicazioni di base non di produzione.
Consulta la documentazione di riferimento di
skaffold.yaml
per ulteriori informazioni su questo file di configurazione.Crea il manifest per la tua applicazione: una definizione di servizio per Cloud Run o un manifest Kubernetes per GKE.
GKE
Crea un file denominato
k8s-pod.yaml
con il seguente contenuto:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-image
Questo file è un ambiente Kubernetes di base manifest, che viene applicato al cluster per eseguire il deployment dell'applicazione.
Cloud Run
Crea un file denominato
service.yaml
con il seguente contenuto:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-deploy-policy-run-service spec: template: spec: containers: - image: my-app-image
Questo file è una definizione di servizio Cloud Run di base, che viene utilizzato al momento del deployment per creare Cloud Run completamente gestito di Google Cloud.
Crea la pipeline di distribuzione e il target
Puoi definire la pipeline di distribuzione e i target in un file o in file . In questa guida rapida creerai un singolo file con entrambi.
Crea la pipeline di distribuzione e la definizione del target:
GKE
Nella directory
deploy-policy-quickstart
, crea un nuovo file:clouddeploy.yaml
, con il seguente contenuto:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
Cloud Run
Nella directory
deploy-policy-quickstart
, crea un nuovo file:clouddeploy.yaml
, con i seguenti contenuti:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production Run service run: location: projects/PROJECT_ID/locations/us-central1
Registra la pipeline e le risorse di destinazione con Cloud Deploy servizio:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
Ora hai una pipeline di distribuzione con un target.
Conferma la pipeline e i target:
Nella console Google Cloud, vai alla pagina Pipeline di distribuzione di Cloud Deploy per visualizzare l'elenco delle pipeline di distribuzione disponibili.
Apri la pagina Pipeline di distribuzione
Viene visualizzata la pipeline di distribuzione appena creata, con un target elencato nella colonna Target.
Crea il criterio di deployment
Puoi definire il criterio di deployment nello stesso file della pipeline di distribuzione o in un file separato. In questa guida rapida, definiamo separatamente.
Nella directory
deploy-policy-quickstart
, crea un nuovo file,deploypolicy.yaml
, con i seguenti contenuti:apiVersion: deploy.cloud.google.com/v1 description: Restrict all rollouts in the deploy-policy-pipeline resource all the time kind: DeployPolicy metadata: name: quickstart-deploy-policy selectors: - deliveryPipeline: id: 'deploy-policy-pipeline' rules: - restrictRollouts: id: no-rollouts timeWindow: timeZone: America/New_York ranges: - startDate: day: 1 month: 1 endDate: month: 12 day: 31
Questo criterio blocca le implementazioni dal 1° gennaio al 31 dicembre.
Registra la risorsa del criterio di deployment con il servizio Cloud Deploy:
gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
Conferma il criterio di deployment:
Nella console Google Cloud, vai a Cloud Deploy Esegui il deployment dei criteri per visualizzare l'elenco dei criteri disponibili.
Apri la pagina Criteri di deployment
Viene mostrato il criterio di deployment che hai appena creato.
Crea una release
Una release è la risorsa centrale di Cloud Deploy che rappresenta delle modifiche implementate. La pipeline di distribuzione definisce il relativo ciclo di vita . Per informazioni dettagliate sul ciclo di vita, consulta la sezione Architettura del servizio Cloud Deploy.
GKE
Esegui il comando seguente dalla directory deploy-policy-quickstart
per creare la release:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
Cloud Run
Esegui questo comando dalla directory deploy-policy-quickstart
per
crea la release:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:6063adf8f687702b4065151acddba6781c47bc602167eb9f3bec8aebc9ce95cc
In circostanze normali, Cloud Deploy crea implementazione nel primo target quando crei la release utilizzando questo comando. In questo caso, poiché le implementazioni sono limitate in base al criterio di implementazione, non viene creata alcuna implementazione. Viene visualizzato un messaggio di errore nella riga di comando:
ERROR: (gcloud.deploy.releases.create) A create-rollout attempt was blocked by the "quickstart-deploy-policy"
policy. Target: "prod-target", Delivery pipeline: "deploy-policy-pipeline", policy rule: "no rollouts"
Esegui l'override della limitazione dei criteri
Per eseguire il deployment dell'applicazione di esempio, che è bloccata dal criterio di deployment,
devono sostituire quel criterio. Per farlo, creerai una nuova implementazione per questo
release, questa volta con l'opzione --override-deploy-policies
inclusa:
GKE
Esegui il comando seguente dalla directory deploy-policy-quickstart
per creare la release:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Cloud Run
Esegui questo comando dalla directory deploy-policy-quickstart
per
crea la release:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Poiché hai incluso --override-deploy-policies=quickstart-deploy-policy
e poiché l'account di servizio predefinito ha il ruolo roles/clouddeploy.policyAdmin
, Cloud Deploy ignora il criterio di deployment che hai creato e esegue l'implementazione in prod-target
.
Visualizza i risultati nella console Google Cloud
Nella console Google Cloud, vai di nuovo a Cloud Deploy Pagina Pipeline di distribuzione per visualizzare la pipeline di distribuzione (
deploy-policy-pipeline
).Fai clic sul nome della pipeline di distribuzione (
deploy-policy-pipeline
).La visualizzazione della pipeline mostra lo stato del deployment dell'app. In questo caso, poiché è stato eseguito l'override del criterio, l'implementazione è stata creata e l'operazione è andata a buon fine.
La tua release sarà elencata nella scheda Uscite della sezione Pipeline di pubblicazione dettagli.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi per le risorse utilizzate in questa pagina, segui questi passaggi.
Elimina il cluster GKE o il servizio Cloud Run:
GKE
gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
Cloud Run
gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_ID
Elimina il criterio di deployment:
gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
Elimina la pipeline di distribuzione, il target, la release e l'implementazione:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Elimina entrambi i bucket Cloud Storage su cui Cloud Deploy è stato creato.
Hai completato questa guida rapida.