Esta página ajuda a resolver problemas com o processo de extração de imagem no Google Kubernetes Engine (GKE). Se você usa o streaming de imagem, consulte Resolver problemas com o streaming de imagem para receber conselhos. Esta página se concentra em extrações de imagem padrão.
Esta página é destinada a desenvolvedores de aplicativos que querem garantir que os apps sejam implantados com sucesso e a administradores e operadores de plataforma que querem entender a causa raiz de falhas de extração de imagem e verificar a configuração da plataforma. Para saber mais sobre papéis comuns e exemplos de tarefas referenciados no conteúdo do Google Cloud , consulte Tarefas e funções de usuário comuns do GKE Enterprise.
O processo de extração de imagem é como o Kubernetes, e, portanto, o GKE, recupera imagens de contêineres de um registro. Quando um pull de imagem falha, o app pode ficar lento ou não funcionar de jeito nenhum.
Para determinar se os downloads de imagens são a causa do problema do app, esta página ajuda a diagnosticar a falha de download de imagens encontrando e entendendo mensagens de erro relevantes. Em seguida, você vai aprender a resolver as seguintes causas comuns de falhas de extração de imagens:
- Configurações de autenticação: seu cluster não tem as permissões necessárias para acessar o registro de imagem do contêiner.
- Conectividade de rede: o cluster não consegue se conectar ao registro devido a problemas de DNS, regras de firewall ou falta de acesso à Internet em clusters que usam o isolamento de rede.
- Imagem não encontrada no registro: o nome ou a tag da imagem especificada estão incorretos, a imagem foi excluída ou o registro está indisponível.
- Limitações de desempenho: tamanho de imagem grande, E/S de disco lento ou congestionamento da rede podem causar puxagens lentas ou timeouts.
- Arquitetura de imagem incompatível: a imagem foi criada para uma arquitetura de CPU diferente do seu pool de nós do GKE.
- Versões de esquema incompatíveis: talvez você esteja usando o containerd 2.0 ou mais recente com um esquema do Docker v1, que não tem suporte.
Se você já recebeu uma mensagem de evento específica, pesquise-a nesta página e siga as etapas de solução de problemas listadas. Se você não tiver recebido uma mensagem, siga as seções a seguir na ordem. Se o problema persistir, entre em contato com o Cloud Customer Care.
Entender os pulls de imagem
Antes de começar a solução de problemas, é útil entender um pouco mais sobre o ciclo de vida de uma imagem e onde você pode hospedar suas imagens.
Ciclo de vida da imagem
Quando você cria um pod, o kubelet recebe a definição do pod, que inclui a especificação da imagem. O kubelet precisa dessa imagem para executar um contêiner com base nela. Antes de extrair a imagem, o kubelet verifica o runtime do contêiner para ver se a imagem está presente. O kubelet também verifica a política de extração de imagem do pod. Se a imagem não estiver no cache do ambiente de execução do contêiner ou se a política de extração de imagem exigir isso, o kubelet vai direcionar o ambiente de execução do contêiner (containerd) para extrair a imagem especificada do registro. Uma falha no pull de imagem impede a inicialização do contêiner no pod.
Após a extração da imagem, o ambiente de execução do contêiner descompacta a imagem para criar um sistema de arquivos de base somente leitura para o contêiner. O ambiente de execução do contêiner armazena essa imagem, que permanece presente enquanto os contêineres em execução a referenciam. Se nenhum contêiner em execução referenciar uma imagem, ela vai se qualificar para a coleção de lixo e o kubelet vai removê-la.
Opções de hospedagem de imagens
Recomendamos que você use uma das seguintes opções para hospedar suas imagens:
Artifact Registry: é o gerenciador de pacotes totalmente gerenciado do Google. O Artifact Registry se integra de perto a outros serviços Google Cloud e oferece controle de acesso refinado. Para saber mais, consulte Trabalhar com imagens de contêiner na documentação do Artifact Registry.
Registro auto-hospedado: um registro auto-hospedado oferece mais controle, mas também exige que você o gerencie. Considere essa opção se você tiver necessidades específicas de compliance ou segurança que o Artifact Registry não pode atender.
Diagnosticar falhas de extração de imagem
Para diagnosticar falhas de extração de imagem, realize as investigações detalhadas nas seções a seguir:
- Conferir o status e os eventos do pod.
- Entender o significado do status.
- Use as mensagens de evento para encontrar a causa da falha de extração de imagem.
- Acesse os registros do Explorador de registros.
Conferir o status e os eventos do pod
Para ajudar a verificar se o pull de uma imagem falhou, o GKE registra os seguintes status para pods:
ImagePullBackOff
ErrImagePull
ImageInspectError
InvalidImageName
RegistryUnavailable
SignatureValidationFailed
ImagePullBackOff
e ErrImagePull
são os status mais comuns.
Além desses status, os eventos do Kubernetes ajudam a encontrar a causa de falhas de extração de imagem.
Para confirmar se o pull de imagem está com falha, verifique as mensagens de status e leia as mensagens de evento selecionando uma das seguintes opções:
Console
Siga estas etapas:
No console do Google Cloud, acesse a página Cargas de trabalho.
Selecione a carga de trabalho que você quer investigar. Se você não tiver certeza de qual carga de trabalho precisa examinar, consulte a coluna Status. Essa coluna indica quais cargas de trabalho estão com problemas.
Na página Detalhes da carga de trabalho, encontre a seção Pods gerenciados e clique no nome do pod com um status indicando uma falha de extração de imagem.
Na página Detalhes do pod, clique na guia Eventos.
Revise as informações na tabela. A coluna Mensagem lista os eventos do Kubernetes, que mostram mais informações sobre falhas de extração de imagens. A coluna Motivo lista o status do pod.
kubectl
Siga estas etapas:
Confira o status dos seus pods:
kubectl get pods -n NAMESPACE
Substitua
NAMESPACE
pelo namespace em que os pods são executados.O resultado será assim:
NAME READY STATUS RESTARTS AGE POD_NAME_1 2/2 Running 0 7d5h POD_NAME_2 0/1 ErrImagePull 0 7d5h
A coluna
Status
indica quais pods tiveram uma falha de extração de imagem.Acessar eventos de pods com falhas de extração de imagem:
kubectl describe POD_NAME -n NAMESPACE
Substitua
POD_NAME
pelo nome do pod que você identificou na etapa anterior.A seção
Events
mostra mais informações sobre o que aconteceu durante as transferências de imagem com falha.O resultado será assim:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Failed 5m (x4 over 7m) kubelet, NODE Failed to pull image "IMAGE_ADDRESS": rpc error: code = Unknown desc = Error response from daemon: repository IMAGE_ADDRESS not found Warning Failed 5m (x4 over 7m) kubelet, NODE Error: ErrImagePull Normal BackOff 5m (x6 over 7m) kubelet, NODE Back-off pulling image "IMAGE_ADDRESS" Warning Failed 2m (x20 over 7m) kubelet, NODE Error: ImagePullBackOff
Nessa saída,
IMAGE_ADDRESS
é o endereço completo da imagem. Por exemplo,us-west1-docker.pkg.dev/my-project/my-repo/test:staging
.
Entender o significado do status
Para entender melhor o que os diferentes status significam, consulte as seguintes descrições:
ImagePullBackOff
: o kubelet não conseguiu extrair a imagem, mas ele vai continuar tentando com um atraso cada vez maior (ou backoff) de até cinco minutos.ErrImagePull
: um erro geral e irrecuperável durante o processo de extração de imagem.ImageInspectError
: o ambiente de execução do contêiner encontrou um problema ao tentar inspecionar a imagem do contêiner.InvalidImageName
: o nome da imagem do contêiner especificado na definição do pod não é válido.RegistryUnavailable
: o registro não está acessível. Isso geralmente é um problema de conectividade de rede.SignatureValidationFailed
: a assinatura digital da imagem do contêiner não pôde ser verificada.
Usar mensagens de evento para encontrar a causa da falha de extração de imagem
A tabela a seguir lista as mensagens de evento relacionadas a falhas de recuperação de imagem e as etapas de solução de problemas que você precisa seguir se encontrar uma dessas mensagens.
As mensagens relacionadas a falhas de extração de imagens geralmente têm o seguinte prefixo:
Failed to pull image "IMAGE_ADDRESS": rpc error: code = CODE = failed to pull and unpack image "IMAGE_ADDRESS": failed to resolve reference "IMAGE_ADDRESS":
Esta mensagem inclui os seguintes valores:
IMAGE_ADDRESS
: o endereço completo da imagem. Por exemplo,us-west1-docker.pkg.dev/my-project/my-repo/test:staging
.CODE
: um código de erro associado à mensagem de registro. Por exemplo,NotFound
ouUnknown
.
Algumas causas de falhas de pull de imagem não têm uma mensagem de evento relacionada. Se você não encontrar nenhuma das mensagens de evento na tabela a seguir, mas ainda tiver problemas de extração de imagem, recomendamos que continue lendo o restante da página.
Mensagem de evento | Solução de problemas detalhada |
---|---|
Autenticação | |
|
|
|
|
Conectividade de rede | |
|
|
|
|
|
|
Imagem não encontrada | |
|
|
Tempo limite da imagem | |
|
|
Esquema incompatível | |
|
Conferir os registros da Análise de registros
Para examinar eventos de extração de imagem históricos ou correlacionar falhas de extração de imagem com outra atividade do componente, acesse os registros com o Explorador de registros:
No console do Google Cloud, acesse a página do Explorador de registros.
No painel de consulta, digite a seguinte consulta:
log_id("events") resource.type="k8s_pod" resource.labels.cluster_name="CLUSTER_NAME" jsonPayload.message=~"Failed to pull image"
Substitua
CLUSTER_NAME
pelo nome do cluster em que o pod com erros de extração de imagem é executado.Clique em Executar consulta e confira os resultados.
Investigar as configurações de autenticação
As seções a seguir ajudam você a verificar se o ambiente do GKE tem as configurações de autenticação adequadas para extrair imagens do repositório.
Para verificar se você tem problemas de autenticação que causam um problema de extração de imagem, realize as investigações detalhadas nas seções a seguir:
- Verifique o acesso à imagem.
- Verifique a configuração do imagePullSecret e a especificação de implantação.
- Verifique o escopo de acesso do nó para o repositório particular do Artifact Registry
- Verifique as configurações do VPC Service Controls para acessar o Artifact Registry.
Verificar o acesso à imagem
Se você encontrar um erro de extração de imagem 403 Forbidden
, verifique se os componentes
necessários podem acessar a imagem do contêiner.
O método para verificar e aplicar as funções necessárias para conceder o acesso necessário varia de acordo com o tipo de repositório que armazena suas imagens. Para verificar e conceder acesso, selecione uma das seguintes opções:
Artifact Registry
Se você usar um imagePullSecret, a conta de serviço vinculada ao secreto precisa ter permissão de leitura para o repositório. Caso contrário, a conta de serviço do pool de nós precisa de permissão.
- Siga as instruções na documentação do IAM para ver os papéis atribuídos à sua conta de serviço.
Se a conta de serviço não tiver o papel do IAM Leitor do Artifact Registry (
roles/artifactregistry.reader
), conceda a ela:gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAMEREPOSITORY_LOCATION \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role="roles/artifactregistry.reader"
Substitua:
REPOSITORY_NAME
: o nome do repositório do Artifact RegistryREPOSITORY_LOCATION
: a região do repositório do Artifact Registry.SERVICE_ACCOUNT_EMAIL
: o endereço de e-mail da conta de serviço necessária. Se você não souber o endereço, use o comandogcloud iam service-accounts list
para listar todos os endereços de e-mail da conta de serviço no seu projeto.
Container Registry
Se você usar um imagePullSecret, a conta de serviço vinculada ao secreto precisa ter permissão de leitura para o repositório. Caso contrário, a conta de serviço do pool de nós precisa de permissão.
- Siga as instruções na documentação do IAM para ver os papéis atribuídos à sua conta de serviço.
Se a conta de serviço não tiver o papel do IAM Leitor de objetos do Storage (
roles/storage.objectViewer
), conceda-o para que a conta de serviço possa ler do bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectViewer
Substitua:
SERVICE_ACCOUNT_EMAIL
: o e-mail da conta de serviço necessária. É possível listar todas as contas de serviço no seu projeto usando o comandogcloud iam service-accounts list
.BUCKET_NAME
: o nome do bucket do Cloud Storage que contém as imagens. É possível listar todos os buckets no seu projeto usando o comandogcloud storage ls
.
Se o administrador de registro configurar
repositórios gcr.io
no Artifact Registry
para armazenar imagens do domínio gcr.io
em vez do Container Registry, será necessário
conceder acesso de leitura ao Artifact Registry, em vez do Container Registry.
Registro auto-hospedado
Dependendo de como você configurou o registro auto-hospedado, talvez seja necessário usar chaves, certificados ou ambos para acessar a imagem.
Se você usar chaves, use um imagePullSecret. Os imagePullSecrets são uma maneira segura de fornecer ao cluster as credenciais necessárias para acessar um registro auto-hospedado. Para conferir um exemplo que mostra como configurar um imagePullSecret, consulte Extrair uma imagem de um registro particular na documentação do Kubernetes.
Para proteger a conexão HTTPS com seu registro, talvez você também precise de certificados, que verificam a integridade da conexão com o servidor remoto. Recomendamos o uso do Secret Manager para gerenciar sua própria autoridade certificadora autoassinada. Para saber mais, consulte Acessar registros particulares com certificados de AC particulares.
Verificar a configuração do imagePullSecret e a especificação de implantação
Se você usar um imagePullSecret, verifique se criou um secret que contém as credenciais de autenticação para extrair imagens e se todas as implantações especificam o secret definido. Para mais informações, consulte Como especificar imagePullSecrets em um pod na documentação do Kubernetes.
Verifique o escopo de acesso do nó para o repositório particular do Registro de artefatos
Se você armazenar a imagem do contêiner em um repositório particular do Artifact Registry,
é possível que o nó não tenha o escopo de acesso correto. Quando isso acontece, você pode
notar um erro de extração de imagem 401 Unauthorized
.
Para verificar e conceder o escopo de acesso, se necessário, siga estas etapas:
Identifique o nó que executa o pod:
kubectl describe pod POD_NAME | grep "Node:"
Substitua
POD_NAME
pelo nome do pod que apresenta uma falha de extração de imagem.Verifique se o nó identificado na etapa anterior tem o escopo de armazenamento correto:
gcloud compute instances describe NODE_NAME \ --zone="COMPUTE_ZONE \ --format="flattened(serviceAccounts[].scopes)"
Substitua:
NODE_NAME
: o nome do nó que você identificou na etapa anterior.COMPUTE_ZONE
: a zona do Compute Engine a que o nó pertence.
A saída precisa conter pelo menos um dos seguintes escopos de acesso:
serviceAccounts[0].scopes[0]: https://www.googleapis.com/auth/devstorage.read_only
serviceAccounts[0].scopes[0]: https://www.googleapis.com/auth/cloud-platform
Se o nó não tiver um desses escopos, o pull de imagem vai falhar.
Recrie o pool de nós ao qual o nó pertence com escopo suficiente. Como não é possível modificar os nós atuais, é necessário recriar o nó com o escopo correto.
Recomendamos que você crie o pool de nós com o escopo
gke-default
. Esse escopo oferece acesso aos seguintes escopos:https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring
https://www.googleapis.com/auth/service.management.readonly
https://www.googleapis.com/auth/servicecontrol
https://www.googleapis.com/auth/trace.append
Se o escopo
gke-default
não for adequado, conceda ao pool de nós o escopodevstorage.read_only
, que permite acesso apenas para ler dados.gke-default
Crie um pool de nós com o escopo
gke-default
:gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --scopes="gke-default"
Substitua:
NODE_POOL_NAME
: o nome do novo pool de nós.CLUSTER_NAME
: o nome do cluster atual.COMPUTE_ZONE
: a zona do Compute Engine a que o novo pool de nós pertence.
devstorage.read_only
Crie um pool de nós com o escopo
devstorage.read_only
:gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --scopes="https://www.googleapis.com/auth/devstorage.read_only"
Substitua:
NODE_POOL_NAME
: o nome do novo pool de nós.CLUSTER_NAME
: o nome do cluster atual.COMPUTE_ZONE
: a zona do Compute Engine a que o novo pool de nós pertence.
Verificar as configurações do VPC Service Controls para acessar o Artifact Registry
Se você usa o VPC Service Controls, verifique se os perímetros de serviço permitem o acesso ao Artifact Registry. Para saber mais, consulte Proteger repositórios em um perímetro de serviço na documentação do Artifact Registry.
Investigar a conectividade de rede
Durante o pull de imagem, a conectividade de rede pode impedir a conclusão do processo.
Para verificar se problemas de conectividade de rede estão causando um problema de extração de imagem, realize as investigações detalhadas nas seções a seguir:
- Investigar a resolução de DNS.
- Investigue a configuração do firewall.
- Investigue a conectividade de Internet dos endpoints de registro externos.
- Verifique se a conexão com as APIs do Google está expirando.
Investigar a resolução de DNS
Se você notar um erro de extração de imagem server misbehaving
, a resolução de DNS pode ser a
causa da falha de extração de imagem.
Para investigar problemas com a resolução de DNS, tente as seguintes soluções:
- Resolver problemas no servidor de metadados. O servidor de metadados do nó resolve todas as consultas DNS. Qualquer problema que envolva esse servidor pode interromper a resolução de nomes, impedindo a conexão com o repositório e causando a falha do pull de imagem.
- Se você usa o Cloud DNS para resolução de DNS, verifique se as zonas particulares gerenciadas, de encaminhamento, de peering e as políticas de resposta do Cloud DNS estão configuradas corretamente. Configurações incorretas nessas áreas podem interromper a resolução de DNS. Para saber mais sobre o Cloud DNS, consulte Como usar o Cloud DNS para GKE. Para receber conselhos sobre como resolver problemas do Cloud DNS no GKE, consulte Resolver problemas do Cloud DNS no GKE.
- Se você usa o kube-dns para resolução de DNS, verifique se ele está funcionando corretamente. Para receber conselhos sobre como resolver problemas do kube-dns, consulte Resolver problemas do kube-dns no GKE.
- Se os nós do cluster não tiverem endereços IP externos (o que é comum se você usar o isolamento de rede), ative o Acesso privado do Google na sub-rede usada pelo cluster e verifique se você atende aos requisitos de rede. Se você usa o Cloud NAT, Google Cloud ativa o Acesso privado do Google automaticamente.
Investigar a configuração do firewall
Quando um problema com o firewall causa uma falha no download da imagem, você pode receber a seguinte mensagem de erro:
Failed to start Download and install k8s binaries and configurations
Diagnosticar problemas com o firewall
Se você estiver usando um cluster padrão e quiser confirmar se um problema com o firewall está causando problemas com os downloads de imagem, siga estas etapas:
Use o SSH para se conectar ao nó que tem problemas:
gcloud compute ssh NODE_NAME --zone=ZONE_NAME
Substitua:
NODE_NAME
: o nome do nó.ZONE_NAME
: a zona do Compute Engine em que o nó foi criado.
Envie os registros mais recentes dos serviços
kube-node-installation.service
ekube-node-configuration.service
para arquivos de texto chamadoskube-node-installation_status.txt
ekube-node-configuration_status.txt
:systemctl status kube-node-installation.service > kube-node-installation_status.txt systemctl status kube-node-configuration.service > kube-node-configuration_status.txt
Se esses registros não incluírem informações sobre quando o pull de imagem falhou, gere uma cópia completa dos registros:
sudo journalctl -u kube-node-installation.service > kube-node-installation_logs.txt sudo journalctl -u kube-node-configuration.service > kube-node-configuration_logs.txt
Revise o conteúdo dos arquivos
kube-node-installation_status.txt
ekube-node-configuration_status.txt
. Se você encontrari/o timeout
na saída, o problema provavelmente está no firewall.
Resolver problemas com a configuração do firewall
Para resolver problemas com o firewall, tente as seguintes soluções:
Identifique e resolva todas as regras de firewall que estão bloqueando o tráfego de rede. Por exemplo, você pode ter uma regra que bloqueia o tráfego para o registro que armazena sua imagem.
Acesse os registros de fluxo de VPC:
No console do Google Cloud, acesse a página do Explorador de registros.
No painel de consulta, digite a seguinte consulta:
resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/[compute.googleapis.com%2Fvpc_flows](http://compute.googleapis.com%2Fvpc_flows)" resource.labels.subnetwork_name="SUBNET_NAME",
Substitua:
PROJECT_ID
: o ID do seu projeto do Google Cloud.SUBNET_NAME
: o nome da sub-rede.
Para saber mais, consulte Acessar registros de fluxo usando consultas na documentação da VPC.
Se você encontrar regras de firewall que estão bloqueando o tráfego necessário, atualize-as.
Se os nós do cluster não tiverem endereços IP externos (o que é comum se você usar o isolamento de rede), ative o Acesso privado do Google na sub-rede usada pelo cluster e verifique se você atende aos requisitos de rede. Se você usa o Cloud NAT, Google Cloud ativa o Acesso privado do Google automaticamente.
Investigar a conectividade de Internet dos endpoints de registro externos
Se a configuração da rede direcionar o tráfego por um endpoint de registro externo, ele poderá não ter conectividade com a Internet. Quando o endpoint
não tem acesso, o pull de imagem pode falhar, e você vai encontrar um erro de pull de imagem
i/o timeout
.
Para verificar a conectividade de rede do endpoint do registro externo ao
registro, use ping
ou traceroute
:
ping REGISTRY_ENDPOINT
Ou
traceroute REGISTRY_ENDPOINT
Substitua REGISTRY_ENDPOINT
pelo endpoint do registro.
Esse valor pode ser um nome de host ou um endereço IP.
Se você encontrar um erro na conectividade, analise as rotas da VPC:
No console do Google Cloud, acesse Rotas.
Analise a coluna Prioridade e verifique se a rota de maior prioridade está indo para uma origem que tenha acesso ao registro. As rotas com valores mais baixos têm precedência.
Investigar se a conexão com as APIs do Google está expirando
Se você usar o
isolamento de rede,
poderá ocorrer um erro em que o tempo limite da conexão com as APIs e os serviços do Google
se esgota, levando a um erro de extração de imagem i/o timeout
.
Esse erro ocorre porque os nós não conseguiram acessar uma das seguintes APIs ao tentar extrair imagens do registro:
containerregistry.googleapis.com
artifactregistry.googleapis.com
Para garantir que você possa se conectar às APIs necessárias, tente estas soluções:
- Ative o Acesso privado do Google. Os nós sem endereços IP externos precisam do Acesso privado do Google para acessar os endereços IP externos das APIs e dos serviços do Google.
- Use um domínio compatível.
Revise suas políticas de firewall:
No console do Google Cloud, acesse as políticas do Firewall.
Verifique se você tem regras que bloqueiam o tráfego TCP de saída na porta
443
para199.36.153.4/30
,199.36.153.8/30
ou qualquer intervalo de endereços IP usado pelo domínio escolhido para APIs e serviços do Google. Os intervalos de endereços IP199.36.153.4/30
e199.36.153.8/30
são usados para o Acesso privado do Google e o Acesso restrito do Google, respectivamente. O tráfego TCP na porta443
para esses intervalos é usado para acessar APIs e serviços do Google.Se você encontrar alguma dessas regras, crie uma regra de firewall de saída para permitir esse tráfego.
Se você usa o Artifact Registry, verifique se o ambiente atende aos requisitos para usar o Artifact Registry com isolamento de rede.
Verifique se os endereços IP virtuais (VIPs) (
199.36.153.4/30
ou199.36.153.8/30
) têm rotas VPC configuradas:No console do Google Cloud, acesse "Redes VPC".
Na coluna Nome, clique em padrão.
Na página de detalhes da rede VPC, clique na guia Rotas.
Revise a tabela de rotas.
Se a rede VPC contém uma rota padrão (destino
0.0.0.0/0
ou::0/0
) e o próximo salto dessa rota é o gateway de Internet padrão (Padrão de rede), use essa rota para que os VIPs acessem as APIs e os serviços do Google.Se você substituiu uma rota padrão por uma rota personalizada em que o próximo salto não é o gateway de Internet padrão, atenda aos requisitos de roteamento para APIs e serviços do Google usando o roteamento personalizado.
Investigar por que o kubelet não consegue encontrar sua imagem
Quando o kubelet não encontra sua imagem, pode aparecer um erro image not found
e falhas de pull de imagem.
Para ajudar o kubelet a encontrar sua imagem, tente as seguintes soluções:
- Revise o manifesto do seu pod e verifique se o nome da imagem e da tag de imagem estão escritos corretamente. Qualquer erro de ortografia ou formatação faz com que a extração de imagem falhe.
- Verifique se a imagem ainda existe no registro em que você a armazenou. Se a imagem tiver um caminho de registro completo, verifique se ela existe no registro do Docker que você usa. Se você fornecer apenas o nome da imagem, verifique o registro do Docker Hub.
- Se o cluster usar o isolamento de rede, tente as seguintes soluções:
Investigar por que há tempo limite ou extração lenta de imagens
Se você usar uma imagem muito grande para sua carga de trabalho do GKE, o
pull de imagem poderá expirar e causar um erro context cancelled
. Embora as imagens
não tenham um limite de tamanho definido, o erro context cancelled
geralmente indica
que o tamanho da imagem é a causa.
Você também pode notar que as transferências de imagem não falham, mas demoram muito mais do que
o normal. Se você quiser ter uma referência dos seus tempos normais de extração de imagem,
confira a entrada de registro Successfully pulled image
. Por exemplo, a mensagem de registro
a seguir mostra que a extração de imagem levou 30,313387996 segundos:
Successfully pulled image "IMAGE_ADDRESS" in 30.313387996s.
Os tempos limite e as transferências de imagens lentas têm muitas das mesmas causas. Para resolver esses problemas, tente as seguintes soluções:
- Verifique se há interrupções. Se você notou esse problema apenas durante um período específico, verifique se houve Google Cloud interrupções.
- Verifique o desempenho do disco. A E/S lenta do disco pode aumentar os tempos de extração de imagens.
Considere fazer upgrade para discos permanentes com SSDs (
pd-ssd
) ou usar discos maiores para melhorar o desempenho. Para mais conselhos, consulte Resolver problemas de desempenho do disco. - Reduza o tamanho da imagem. Por exemplo, talvez seja possível mover alguns dados das imagens do contêiner para volumes persistentes.
- Aproveite o armazenamento em cache de imagens para tempos de inicialização rápidos do pod. O GKE armazena em cache as imagens em nós. Durante um pull de imagem, o ambiente de execução do contêiner só faz o download de camadas que ainda não estão presentes no cache. Para maximizar a eficácia desse mecanismo de armazenamento em cache e minimizar os tempos de extração de imagens, estruture o Dockerfile para colocar partes da imagem que mudam com frequência (como o código do aplicativo) no final do arquivo e use imagens de base menores.
- Ative o streaming de imagens. Esse recurso pode acelerar a inicialização do pod e os downloads de imagens. Para saber mais, consulte Usar o streaming de imagem para extrair imagens de contêiner.
- Verifique se a conta de serviço padrão tem as permissões necessárias. Modificar papéis atribuídos à conta de serviço padrão pode interromper cargas de trabalho, incluindo transferências de imagem. Para mais conselhos, consulte Identificar clusters com contas de serviço de nó que não têm permissões essenciais.
- Examine as configurações de proxy. Se um proxy existir entre o cluster do GKE e um repositório não gerenciado pelo Google, isso poderá causar latência.
- Verifique se há softwares de terceiros. Alguns softwares de terceiros podem interferir na extração de imagens. Investigue se alguma ferramenta instalada recentemente pode estar causando conflitos.
Verificar se o manifesto de imagem usa a arquitetura correta
Se a imagem que você está tentando extrair foi criada para uma arquitetura de computador diferente da usada pelos pools de nós, o extração de imagem vai falhar.
Para confirmar se o manifesto da imagem usa a arquitetura correta, siga estas etapas:
Para confirmar qual arquitetura sua imagem usa, confira o manifesto dela. Por exemplo, para conferir uma imagem do Docker, execute o seguinte comando:
docker manifest inspect --verbose IMAGE_NAME
Substitua
IMAGE_NAME
pelo nome da imagem que você quer ver.O resultado será assim:
... "Platform": { "architecture": "amd64", "os": "linux" } ...
Neste exemplo, a arquitetura com suporte é
amd64
.Confira o tipo de máquina usado pelos pools de nós:
gcloud container node-pools list --cluster CLUSTER_NAME --location LOCATION
Substitua:
CLUSTER_NAME
: o nome do cluster em que o pod com erros de extração de imagem é executado.LOCATION
: a zona ou região do Compute Engine em que o nó foi criado. Por exemplo,us-central1-a
ouus-central1
.
O resultado será assim:
NAME: example-node-pool MACHINE_TYPE: e2-standard-2 DISK_SIZE_GB: 100 NODE_VERSION: 1.30.8-gke.1162000
Neste exemplo, o tipo de máquina é
e2-standard-2
.Compare os valores nos campos
architecture
eMACHINE_TYPE
e verifique se ambos são compatíveis. Por exemplo, se a imagem tiver uma arquiteturaamd64
, ela será compatível com um pool de nós que usae2-standard-2
como tipo de máquina. No entanto, se o pool de nós usart2a-standard-1
(um tipo de máquina baseado em Arm), esse tipo de máquina vai causar uma falha.Se a arquitetura da imagem não for compatível com o tipo de máquina do pool de nós, recrie a imagem para direcionar a arquitetura necessária.
Verificar a compatibilidade da versão do esquema de imagem
O uso do containerd 2.0 com uma imagem do esquema do Docker v1 faz com que os downloads de imagem falhem porque o containerd 2.0 removeu o suporte para downloads de imagens do esquema 1 do Docker no GKE 1.33. Quando esse problema é a causa da falha de extração da imagem, você pode receber a seguinte mensagem de erro:
Failed to get converter for "IMAGE_ADDRESS": Pulling Schema 1 images have been deprecated and disabled by default since containerd v2.0. As a workaround you may set an environment variable `CONTAINERD_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1`, but this will be completely removed in containerd v2.1.
Para resolver esse problema, identifique e migre essas imagens seguindo as instruções em Migrar de imagens do esquema 1 do Docker.
A seguir
Se precisar de mais ajuda, entre em contato com o Cloud Customer Care.