Como depurar “ImagePullBackOff”?


120

De repente, não consigo implantar algumas imagens que poderiam ser implantadas antes. Obtive o seguinte status de pod:

[root@webdev2 origin]# oc get pods 
NAME                      READY     STATUS             RESTARTS   AGE 
arix-3-yjq9w              0/1       ImagePullBackOff   0          10m 
docker-registry-2-vqstm   1/1       Running            0          2d 
router-1-kvjxq            1/1       Running            0          2d 

O aplicativo simplesmente não inicia. O pod não está tentando executar o contêiner. Na página de eventos, eu tenho Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326. Eu verifiquei que posso puxar a imagem com a tag com docker pull.

Também verifiquei o registro do último contêiner. Foi fechado por algum motivo. Acho que o pod deveria pelo menos tentar reiniciá-lo.

Fiquei sem ideias para depurar os problemas. O que posso verificar mais?


Esta é uma configuração de várias máquinas? Se sim, verifique se você pode extrair de todos os nós. Caso contrário, ative o log para --loglevel = 5 no nó e reinicie - você deve ver as informações impressas descrevendo a tentativa de obter a imagem e quaisquer erros incluídos.
Clayton

O que saiu após reiniciar com loglevel = 5?
lvthillo

2
Você resolveu o problema? alguém pode explicar esse problema de 'ImagePullBackOff'? (as imagens existem em minhas 'imagens do docker')
ItayB

Consegui isso usando a região errada para meu repo. Esqueci de adicionar eu. para --image = eu.gcr.io / $ PROJECT_ID / ...
Clemens Tolboom

No meu caso, era o nome de tag errado para a imagem que está sendo passada. Mudei o nome do TAG, o que resolveu o problema.
Tara Prasad Gurung

Respostas:


118

Você pode usar a sintaxe ' descrever pod '

Para usar OpenShift:

oc describe pod <pod-id>  

Para vanilla Kubernetes:

kubectl describe pod <pod-id>  

Examine os eventos da saída. No meu caso, mostra Back-off puxando imagem coredns / coredns: mais recente

Neste caso, a imagem coredns / coredns: latest não pode ser extraída da Internet.

Events:
  FirstSeen LastSeen    Count   From                SubObjectPath           Type        Reason      Message
  --------- --------    -----   ----                -------------           --------    ------      -------
  5m        5m      1   {default-scheduler }                        Normal      Scheduled   Successfully assigned coredns-4224169331-9nhxj to 192.168.122.190
  5m        1m      4   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal      Pulling     pulling image "coredns/coredns:latest"
  4m        26s     4   {kubelet 192.168.122.190}   spec.containers{coredns}    Warning     Failed      Failed to pull image "coredns/coredns:latest": Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your internet connection or if you are behind a proxy.
  4m        26s     4   {kubelet 192.168.122.190}                   Warning     FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ErrImagePull: "Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your Internet connection or if you are behind a proxy."

  4m    2s  7   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal  BackOff     Back-off pulling image "coredns/coredns:latest"
  4m    2s  7   {kubelet 192.168.122.190}                   Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ImagePullBackOff: "Back-off pulling image \"coredns/coredns:latest\""

Etapas adicionais de depuração

  1. tente puxar a imagem do docker e marcar manualmente no seu computador
  2. Identifique o nó fazendo um 'kubectl / oc get pods -o wide'
  3. ssh para o nó (se possível) que não pode puxar a imagem docker
  4. verifique se o nó pode resolver o DNS do registro do docker executando um ping.
  5. tente puxar a imagem do docker manualmente no nó
  6. Se você estiver usando um registro privado, verifique se o seu segredo existe e se ele está correto. Seu segredo também deve estar no mesmo namespace. Obrigado swenzel
  7. Alguns registros têm firewalls que limitam o acesso ao endereço IP. O firewall pode bloquear o pull
  8. Alguns CIs criam implantações com segredos docker temporários. Portanto, o segredo expira após alguns dias (você está pedindo falhas de produção ...)

3
Além disso, no caso de você usar um repositório de imagens privado, certifique-se de que seus segredos de extração de imagem existam, não tenham erros de digitação e estejam no namespace correto.
swenzel de

No caso de repositório de imagens privado, também certifique-se de fazer referência aos segredos de extração de imagem em seu pod usando a entrada "imagePullSecrets".
Donato Szilagyi

1
Há também uma longa postagem no blog que descreve como depurar isso em detalhes aqui: managedkube.com/kubernetes/k8sbot/trou problems
gar

1

Você já tentou editar para ver o que há de errado (eu tinha a localização da imagem errada)

kubectl edit pods arix-3-yjq9w

ou até mesmo deletar seu pod?

kubectl delete arix-3-yjq9w

0

Esqueci de enviar a imagem marcada 1.0.8 para o ECR (hub de imagens da AWS) ... Se você estiver usando o Helm e atualizar por:

atualização do helm minta-user ./src/services/user/helm-chart

certifique-se de que a tag de imagem dentro de values.yaml seja enviada (para ECR ou Docker Hub etc.), por exemplo: (este é meu helm-chart / values.yaml)

replicaCount: 1

image:
   repository:dkr.ecr.us-east-1.amazonaws.com/minta-user
   tag: 1.0.8

você precisa ter certeza de que a imagem: 1.0.8 foi enviada!


0

Eu estava enfrentando um problema semelhante, mas em vez de um, todos os meus pods não estavam prontos e exibindo o status Pronto 0/1 Algo como insira a descrição da imagem aqui

Tentei muitas coisas, mas finalmente descobri que o contexto não estava definido corretamente. Use o seguinte comando e certifique-se de que está no contexto correto

kubectl config get-contexts


0

No GKE, se o pod estiver inativo, é melhor verificar os eventos. Ele mostrará com mais detalhes do que se trata o erro.

No meu caso, eu tinha:

Failed to pull image "gcr.io/project/imagename@sha256:c8e91af54fc17faa1c49e2a05def5cbabf8f0a67fc558eb6cbca138061a8400a":
 rpc error: code = Unknown desc = error pulling image configuration: unknown blob

Acontece que a imagem estava danificada de alguma forma. Depois de repush e implantar com o novo hash, funcionou novamente.


-9

Executar login do docker

Envie a imagem para o hub do docker

Recriar pod

Isso resolveu o problema para mim. Espero que ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.