Este guia descreve como extrair imagens do Artifact Registry para implantar no Google Kubernetes Engine. Se você quiser implantar em serviços Kubernetes auto-hospedados ou de terceiros, configure a autenticação para Google Cloud antes de extrair imagens do Artifact Registry. Para fazer a autenticação em Google Cloud de cargas de trabalho do Kubernetes fora de 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 a integração com o GKE.
Permissões
O GKE usa os seguintes padrões ao criar pools de nós ou clusters:
- A conta de serviço padrão do Compute Engine é a identidade dos nós.
-
Dependendo da configuração da política da organização, a conta de serviço padrão pode receber automaticamente o papel de Editor no projeto. É altamente recomendável desativar a concessão automática de papéis aplicando a restrição da política da organização
iam.automaticIamGrantsForDefaultServiceAccounts
. Se você criou a organização após 3 de maio de 2024, essa restrição será aplicada por padrão.Se você desativar a concessão automática de papéis, precisará decidir quais papéis conceder às contas de serviço padrão e, em seguida, conceder esses papéis por conta própria.
Se a conta de serviço padrão já tiver o papel de Editor, recomendamos que você o substitua por papéis menos permissivos.Para modificar com segurança os papéis da conta de serviço, use o Simulador de política para conferir o impacto da mudança e, em seguida, conceda e revogue os papéis apropriados.
- Os nós criados com a conta de serviço padrão têm os escopos de acesso padrão do Compute Engine, incluindo o acesso somente leitura ao armazenamento. Não é possível mudar os escopos de acesso em nós existentes.
Se você desativou a concessão do papel de Editor básico, 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 dos 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 oferecem suporte, consulte a documentação do 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 à versão mínima, será necessário configurar o imagePullSecrets do Kubernetes para permitir que o GKE extraia imagens.
Se o GKE estiver em um projeto diferente do Artifact Registry, conceda as 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 console do Google Cloud. Caso o ID do projeto contenha 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ó 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 SO do Container-Optimized com o containerd
(cos_containerd
), em vez da variante do SO do Container-Optimized com
o Docker (cos
).
Embora o binário do Docker esteja disponível nos 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 do containerd. Portanto, não é possível usá-lo para visualizar ou interagir com a execução de contêineres 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 de registros:
C:\etc\kubernetes\logs\containerd.log
e são exibidos no Explorador de registros
em LOG NAME: "container-runtime"
.
Como extrair de um repositório público do Artifact Registry
Depois de implantar e criar uma imagem em um cluster do GKE com
nós contêinerizados, você pode se conectar a uma instância de VM usando SSH e executar comandos crictl
para solucionar 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 particulares do Artifact Registry.
Console
No Console do Google Cloud, acesse a página Instâncias de VMs.
Na lista de instâncias de máquina virtual, clique na seta ao lado de SSH na linha da instância à qual você quer se conectar.
.Selecione "Abrir na janela do navegador" ou o método de conexão de sua preferência nas opções do menu suspenso.
O console do 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
Verifique se você tem a versão mais recente da CLI do Google Cloud:
gcloud components update
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á localizadaVM_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
Se você ainda não criou uma chave SSH, o SSH keygen vai gerar uma para você. Digite uma senha longa ou deixe o campo em branco quando solicitado.
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.
Como extrair de um repositório particular do Artifact Registry
Console
No Console do Google Cloud, acesse a página Instâncias de VMs.
Na lista de instâncias de máquina virtual, clique na seta ao lado de SSH na linha da instância à qual você quer se conectar.
.Selecione "Abrir na janela do navegador" nas opções do menu suspenso.
O console do 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"}
Copie o valor da
access_token
da saída retornada sem as aspas.Extraia a imagem usando
crictl pull --creds
e o valoraccess_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
Verifique se você tem a versão mais recente da CLI do Google Cloud:
gcloud components update
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á localizadaVM_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
Se você ainda não criou uma chave SSH, o SSH keygen vai gerar uma para você. Digite uma senha longa ou deixe o campo em branco quando solicitado.
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"}
Copie o valor da
access_token
da saída retornada sem as aspas.Extraia a imagem usando
crictl pull --creds
e o valoraccess_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 conferir uma lista completa de comandos, consulte os documentos do crictl
e as documentações de depuração do Kubernetes.