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:

  1. Crea una configurazione Skaffold e un manifest Kubernetes o una definizione del servizio Cloud Run per specificare l'immagine del contenitore (predefinita) da eseguire.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. Sostituisci il criterio di deployment.

    Questo override comporta la creazione dell'implementazione in Cloud Deploy per il target.

  7. 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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Se hai già installato Google Cloud CLI, assicurati di eseguire all'ultima versione:

    gcloud components update
    
  13. 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 .

    1. 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"
      
    2. 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"
      
    3. 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"
        

    4. Aggiungi il ruolo iam.serviceAccountUser, che include l'actAsautorizzazione 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
      

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.

  1. Apri una finestra del terminale.

  2. 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
    
  3. 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.

  4. 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.

  1. 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
    
  2. 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.

  3. 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.

    pagina della pipeline di distribuzione nella console Google Cloud, che mostra la pipeline

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.

  1. 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.

  2. Registra la risorsa del criterio di deployment con il servizio Cloud Deploy:

    gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
    
  3. 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.

    pagina dei criteri di deployment nella console Google Cloud

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

  1. Nella console Google Cloud, vai di nuovo a Cloud Deploy Pagina Pipeline di distribuzione per visualizzare la pipeline di distribuzione (deploy-policy-pipeline).

    Apri la pagina Pipeline di distribuzione

  2. 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.

    Visualizzazione della pipeline di distribuzione che mostra l'implementazione

    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.

  1. 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
    
  2. Elimina il criterio di deployment:

    gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
    
  3. 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
    
  4. Elimina entrambi i bucket Cloud Storage su cui Cloud Deploy è stato creato.

    Apri la pagina del browser di Cloud Storage

Hai completato questa guida rapida.

Passaggi successivi