Implementação no GKE

Esta página explica como implementar uma aplicação no Kubernetes através do Cloud Build.

O Cloud Build fornece um criador gke-deploy que lhe permite implementar uma aplicação em contentores num cluster do GKE.

O gke-deploy é um wrapper em torno do kubectl, a interface de linhas de comando para o Kubernetes. Aplica as práticas recomendadas da Google para implementar aplicações no Kubernetes da seguinte forma:

  • Atualizar o ficheiro de recursos do Kubernetes da aplicação para usar o resumo da imagem do contentor em vez de uma etiqueta.

  • Adicionar etiquetas recomendadas ao ficheiro de recursos do Kubernetes.

  • Obter credenciais para os clusters do GKE para os quais está a implementar a imagem.

  • A aguardar que o ficheiro de recursos do Kubernetes enviado esteja pronto.

Se quiser implementar as suas aplicações diretamente com o kubectl e não precisar de funcionalidades adicionais, o Cloud Build também oferece um criador kubectl que pode usar para implementar a sua aplicação num cluster do GKE.

Antes de começar

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

  • Tenha a sua aplicação contentorizada sob a forma de código-fonte e um Dockerfile pronto. O código fonte tem de estar armazenado num repositório, como os Cloud Source Repositories, o GitHub ou o Bitbucket.

  • Precisa de, pelo menos, um ficheiro de recursos do Kubernetes que descreva os recursos do Kubernetes usados para executar a sua aplicação. Se não tiver ficheiros de recursos do Kubernetes, siga estes passos para gerar um para a sua aplicação:

    1. Abra a página de clusters do Kubernetes Engine na Google Cloud consola.
    2. Na página de clusters do Kubernetes Engine, clique em Implementar.
    3. Selecione o contentor e clique em Continuar. É apresentada a secção Configuração.
    4. Em YAML de configuração, clique em Ver YAML para obter um ficheiro de recursos de exemplo do Kubernetes.

Autorizações de IAM necessárias

Adicione a função de programador do Google Kubernetes Engine à sua conta:

  1. Na Google Cloud consola, aceda à página Autorizações do Cloud Build:

    Aceda a Autorizações

  2. Defina o estado da função Kubernetes Engine Developer como Ativado.

Implementar uma imagem de contentor pré-criada

Para implementar uma versão específica da sua aplicação com o gke-deploy:

  1. Certifique-se de que o ficheiro de recursos do Kubernetes se refere à etiqueta ou ao resumo da imagem do contentor correto.

  2. Adicione o passo gke-deploy no ficheiro de configuração de compilação:

    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"
          ]
        }
      ]
    }
    

    Onde:

    • kubernetes-resource-file é o caminho do ficheiro de recursos do Kubernetes ou o caminho do diretório que contém os ficheiros de recursos do Kubernetes.
    • cluster é o nome do cluster do GKE no qual a aplicação vai ser implementada.
    • location é a região/zona do cluster.

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

  3. Comece a criar:

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

    Onde:

Criar e implementar uma nova imagem de contentor

Para criar uma nova imagem de contentor e implementar a nova imagem de contentor:

  1. Atualize o ficheiro de recursos do Kubernetes com a nova imagem do contentor 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"
          ]
        }
      ]
    }
    

    Onde:

    • project-id é o ID do seu projeto.
    • image é o nome pretendido da imagem do contentor, normalmente o nome da aplicação.
    • tag é a etiqueta da imagem do contentor.
      • Se estiver a criar uma nova imagem de contentor com cada confirmação, uma boa prática é usar o SHA curto de confirmação como uma etiqueta. O Cloud Build disponibiliza esta opção como uma substituição predefinida, $SHORT_SHA.
    • kubernetes-resource-file é o caminho do ficheiro de recursos do Kubernetes ou o caminho do diretório que contém os ficheiros de recursos do Kubernetes.
    • cluster é o nome do cluster do GKE no qual a aplicação vai ser implementada.
    • location é a região/zona para a qual o cluster vai ser implementado.
  2. Comece a criar:

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

    Onde:

Automatizar implementações

Pode automatizar a implementação da sua aplicação no GKE através da criação de um acionador no Cloud Build. Pode configurar acionadores para criar e implementar imagens sempre que enviar alterações para o seu código.

Para criar um acionador de compilação:

  1. Abra a página Acionadores na Google Cloud consola:

    Abra a página Acionadores

  2. Selecione o seu projeto no menu pendente do seletor de projetos na parte superior da página.

  3. Clique em Abrir.

  4. Clique em Criar acionador.

    Na página Criar acionador, introduza as seguintes definições:

    1. Introduza um nome para o acionador.

    2. Selecione o evento do repositório para iniciar o acionador.

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

    4. Especifique a regex para o nome da ramificação ou da etiqueta que vai iniciar o acionador.

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

      Se escolher um ficheiro de configuração do Cloud Build, pode especificar variáveis de substituição indicando um nome de variável e o valor que quer associar a essa variável. No exemplo abaixo, a variável de substituição definida pelo utilizador _CLOUDSDK_CONTAINER_CLUSTER especifica o cluster para implementação e a variável de substituição definida pelo utilizador _CLOUDSDK_COMPUTE_ZONE especifica a respetiva localização. Se quiser implementar num cluster diferente, pode usar a mesma configuração de compilação e só precisa de alterar 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}"
            ]
          }
        ]
      }
      

      Onde:

      • kubernetes-resource-file é o caminho do ficheiro de configuração do Kubernetes ou o caminho do diretório que contém os ficheiros de recursos do Kubernetes.
      • project-id é o ID do seu projeto.
      • image é o nome pretendido da imagem do contentor, normalmente o nome da aplicação.
      • tag é a etiqueta da imagem do contentor.

      Para saber como definir substituições para ficheiros de configuração de compilação, consulte o artigo Usar substituições definidas pelo utilizador.

  5. Clique em Criar para guardar o acionador de compilação.

Quando envia código para o seu repositório, o Cloud Build aciona automaticamente uma compilação. Para saber mais sobre os acionadores de compilação, consulte o artigo Criar e gerir acionadores de compilação.

O que se segue?