Como implantar no GKE

Nesta página, explicamos como implantar um aplicativo no Kubernetes usando o Cloud Build.

O Cloud Build oferece um builder gke-deploy, que permite implantar um aplicativo em contêineres em um cluster do GKE.

gke-deploy é um wrapper em torno de kubectl, a interface de linha de comando do Kubernetes. Ele aplica as práticas recomendadas do Google para implantar aplicativos no Kubernetes por meio dos seguintes procedimentos:

  • Atualização do arquivo de recurso do Kubernetes do aplicativo para usar o resumo da imagem do contêiner em vez de uma tag.

  • Adição de rótulos recomendados ao arquivo de recurso do Kubernetes.

  • Recuperação de credenciais dos clusters do GKE em que você está implantando a imagem.

  • Aguardando o arquivo de recurso do Kubernetes enviado ficar pronto.

Se você quiser implantar os aplicativos usando o kubectl diretamente e não precisar de mais funcionalidades, o Cloud Build também fornecerá um builder kubectl que pode ser usado para implantar o aplicativo em um Cluster do GKE.

Antes de começar

  • Crie um cluster do GKE, se ainda não tiver um.

  • Formate o aplicativo em contêineres como código-fonte e prepare um Dockerfile.

  • Você precisará de pelo menos um arquivo de recurso do Kubernetes que descreva os recursos do Kubernetes usados para executar o aplicativo. Se você não tiver arquivos de recurso do Kubernetes, siga estas etapas para gerar um para o aplicativo:

    1. Abra a página Clusters do Kubernetes Engine no Console do Google Cloud.
    2. Nessa página, clique em Implantar.
    3. Selecione o contêiner e clique em Continuar. Você verá a seção "Configuração".
    4. Em Configuração YAML, clique em Ver YAML para ver um arquivo de recurso de amostra do Kubernetes.

Permissões do IAM obrigatórias

Adicione o papel de desenvolvedor do Google Kubernetes Engine à sua conta:

  1. Abra a página "Configurações" do Cloud Build:

    Abrir a página "Configurações do Cloud Build"

    Você verá a página Permissões da conta de serviço:

    Captura de tela da página "Permissões da conta de serviço"

  2. Defina o status do papel de Desenvolvedor do Kubernetes Engine como Ativado.

Como implantar uma imagem de contêiner pré-criada

Para implantar uma versão específica do aplicativo com gke-deploy:

  1. Verifique se o arquivo de recurso do Kubernetes está se referindo à tag ou ao resumo da imagem do contêiner correto.

  2. Adicione a etapa gke-deploy ao arquivo de configuração de build:

    YAML

    steps:
    ...
    # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    Em que:

    • kubernetes-resource-file é o caminho do arquivo de recurso do Kubernetes ou do diretório que contém os arquivos de recursos do Kubernetes.
    • cluster é o nome do cluster do GKE em que o aplicativo será implantado.
    • location é a região/zona do cluster.

    Para mais informações sobre as sinalizações disponíveis, consulte Sinalizações gke-deploy runf.

  3. Comece a build:

    gcloud builds submit --project=project-id --config build-config
    

    Em que:

    • project-id é o ID do projeto;
    • build-config é o nome do arquivo de configuração da versão.

Como criar e implantar uma nova imagem de contêiner

Para criar e implantar uma nova imagem de contêiner:

  1. Atualize o arquivo de recurso do Kubernetes com a nova imagem do contêiner usando o atributo --image:

    YAML

    steps:
      # build the container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["build", "-t", "gcr.io/project-id/image:tag", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "gcr.io/project-id/image:tag"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --image=gcr.io/project-id/image:tag
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "gcr.io/project-id/image:tag",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "gcr.io/project-id/image:tag"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--image=gcr.io/project-id/image:tag",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    Em que:

    • project-id é o ID do projeto;
    • image é o nome desejado da imagem do contêiner, geralmente o nome do aplicativo.
    • tag é a tag da imagem do contêiner.
      • Se você estiver criando uma nova imagem de contêiner com cada confirmação, uma boa prática é usar o SHA abreviado da confirmação como uma tag. O Cloud Build o disponibiliza como uma substituição padrão $SHORT_SHA.
    • kubernetes-resource-file é o caminho do arquivo de recurso do Kubernetes ou do diretório que contém os arquivos de recursos do Kubernetes.
    • cluster é o nome do cluster do GKE em que o aplicativo será implantado.
    • location é a região/zona em que o cluster será implantado.
  2. Comece a build:

    gcloud builds submit --project=project-id --config build-config
    

    Em que:

    • project-id é o ID do projeto;
    • build-config é o nome do arquivo de configuração da versão.

Como automatizar as implantações

É possível automatizar a implantação do aplicativo no GKE criando um gatilho no Cloud Build. É possível configurar os gatilhos para criar e implantar imagens sempre que você enviar alterações do código.

Para criar um gatilho de compilação:

  1. Abra a página Gatilhos no Console do Google Cloud:

    Abrir a página Acionadores

  2. Selecione o projeto no menu suspenso do seletor na parte superior da página.

  3. Clique em Abrir.

  4. Clique em Criar gatilho.

    Na página Criar gatilho, especifique as seguintes configurações:

    1. Insira um nome para o gatilho.

    2. Selecione o evento de repositório para iniciar o gatilho.

    3. Selecione o repositório que contém o código-fonte e o arquivo de configuração da compilação.

    4. Especifique o regex do nome da ramificação ou da tag que iniciará o gatilho.

    5. Escolha uma configuração para o gatilho.

      Se você escolher um arquivo de configuração do Cloud Build, especifique Variáveis de substituição fornecendo um nome de variável e o valor que quer associar a ela. No exemplo abaixo, a variável de substituição definida pelo usuário _CLOUDSDK_CONTAINER_CLUSTER especifica o cluster em que será feita a implantação. A variável de substituição definida pelo usuário _CLOUDSDK_COMPUTE_ZONE especifica o respectivo local. Se você quiser implantar em um cluster diferente, use a mesma configuração de build e altere apenas os valores das variáveis de substituição:

      YAML

      steps:
      ...
      # deploy container image to GKE
      - name: "gcr.io/cloud-builders/gke-deploy"
        args:
        - run
        - --filename=kubernetes-resource-file
        - --image=gcr.io/project-id/image:tag
        - --location=${_CLOUDSDK_COMPUTE_ZONE}
        - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}
      

      JSON

      {
        "steps": [
          {
            "name": "gcr.io/cloud-builders/gke-deploy",
            "args": [
              "run",
              "--filename=kubernetes-resource-file",
              "--image=gcr.io/project-id/image:tag",
              "--location=${_CLOUDSDK_COMPUTE_ZONE}",
              "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}"
            ]
          }
        ]
      }
      

      Em que:

      • kubernetes-resource-file é o caminho do arquivo de configuração do Kubernetes ou do diretório que contém os arquivos de recursos do Kubernetes.
      • project-id é o ID do projeto;
      • image é o nome desejado da imagem do contêiner, geralmente o nome do aplicativo.
      • tag é a tag da imagem do contêiner.

      Para saber mais como definir substituições para arquivos de configuração de build, consulte Como usar substituições definidas pelo usuário.

  5. Clique em Criar para salvar o gatilho de compilação.

Quando você envia o código ao seu repositório, o Cloud Build aciona automaticamente um build. Para saber mais sobre gatilhos de compilação, consulte Como criar e gerenciar gatilhos de build.

A seguir