Implemente uma app no GKE através do Cloud Deploy

Esta página mostra como usar o Cloud Deploy para fornecer uma imagem de aplicação de exemplo denominada nginx a uma sequência de dois clusters do Google Kubernetes Engine.

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

  1. Crie os dois clusters.

  2. Crie uma configuração do Skaffold e um manifesto do Kubernetes para especificar a imagem de contentor (pré-criada) a implementar.

  3. Defina o pipeline de entrega e os alvos de implementação do Cloud Deploy, que apontam para os dois clusters.

  4. Instancie a sua pipeline de entrega criando um lançamento, que é implementado automaticamente no primeiro destino.

  5. Promova o lançamento para o segundo destino.

  6. Veja ambas as implementações na Google Cloud consola.

Antes de começar

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

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

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • Install the Google Cloud CLI.

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

  • Para inicializar a CLI gcloud, execute o seguinte comando:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

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

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • Install the Google Cloud CLI.

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

  • Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  • Funções necessárias

    Para obter as autorizações de que precisa para criar um pipeline de entrega e uma versão do Cloud Deploy, peça ao seu administrador para lhe conceder a função de IAM de executor de tarefas do Cloud Deploy (roles/clouddeploy.jobrunner) no seu projeto.

    Para garantir que a conta de serviço do Cloud Deploy tem as autorizações necessárias para executar operações do Cloud Deploy e implementar no Cloud Run, peça ao seu administrador para conceder à conta de serviço do Cloud Deploy as seguintes funções de IAM no seu projeto:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    O administrador também pode conceder à conta de serviço do Cloud Deploy as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

    Crie os seus clusters do Google Kubernetes Engine

    Crie dois clusters: qsdev e qsprod, 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-qsdev --project=PROJECT_ID --region=us-central1 && gcloud container clusters create-auto quickstart-cluster-qsprod --project=PROJECT_ID --region=us-central1
    

    Prepare a configuração do Skaffold e o manifesto do Kubernetes

    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 do Kubernetes a usar para implementar a app de exemplo.

    1. Abra uma janela de terminal.

    2. Crie um novo diretório com o nome deploy-gke-quickstart e navegue até ele.

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

      apiVersion: skaffold/v4beta7
      kind: Config
      manifests:
        rawYaml:
        - k8s-*
      deploy:
        kubectl: {}
      

      Este ficheiro é uma configuração mínima do Skaffold que identifica o seu manifesto. 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 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.

    Crie o pipeline de entrega e as 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. No diretório deploy-gke-quickstart, crie um novo ficheiro: clouddeploy.yaml, com o seguinte conteúdo:

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: my-gke-demo-app-1
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: qsdev
          profiles: []
        - targetId: qsprod
          profiles: []
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsdev
      description: development cluster
      gke:
        cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsdev
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod
      description: production cluster
      gke:
        cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
      
    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 alvos pronto para implementar a sua aplicação no primeiro 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 e os dois alvos são apresentados na coluna Alvos.

      Visualização do pipeline de entrega 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 o artigo Arquitetura do serviço Cloud Deploy para ver detalhes sobre esse ciclo de vida.

    Execute o seguinte comando a partir do diretório deploy-gke-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-gke-demo-app-1 \
      --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 pela imagem específica qualificada com 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.

    Tal como acontece com todos os lançamentos (a menos que incluam --disable-initial-rollout), o Cloud Deploy também cria automaticamente um recurso de implementação. A aplicação é implementada automaticamente no primeiro alvo na progressão.

    Promova o lançamento

    1. Na página Caminhos de fornecimento, clique no caminho my-gke-demo-app-1.

      Abra a página Pipelines de fornecimento

      A página de detalhes do pipeline de fornecimento mostra uma representação gráfica do progresso do pipeline de fornecimento. Neste caso, mostra que o lançamento foi implementado no destino qsdev.

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

    2. No primeiro alvo na visualização do pipeline de fornecimento, clique em Promover.

      É apresentada a caixa de diálogo Promover lançamento. Mostra os detalhes do público-alvo que está a promover.

    3. Clique em Promover.

      A versão está agora em fila para implementação no qsprod. Quando a implementação estiver concluída, a visualização do pipeline de entrega mostra-a como implementada:

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

    Veja os resultados na Google Cloud consola

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

      Abra a página Pipelines de fornecimento

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

      A visualização do pipeline mostra o progresso da app no pipeline.

      Visualização do pipeline de fornecimento 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 o cluster qsdev:

      gcloud container clusters delete quickstart-cluster-qsdev --region=us-central1 --project=PROJECT_ID
      
    2. Elimine o cluster qsprod:

      gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
      
    3. Elimine o pipeline de implementação, os destinos, o lançamento e as implementações:

      gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
      
    4. 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?