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 outras 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. Seu código-fonte precisa ser armazenado em um repositório, como Cloud Source Repositories, GitHub ou Bitbucket.

  • 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. Na página de clusters do Kubernetes Engine, 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. No console Google Cloud , acesse a página Permissões do Cloud Build:

    Acesse Permissões

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

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 do build:

    YAML

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

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=KUBERNETES_RESOURCE_FILE",
            "--location=CLUSTER_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_LOCATION é a região do cluster.
    • CLUSTER é o nome do cluster do GKE em que o aplicativo será implantado.

    Para mais informações sobre flags disponíveis, consulte flags gke-deploy run.

  3. Comece a build:

    gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIG
    

    Em que:

    • LOCATION é um dos locais de build compatíveis.
    • PROJECT é 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 uma nova imagem de contêiner e implantar a 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", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=KUBERNETES_RESOURCE_FILE
      - --image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG
      - --location=CLUSTER_LOCATION
      - --cluster=CLUSTER
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=KUBERNETES_RESOURCE_FILE",
            "--image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
            "--location=CLUSTER_LOCATION",
            "--cluster=CLUSTER"
          ]
        }
      ]
    }
    

    Em que:

    • LOCATION é um dos locais de build compatíveis.
    • PROJECT é o ID do projeto;
    • IMAGE_NAME é o nome que você quer dar à 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 commit, uma boa prática é usar o SHA abreviado do commit 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.
    • CLUSTER_LOCATION é a região em que o cluster será implantado.
  2. Comece a build:

    gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIG
    

    Em que:

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 a expressão regular do nome da ramificação ou da tag que vai 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 a seguir, 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 do 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=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME: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=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME: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 é o ID do projeto;
      • IMAGE_NAME é o nome que você quer para a imagem do contêiner, geralmente o nome do aplicativo.
      • TAG é a tag da imagem do contêiner.

      Para saber mais sobre como definir substituições para arquivos de configuração do 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