Implemente uma app em vários destinos em simultâneo

Esta página mostra como usar o Cloud Deploy para implementar uma aplicação de exemplo em dois destinos em simultâneo, ou seja, uma implementação paralela.

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

  1. Crie dois clusters do GKE ou dois serviços do Cloud Run.

    Também pode implementar em paralelo com clusters do GKE Enterprise, mas este início rápido usa apenas o GKE e o Cloud Run.

  2. Crie uma configuração do Skaffold e um manifesto do Kubernetes ou uma definição de serviço do Cloud Run.

  3. Defina o pipeline de entrega e os destinos de implementação do Cloud Deploy.

    Este pipeline terá apenas um alvo, mas esse alvo será um alvo múltiplo, ou seja, um alvo que representa mais do que um alvo de implementação. Este alvo múltiplo vai abranger dois alvos reais, fornecendo a sua app aos dois clusters ou serviços.

  4. Instancie o pipeline de fornecimento criando uma versão que é implementada automaticamente nos dois destinos em paralelo.

  5. Veja a "implementação do controlador" e as implementações secundárias na Google Cloud consola.

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, Cloud Run, 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, Cloud Run, 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 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 os seus ambientes de tempo de execução

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

    Para o GKE, crie dois clusters: quickstart-cluster-qsprod1 e quickstart-cluster-qsprod2, com as predefinições. Os pontos finais da API Kubernetes dos clusters têm de ser acessíveis 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-qsprod1 \
                     --project=PROJECT_ID \
                     --region=us-central1 \
                     && gcloud container clusters create-auto quickstart-cluster-qsprod2 \
                     --project=PROJECT_ID \
                     --region=us-west1
    

    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 corretamente para os seus alvos separados.

    Neste início rápido, cria um ficheiro skaffold.yaml que identifica o manifesto da aplicação 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.

      GKE

      mkdir deploy-gke-parallel-quickstart
      cd deploy-gke-parallel-quickstart
      

      Cloud Run

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

      GKE

      apiVersion: skaffold/v4beta1
      kind: Config
      manifests:
        rawYaml:
        - k8s-deployment.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 simples que não sejam de produção.

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

    4. Crie a definição 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-deployment.yaml com o seguinte conteúdo:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: my-deployment
        labels:
          app: my-app
        namespace: default
      spec:
        replicas: 1 # from-param: ${replicaCount}
        selector:
          matchLabels:
            app: my-app
        template:
          metadata:
            labels:
              app: my-app
          spec:
            containers:
            - name: nginx
              image: my-app-image
      

      Este ficheiro é um simples manifesto 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-parallel-run-service
      spec:
        template:
          metadata:
            annotations:
              autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances}
          spec:
            containers:
            - image: my-app-image
      

      Este ficheiro é uma definição de serviço do Cloud Run simples, que é usada no momento da implementação para criar o seu serviço do Cloud Run. 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ções

    Pode definir o seu pipeline e alvos num ficheiro ou em ficheiros separados. Neste início rápido, vai criar um único ficheiro.

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

      GKE

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

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: my-parallel-demo-app-1
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: qsprod-multi
          profiles: []
          deployParameters:
          - values:
              replicaCount: "1"
            matchTargetLabels:
              label1: label1
          - values:
              replicaCount: "2"
            matchTargetLabels:
              label2: label2
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod-multi
      description: production clusters
      multiTarget:
        targetIds: [qsprod-a, qsprod-b]
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod-a
        labels:
          label1: label1
      description: production cluster 2
      gke:
        cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod1
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod-b
        labels:
          label2: label2
      description: production cluster 3
      gke:
        cluster: projects/PROJECT_ID/locations/us-west1/clusters/quickstart-cluster-qsprod2
      

      Cloud Run

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

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: my-parallel-demo-app-1
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: qsprod-multi
          profiles: []
          deployParameters:
          - values:
              minInstances: "2"
            matchTargetLabels:
              label1: label1
          - values:
              minInstances: "3"
            matchTargetLabels:
              label2: label2
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod-multi
      description: production
      multiTarget:
        targetIds: [qsprod-a, qsprod-b]
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod-a
        labels:
          label1: label1
      description: production us-central1
      run:
        location: projects/PROJECT_ID/locations/us-central1
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod-b
        labels:
          label2: label2
      description: production us-west1
      run:
        location: projects/PROJECT_ID/locations/us-west1
      

      Tenha em atenção que este ficheiro inclui três alvos: um alvo múltiplo e dois alvos secundários. Também pode configurar alvos num ficheiro separado, em vez de com o pipeline de fornecimento.

      Tenha também em atenção que o pipeline de entrega inclui deployParameters, com etiquetas, e as segmentações secundárias incluem etiquetas para corresponder a esses parâmetros. Isto permite-lhe transmitir valores separados para segmentações secundárias separadas, se quiser. Saiba mais.

    2. Registe o pipeline e os destinos no serviço Cloud Deploy:

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

      Agora, tem um pipeline com um alvo múltiplo que compreende dois alvos do GKE ou do Cloud Run, pronto para implementar a sua aplicação.

    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 conduta de entrega que acabou de criar. Repare que existe um alvo listado na coluna Alvos, apesar de ter configurado três alvos (um alvo múltiplo e dois alvos secundários) no ficheiro clouddeploy.yaml.

      Visualização do pipeline de entrega na consola Google Cloud

      Repare que o único alvo apresentado é o alvo múltiplo qsprod-multi. Os alvos secundários não são apresentados.

    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-gke-parallel-quickstart para criar um recurso release que represente a imagem do contentor a implementar:

     gcloud deploy releases create test-release-001 \
       --project=PROJECT_ID \
       --region=us-central1 \
       --delivery-pipeline=my-parallel-demo-app-1 \
       --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
       --to-target=qsprod-multi
    

    Cloud Run

    Execute o seguinte comando a partir do diretório deploy-run-parallel-quickstart para criar um recurso release que represente a imagem do contentor a implementar:

     gcloud deploy releases create test-release-001 \
       --project=PROJECT_ID \
       --region=us-central1 \
       --delivery-pipeline=my-parallel-demo-app-1 \
       --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
       --to-target=qsprod-multi
    

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

    Como sempre, quando cria um lançamento, é criada automaticamente uma implementação para o primeiro destino no seu pipeline (ou, neste caso, um destino específico especificado através de --to-target=). Neste início rápido, este destino é um destino múltiplo, pelo que rollout é uma "implementação de controlador" para dois destinos secundários, e não existem destinos subsequentes no pipeline de entrega. Isto significa que a sua aplicação é implementada em todos os lugares após a criação da implementação.

    Veja os resultados na Google Cloud consola

    Agora que criou a versão e as implementações secundárias e de controladores, essas implementações secundárias são implementadas (ou estão em processo de implementação) nos respetivos clusters do GKE ou serviços do Cloud Run.

    1. Na Google Cloud consola, navegue para a página Cloud Deploy Pipelines de fornecimento para ver o pipeline de fornecimento my-parallel-demo-app-1.

      Abra a página Pipelines de fornecimento

    2. Clique no nome do pipeline de fornecimento "my-parallel-demo-app-1".

      A visualização do pipeline mostra o estado de implementação da app. Uma vez que existe apenas uma fase no pipeline, a visualização mostra apenas um nó.

      Visualização do pipeline de entrega na consola Google Cloud

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

    3. Clique no nome do lançamento, test-release-001.

      As implementações são apresentadas em Implementações. Pode clicar numa implementação para ver os respetivos detalhes, incluindo o registo de implementação.

      Implementações na consola Google Cloud

    Limpar

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

    1. Elimine os clusters do GKE ou os serviços do Cloud Run:

      GKE

      gcloud container clusters delete quickstart-cluster-qsprod1 --region=us-central1 --project=PROJECT_ID \
      && gcloud container clusters delete quickstart-cluster-qsprod2 --region=us-west1 --project=PROJECT_ID
      

      Cloud Run

      gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \
      && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_ID
      
    2. Elimine o pipeline de envio, os vários destinos, os destinos secundários, o lançamento e as implementações:

      gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
      
    3. Elimine os contentores do Cloud Storage que o Cloud Deploy criou.

      Uma termina com _clouddeploy e a outra é [region].deploy-artifacts.[project].appspot.com.

      Abra a página do navegador do Cloud Storage

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

    O que se segue?