Comment déboguer «ImagePullBackOff»?

123

Tout d'un coup, je ne peux pas déployer certaines images qui auraient pu être déployées auparavant. J'ai le statut de pod suivant:

[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 

L'application ne démarre tout simplement pas. Le pod n'essaye pas d'exécuter le conteneur. Depuis la page Événement, j'ai Back-off pulling image "172.30.84.25:5000/default/arix@sha256:d326. J'ai vérifié que je pouvais tirer l'image avec la balise avec docker pull.

J'ai également vérifié le journal du dernier conteneur. Il a été fermé pour une raison quelconque. Je pense que le pod devrait au moins essayer de le redémarrer.

Je n'ai plus d'idées pour déboguer les problèmes. Que puis-je vérifier davantage?

Xiao Peng - ZenUML.com
la source
S'agit-il d'une configuration multi-machines? Si tel est le cas, vérifiez que vous pouvez extraire de tous les nœuds. Si ce n'est pas le cas, activez la connexion à --loglevel = 5 sur le nœud et redémarrez - vous devriez voir des informations imprimées décrivant la tentative d'extraire l'image et les erreurs incluses.
Clayton
Que s'est-il passé après le redémarrage avec loglevel = 5?
lvthillo
2
Avez-vous résolu le problème? quelqu'un peut-il expliquer ce problème de «ImagePullBackOff»? (des images existent dans mes 'images docker')
ItayB
J'ai obtenu cela en utilisant la mauvaise région pour mon repo. J'ai oublié d'ajouter eu. à --image = eu.gcr.io / $ PROJECT_ID / ...
Clemens Tolboom
Dans mon cas, c'était le mauvais nom de balise pour l'image transmise. J'ai changé le nom du TAG, ce qui a résolu le problème.
Tara Prasad Gurung

Réponses:

121

Vous pouvez utiliser la syntaxe ' describe pod '

Pour une utilisation OpenShift:

oc describe pod <pod-id>  

Pour la vanille Kubernetes:

kubectl describe pod <pod-id>  

Examinez les événements de la sortie. Dans mon cas, il montre Back-off tirant l'image coredns / coredns: dernier

Dans ce cas, l'image coredns / coredns: latest ne peut pas être extraite d'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\""

Étapes de débogage supplémentaires

  1. essayez d'extraire l'image du docker et la balise manuellement sur votre ordinateur
  2. Identifiez le nœud en faisant un 'kubectl / oc get pods -o wide'
  3. ssh dans le nœud (si vous le pouvez) qui ne peut pas extraire l'image du docker
  4. vérifiez que le nœud peut résoudre le DNS du registre docker en exécutant un ping.
  5. essayez d'extraire manuellement l'image du docker sur le nœud
  6. Si vous utilisez un registre privé, vérifiez que votre secret existe et que le secret est correct. Votre secret doit également être dans le même espace de noms. Merci swenzel
  7. Certains registres ont des pare-feu qui limitent l'accès aux adresses IP. Le pare-feu peut bloquer l'extraction
  8. Certains CI créent des déploiements avec des secrets de docker temporaires. Le secret expire donc au bout de quelques jours (vous demandez des échecs de production ...)
rjdkolb
la source
3
De plus, si vous utilisez un référentiel d'images privé, assurez-vous que vos secrets d'extraction d'image existent, n'ont pas de faute de frappe et qu'ils sont dans le bon espace de noms.
swenzel
Dans le cas d'un référentiel d'images privé, assurez-vous également de référencer les secrets d'extraction d'image dans votre pod en utilisant l'entrée "imagePullSecrets".
Donato Szilagyi
1
Il existe également un long article de blog décrivant comment déboguer cela en profondeur ici: managedkube.com/kubernetes/k8sbot/troubleshooting/…
gar
1

Avez-vous essayé de modifier pour voir ce qui ne va pas (j'avais le mauvais emplacement de l'image)

kubectl edit pods arix-3-yjq9w

ou même supprimer votre pod?

kubectl delete arix-3-yjq9w
Clemens Tolboom
la source
0

J'ai oublié de pousser l'image étiquetée 1.0.8 vers l'ECR (hub d'images AWS) ... Si vous utilisez Helm et effectuez une mise à niveau en:

mise à niveau de la barre minta-user ./src/services/user/helm-chart

assurez-vous que la balise d'image à l'intérieur de values.yaml est poussée (vers ECR ou Docker Hub, etc.) par exemple: (c'est mon helm-chart / values.yaml)

replicaCount: 1

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

vous devez vous assurer que l'image: 1.0.8 est poussée!

dang
la source
0

J'étais confronté au problème similaire, mais au lieu d'un, tous mes pods n'étaient pas prêts et affichaient le statut Prêt 0/1 Quelque chose comme entrez la description de l'image ici

J'ai essayé beaucoup de choses mais j'ai finalement trouvé que le contexte n'était pas correctement défini. Veuillez utiliser la commande suivante et assurez-vous que vous êtes dans le bon contexte

kubectl config get-contextts

Dur
la source
0

Sur GKE, si le pod est mort, il est préférable de vérifier les événements. Il montrera plus en détail ce qu'est l'erreur.

Dans mon cas, j'avais:

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

Il s'est avéré que l'image était endommagée d'une manière ou d'une autre. Après l'avoir repoussé et déployé avec le nouveau hachage, cela a fonctionné à nouveau.

Vincent Gerris
la source
-10

Exécuter la connexion Docker

Pousser l'image vers Docker Hub

Recréer le pod

Cela a résolu le problème pour moi. J'espère que ça aide.

Shyla
la source