Implemente uma app no GKE através do Cloud Deploy

Esta página mostra-lhe como usar o Cloud Deploy para entregar 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

  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. 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 estão incluídos para projetos que desativam as concessões de funções automáticas para contas de serviço predefinidas.

    1. 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 as autorizações de programador do Kubernetes:

      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"
      

      Se tiver problemas em adicionar qualquer uma destas funções, contacte o administrador do projeto.

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

    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 destino que está a promover.

    3. Clique em Promover.

      O lançamento está agora na fila para implementação no qsprod. Quando a implementação estiver concluída, a visualização do pipeline de publicação mostra que foi implementada:

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

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

      gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
      
    3. Elimine o pipeline de envio, 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?