Si vous travaillez avec Kubernetes depuis longtemps, vous avez probablement rencontré la condition ImagePullbackoff. Si vous n'êtes pas familier avec ce problème, cela peut être frustrant. Ainsi, dans cet article, vous vous conduquerez à travers les bases de ce problème, comment le dépanner, quelles sont les raisons typiques et par où commencer si vous y faites face.
Quelle est l'erreur ImagePullbackoff?
Le problème ImagePullbackoff est causé par votre runtime de conteneur de Kubernetes Container incapable de récupérer l'image à partir d'un registre de conteneurs public ou privé. Kubernetes tirera constamment l'image avec un délai de recul croissant, comme indiqué par le composant de backoff. À chaque essai, Kubernetes augmentera le retard jusqu'à ce qu'il respecte la restriction de cinq minutes.
Cela peut sembler une déclaration générale pour suggérer que l'exécution du conteneur (que Docker, le conteneur ou autre chose) ne récupére pas l'image du registre, mais regardons les différentes causes que vous pouvez trouver dans la section suivante.
Les sections précédentes passeront en revue les différentes raisons pour lesquelles votre pod peut être dans l'état ImagePullbackoff lorsque vous démarrez votre conteneur. Vous apprendrez également à dépanner et à résoudre cette erreur redoutée.
Ce qui provoque l'erreur ImagePullbackoff?
Voici quelques-unes des raisons pour lesquelles votre pod peut être coincée dans l'état ImagePullbackoff:
Comment dépanner ImagePullbackoff?
Examinons quelques-unes des causes probables énumérées dans la liste à puces.
1. L'image de conteneur n'est pas disponible, ou le nom utilisé est inexact
Le problème est généralement généré s'il y a une faute de frappe ou le fait que l'image poussée vers le registre des conteneurs échoue, mais vous faites référence à une image qui n'est pas là. Essayons de recréer cela en faisant une cosse avec un nom d'image fictif. La commande suivante y parvient.
Comme vous pouvez le voir, le pod est créé.
Si nous essayons d'obtenir les détails du pod avec la commande get pod comme vous pouvez le voir ci-dessous.
$ Kubectl get podIci, il est montré que l'image n'est pas là et nous ne pouvons pas le tirer.
Vous pouvez utiliser la commande de décrire Kubectl dans le but de découvrir la cause profonde et de trouver plus d'informations sur ce problème. Parce que la commande produit beaucoup de sortie, nous afficherons simplement les sections pertinentes à notre discussion. Le message d'erreur réel est vu dans la sortie suivante sous les événements de la colonne de message:
$ Kubectl décrire le pod newAppCertaines sections du résultat produit sont les suivantes après avoir exécuté la commande décrite.
2. Le tag n'existe pas
Il est possible que les balises d'image que vous essayez d'obtenir aient été retirées, ou que vous ayez tapé le nom de balise erronée. Dans certaines circonstances, votre pod restera coincé dans l'état ImagePullbackoff une fois de plus, comme indiqué dans l'échantillon de code ci-dessous. Pour reproduire ce problème, nous avons intentionnellement utilisé le nom de balise erroné, les lates au lieu des derniers.
La commande ci-dessus a créé le pod avec le nom que vous avez donné.
Après cela, nous obtenons les détails du pod avec la commande get pod.
$ kubectl get podEn conséquence, l'image tire échoue.
Maintenant, nous utilisons à nouveau la commande décrite pour comprendre la cause de ce statut.
$ kubectl décrire le pod apptwoDans cette section des événements, vous pouvez voir la raison de l'erreur ImagePullbackoff.
La raison est clairement montrée ici pour votre meilleure compréhension.
3. Mauvais références et registre d'images privés
Ici, nous essayons de reproduire le problème et pour cela, nous avons mangé en train de faire une pod qui essaie de tirer une image d'un registre privé.
$ kubectl exécuter AppThee --image = docker.io / hiyou / nameoFimageLa commande ci-dessus donne le résultat suivant.
Après cela, nous avons exécuté la commande décrite.
La commande décrite montre les détails globaux du pod et mentionne également les raisons de l'erreur ImagePullbackoff.
Nous n'avons pas ajouté de secret à Kubernetes ni inclus une référence dans la définition du pod. Le pod restera coincé dans l'état ImagePullbackoff une fois de plus, et la notification vérifie que l'accès au registre est refusé:
Vous pouvez créer un secret avec la commande kubectl ci-dessous pour corriger cette erreur. La commande kubectl est utilisée puis pour créer un secret pour un registre Docker (privé).
4. Limites de taux de registre
Si vous vérifiez certaines de vos informations d'identification telles que l'URL de registre, les détails et le nom de la balise, vous pouvez obtenir ImagePullbackoff en raison des limites de taux de registre. Vous ne pouvez maintenant tirer que 100 conteneurs toutes les six heures sur Docker Hub. Si vous fournissez vos détails de connexion, cela grimpera à 200 tirages toutes les six heures. Dans un cluster vivant avec de nombreux gousses fréquemment déployées, cette limite pourrait être atteinte rapidement.
Vous devrez attendre que le capuchon soit atteint après une limite de temps spécifique. Kubernetes devrait désormais pouvoir tirer avec succès l'image et démarrer vos pods.
Envisagez d'utiliser votre registre en grappe avec un proxy pour mettre en cache vos images pertinentes. Cela peut vous aider à rester à l'intérieur des contraintes de taux en réduisant le nombre de fois que vous frappez les serveurs de Docker.
Conclusion
Lorsqu'un nœud ne tire pas une image, les pods Kubernetes entrent dans l'état ImagePullbackoff. Kubelet tentera régulièrement la traction, donc les problèmes temporaires ne nécessiteront aucune intervention manuelle. Cet article a discuté de ImagePullbackoff et de trois sources potentielles du problème. Bien qu'il puisse y avoir plusieurs causes, la lecture du message d'erreur peut rapidement révéler la vraie cause du problème. Si vous examinez et suivez les procédures ci-dessus, la résolution de ce problème doit être simple.