Use uma política de implementação para restringir implementações

Este início rápido mostra como impedir implementações do Cloud Deploy num destino durante um período especificado e como substituir essa restrição.

Neste início rápido, vai fazer o seguinte:

  1. Crie uma configuração do Skaffold e um manifesto do Kubernetes ou uma definição do serviço do Cloud Run para especificar a imagem do contentor (pré-criada) a implementar.

  2. Defina o pipeline de entrega do Cloud Deploy e um destino de implementação, que aponta para um cluster do GKE ou um serviço do Cloud Run.

    Este pipeline inclui apenas uma fase para o único objetivo.

  3. Configure uma política de implementação para um alvo.

    A política define um intervalo de datas durante o qual as implementações para esse destino são proibidas.

  4. Crie um lançamento.

    Normalmente, quando cria um lançamento, o Cloud Deploy cria uma implementação para o primeiro destino na progressão do pipeline de entrega. Neste caso, como existe uma política que impede a implementação no destino, a implementação para esse destino não é criada.

  5. Veja os resultados na Google Cloud consola.

    Devido à política, não vai ver uma implementação para o lançamento e não existe nenhuma ação pendente na visualização do pipeline de entrega.

  6. Substituir a política de implementação.

    Esta substituição faz com que o Cloud Deploy crie agora a implementação para o destino.

  7. Veja os resultados na Google Cloud consola.

    Uma vez que a política foi substituída, pode ver que existe uma implementação em curso (ou concluída, se tiver passado tempo suficiente).

Antes de começar

  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. Verify 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. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

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

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Se já tiver a CLI Google Cloud instalada, certifique-se de que está a executar a versão mais recente:

    gcloud components update
    
  15. Certifique-se de que a conta de serviço predefinida do Compute Engine tem autorizações suficientes.

    A conta de serviço pode já ter as autorizações necessárias. Estes passos são incluídos para projetos que desativam as concessões de funções automáticas para contas de serviço predefinidas.

    1. Primeiro, adicione a função 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. Adicione a função de programador para o seu tempo de execução específico.
      • Para o 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"
        

      • Para o 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"
        

    3. Adicione a função iam.serviceAccountUser, que inclui a autorização actAspara implementar no tempo de execução:
      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
      

    Crie o seu ambiente de tempo de execução

    Se estiver a implementar no Cloud Run, pode ignorar este comando.

    Para o GKE, crie um cluster: quickstart-cluster-qsprod. O ponto final da API Kubernetes do cluster tem de ser acessível através da rede a partir da Internet pública. Os clusters do GKE são acessíveis externamente por predefinição.

    gcloud container clusters create-auto quickstart-cluster-qsprod \
                     --project=PROJECT_ID \
                     --region=us-central1
    

    Prepare a configuração do Skaffold e o manifesto da aplicação

    O Cloud Deploy usa o Skaffold para fornecer os detalhes sobre o que implementar e como o implementar no seu destino.

    Neste início rápido, cria um ficheiro skaffold.yaml que identifica o manifesto do Kubernetes a usar para implementar a app de exemplo.

    1. Abra uma janela de terminal.

    2. Crie um novo diretório e navegue para o mesmo.

      mkdir deploy-policy-quickstart
      cd deploy-policy-quickstart
      
    3. Crie um ficheiro denominado skaffold.yaml com o seguinte conteúdo:

      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: {}
      

      Este ficheiro é uma configuração mínima do Skaffold. Para este início rápido, cria o ficheiro No entanto, também pode pedir ao Cloud Deploy que crie um para si para aplicações básicas que não sejam de produção.

      Consulte a referência skaffold.yaml para mais informações acerca deste ficheiro de configuração.

    4. Crie o manifesto para a sua aplicação, uma definição de serviço para o Cloud Run ou um manifesto do Kubernetes para o GKE.

      GKE

      Crie um ficheiro denominado k8s-pod.yaml com o seguinte conteúdo:

      apiVersion: v1
      kind: Pod
      metadata:
        name: getting-started
      spec:
        containers:
        - name: nginx
          image: my-app-image
      

      Este ficheiro é um manifesto básico do Kubernetes, que é aplicado ao cluster para implementar a aplicação. A imagem do contentor a implementar é definida aqui como um marcador de posição, my-app-image, que é substituído pela imagem específica quando cria a versão.

      Cloud Run

      Crie um ficheiro denominado service.yaml com o seguinte conteúdo:

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: my-deploy-policy-run-service
      spec:
        template:
          spec:
            containers:
            - image: my-app-image
      

      Este ficheiro é uma definição básica do serviço do Cloud Run, que é usada para implementar a aplicação. A imagem do contentor a implementar é definida aqui como um marcador de posição, my-app-image, que é substituído pela imagem específica quando cria a versão.

    Crie o seu pipeline de entrega e segmentação

    Pode definir o pipeline de entrega e os alvos num ficheiro ou em ficheiros separados. Neste início rápido, cria um único ficheiro com ambos.

    1. Crie o pipeline de fornecimento e a definição do alvo:

      GKE

      No diretório deploy-policy-quickstart, crie um novo ficheiro: clouddeploy.yaml, com o seguinte conteúdo:

      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

      No diretório deploy-policy-quickstart, crie um novo ficheiro: clouddeploy.yaml, com o seguinte conteúdo:

      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. Registe o seu pipeline e recursos de destino com o serviço Cloud Deploy:

      gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
      

      Agora, tem um pipeline de entrega com um alvo.

    3. Confirme o seu pipeline e alvos:

      Na Google Cloud consola, navegue para a página Cloud Deploy Pipelines de entrega para ver uma lista dos pipelines de entrega disponíveis.

      Abra a página Pipelines de fornecimento

      É apresentada a pipeline de fornecimento que acabou de criar, com um alvo apresentado na coluna Alvos.

      Página do pipeline de entrega na consola Google Cloud , que mostra o seu pipeline

    Crie a sua política de implementação

    Pode definir a política de implementação no mesmo ficheiro que o pipeline de entrega e os destinos, ou pode defini-la num ficheiro separado. Para este início rápido, definimos o elemento separadamente.

    1. No mesmo diretório em que criou o pipeline de envio e os destinos, crie um novo ficheiro, deploypolicy.yaml, com o seguinte conteúdo:

      apiVersion: deploy.cloud.google.com/v1
      description: Restrict all rollouts in the deploy-policy-pipeline resource for the next ten years
      kind: DeployPolicy
      metadata:
        name: quickstart-deploy-policy
      selectors:
      - deliveryPipeline:
          id: 'deploy-policy-pipeline'
      rules:
      - rolloutRestriction:
          id: no-rollouts
          timeWindows:
            timeZone: America/New_York
            oneTimeWindows:
            - start: 2024-01-01 00:00
              end: 2034-01-01 24:00
      

      Esta política bloqueia implementações durante 10 anos, a partir de 1 de janeiro de 2024. Esta não é uma política realista. É feita desta forma apenas para este início rápido, para garantir que a política está em vigor quando criar o seu lançamento.

    2. Registe o recurso da política de implementação no serviço Cloud Deploy:

      gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
      
    3. Confirme a sua política de implementação:

      Na Google Cloud consola, navegue para a página do Cloud Deploy Implementar políticas para ver uma lista das suas políticas disponíveis.

      Abra a página Implementar políticas

      É apresentada a política de implementação que acabou de criar.

      página de implementação de políticas na consola Google Cloud

    Crie um lançamento

    Um lançamento é o recurso central do Cloud Deploy que representa as alterações que estão a ser implementadas. O pipeline de fornecimento define o ciclo de vida dessa versão. Consulte a secção Arquitetura do serviço Cloud Deploy para ver detalhes sobre esse ciclo de vida.

    GKE

    Execute o seguinte comando a partir do diretório deploy-policy-quickstart para criar a versão:

     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
    

    Repare na flag --images=, que usa para substituir o marcador de posição (my-app-image) no manifesto ou na definição do serviço pela imagem específica qualificada por SHA. A Google recomenda que crie modelos dos seus manifestos desta forma e que use nomes de imagens qualificados com SHA na criação da versão.

    Cloud Run

    Execute o seguinte comando a partir do diretório deploy-policy-quickstart para criar a versão:

     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:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
    

    Repare na flag --images=, que usa para substituir o marcador de posição (my-app-image) no manifesto ou na definição do serviço pela imagem específica qualificada por SHA. A Google recomenda que crie modelos dos seus manifestos desta forma e que use nomes de imagens qualificados com SHA na criação da versão.

    Em circunstâncias normais, o Cloud Deploy cria a implementação no primeiro destino quando cria o lançamento através deste comando. Neste caso, uma vez que as implementações estão restritas de acordo com a política de implementação, não é criada nenhuma implementação. É apresentada uma mensagem de erro na linha de comandos:

    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"

    Substitua a restrição da política

    Para implementar a aplicação de exemplo, que está bloqueada pela política de implementação, tem de substituir essa política. Para tal, crie uma nova implementação em relação a esta versão, desta vez incluindo a opção --override-deploy-policies:

    GKE

    Execute o seguinte comando a partir do diretório deploy-policy-quickstart para criar a versão:

     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

    Execute o seguinte comando a partir do diretório deploy-policy-quickstart para criar a versão:

     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
    

    Uma vez que incluiu --override-deploy-policies=quickstart-deploy-policy e tem a função roles/clouddeploy.policyAdmin, o Cloud Deploy ignora a política de implementação que criou e cria a implementação gradual para prod-target.

    Veja os resultados na Google Cloud consola

    1. Na Google Cloud consola, navegue novamente para a página Cloud Deploy Pipelines de fornecimento para ver o seu pipeline de fornecimento (deploy-policy-pipeline).

      Abra a página Pipelines de fornecimento

    2. Clique no nome do pipeline de fornecimento (deploy-policy-pipeline).

      A visualização do pipeline mostra o estado de implementação da app. Neste caso, como a política foi substituída, a implementação foi criada e bem-sucedida.

      Visualização do pipeline de entrega que mostra a implementação

      O lançamento é apresentado no separador Lançamentos em Detalhes do pipeline de envio.

    Limpar

    Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.

    1. Elimine o cluster do GKE ou o serviço do 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. Elimine a política de implementação:

      gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
      
    3. Elimine o pipeline de envio, o destino, o lançamento e a implementação:

      gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
      
    4. Elimine ambos os contentores do Cloud Storage criados pelo Cloud Deploy.

      Abra a página do navegador do Cloud Storage

    É tudo. Concluiu este início rápido!

    O que se segue?