Como implantar no Google Kubernetes Engine

Neste guia, descrevemos como extrair imagens do Artifact Registry para implantação no Google Kubernetes Engine. Se você quiser fazer a implantação em serviços do Kubernetes autohospedados ou de terceiros, configure a autenticação para Google Cloud antes de extrair imagens do Artifact Registry. Para autenticar no Google Cloud com cargas de trabalho do Kubernetes fora do Google Cloud, consulte Configurar a federação de identidade da carga de trabalho com o Kubernetes.

O Google Kubernetes Engine pode extrair imagens diretamente dos repositórios do Docker. Algumas versões incluem suporte pré-configurado para extrair imagens de repositórios Docker do Artifact Registry.

Requisitos

Esta seção descreve os requisitos para integração com o GKE.

Permissões

O GKE usa os seguintes padrões ao criar pools de nós ou clusters:

Se você desativou a concessão do papel básico de Editor, conceda à conta de serviço padrão do Compute Engine o papel de leitor do Artifact Registry (roles/artifactregistry.reader).

Se você usar esses padrões e conceder à conta de serviço padrão do Compute Engine o papel de leitor do Artifact Registry (roles/artifactregistry.reader), o GKE poderá extrair imagens de repositórios do Artifact Registry no mesmo projeto Google Cloud . Se você precisar enviar imagens de nós, extrair ou enviar imagens entre projetos, usar uma conta de serviço fornecida pelo usuário ou tiver outras necessidades que as configurações padrão não atendem, consulte a documentação de controle de acesso para informações sobre como configurar o acesso.

Se você encontrar erros de "permissão negada", consulte Erros 4xx.

Versão GKE

A tabela a seguir lista as versões mínimas necessárias do GKE para criar clusters com permissões padrão para extrair contêineres dos repositórios do Docker no mesmo projeto.

Versão Patch mínimo necessário
1.14 1.14.10-gke.22
1.15 1.15.9-gke.8

Se a versão do GKE for anterior à mínima, configure Kubernetes imagePullSecrets para permitir que o GKE extraia imagens.

Se o GKE estiver em um projeto diferente do Artifact Registry, conceda permissões do Artifact Registry à conta de serviço usada pelo nó do GKE. Por padrão, os nós usam a conta de serviço padrão do Compute Engine.

Como executar uma imagem

É possível executar uma imagem do Artifact Registry em um cluster do Google Kubernetes Engine usando o comando a seguir:

kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG

em que:

  • LOCATION é o local regional ou multirregional do repositório.
  • PROJECT é o ID do projeto do seu Google Cloud console. Se o ID do projeto tiver dois pontos (:), consulte Projetos com escopo de domínio.
  • REPOSITORY é o nome do repositório em que a imagem está armazenada.
  • IMAGE é o nome da imagem no repositório.
  • TAG é a tag da versão de imagem que você quer extrair.

Para mais informações sobre os comandos do Kubernetes, consulte Visão geral do kubectl (em inglês).

Solução de problemas de imagens de nós containerd

A partir da versão 1.19 do nó do GKE, a imagem de nó padrão dos nós do Linux é a variante do Container-Optimized OS com o Containerd (cos_containerd), em vez da variante Container-Optimized OS com o Docker (cos).

Embora o binário do Docker esteja disponível em nós do Linux que usam o containerd como ambiente de execução, não recomendamos usá-lo. O Docker não gerencia os contêineres que o Kubernetes executa em nós containerd. Portanto, não é possível usá-lo para visualizar ou interagir com contêineres em execução do Kubernetes usando comandos do Docker ou a API Docker.

Para depurar o nó ou solucionar problemas dele no Linux, use o containerd na ferramenta de linha de comando portátil crictl, criada para os ambientes de execução de contêiner do Kubernetes. O crictl é compatível com funcionalidades comuns para visualizar contêineres e imagens, ler registros e executar comandos nos contêineres.

Para mais informações, consulte o guia do usuário do crictl e a documentação do GKE sobre o containerd.

Para os nós do Windows Server, o daemon do containerd é executado como um serviço do Windows chamado containerd. Os registros estão disponíveis no seguinte diretório: C:\etc\kubernetes\logs\containerd.log e são mostrados na Análise de registros em LOG NAME: "container-runtime".

Extrair de um repositório público do Artifact Registry

Depois de implantar uma imagem em um cluster do GKE com nós containerd, é possível se conectar a uma instância de VM usando SSH e executar comandos crictl para resolver problemas.

Os repositórios públicos do Artifact Registry não exigem autenticação. crictl também pode ser usado para extrair imagens em repositórios privados do Artifact Registry.

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Na lista de instâncias de máquina virtual, clique na seta ao lado de SSH na linha da instância a que você quer se conectar

    Botão "SSH" ao lado do nome da instância.

  3. Selecione "Abrir em uma janela do navegador" ou o método de conexão que você preferir nas opções do menu suspenso.

  4. Google Cloud abre uma nova janela de terminal. Use crictl para extrair uma imagem do Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    

    A saída será assim:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Ao extrair uma imagem de um repositório particular do Artifact Registry, é necessário fazer a autenticação no repositório. Você pode usar um token de acesso para fornecer suas credenciais.

gcloud

  1. Verifique se você tem a versão mais recente da Google Cloud CLI.

    gcloud components update
    
  2. Conecte-se à VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Substitua:

    • PROJECT_ID: o ID do projeto que contém a VM.
    • ZONE: o nome da zona em que a VM está localizada
    • VM_NAME: O nome da VM.

    Se você tiver definido as propriedades padrão para a Google Cloud CLI, poderá omitir as sinalizações --project e --zone desse comando. Exemplo:

    gcloud compute ssh VM_NAME
    
  3. Se você ainda não tiver criado uma chave SSH, o SSH-keygen vai gerar uma para você. Insira uma senha longa ou deixe em branco quando solicitado.

  4. Use crictl para extrair uma imagem do Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    
  5. A saída será assim:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Ao extrair uma imagem de um repositório particular do Artifact Registry, é necessário fazer a autenticação no repositório. Você pode usar um token de acesso para fornecer suas credenciais.

Extrair de um repositório particular do Artifact Registry

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Na lista de instâncias de máquina virtual, clique na seta ao lado de SSH na linha da instância a que você quer se conectar

    Botão "SSH" ao lado do nome da instância.

  3. Selecione "Abrir na janela do navegador" nas opções do menu suspenso.

  4. Google Cloud abre uma nova janela de terminal. Gere um token de acesso da conta de serviço do Compute Engine usando curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    A resposta tem a aparência do exemplo a seguir.

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copie o valor de access_token da saída retornada sem as aspas.

  6. Extraia a imagem usando crictl pull --creds e o valor access_token copiado na etapa anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    A saída será assim:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Verifique se você tem a versão mais recente da Google Cloud CLI.

    gcloud components update
    
  2. Conecte-se à VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Substitua as seguintes variáveis:

    • PROJECT_ID: o ID do projeto que contém a VM.
    • ZONE: o nome da zona em que a VM está localizada
    • VM_NAME: O nome da VM.

    Se você tiver definido as propriedades padrão para a Google Cloud CLI, poderá omitir as sinalizações --project e --zone desse comando. Exemplo:

    gcloud compute ssh VM_NAME
    
  3. Se você ainda não tiver criado uma chave SSH, o SSH-keygen vai gerar uma para você. Insira uma senha longa ou deixe em branco quando solicitado.

  4. Gere um token de acesso da conta de serviço do Compute Engine usando curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    A saída será assim:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copie o valor de access_token da saída retornada sem as aspas.

  6. Extraia a imagem usando crictl pull --creds e o valor access_token copiado na etapa anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    A saída será assim:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

O crictl permite que os desenvolvedores depurem o ambiente de execução sem precisar configurar componentes do Kubernetes. Para uma lista completa de comandos, consulte a documentação do crictl e a documentação de depuração do Kubernetes.