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 conteinerizado 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. 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. 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 de 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 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", "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 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.
    • 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 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=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 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