Pourquoi les pods affichent-ils des erreurs pull QPS exceeded lors de la récupération d'images?
Lors du démarrage des pods, vous pouvez rencontrer des erreurs indiquant que les opérations de récupération d'images sont limitées, avec des messages du type pull QPS exceeded.
Lorsque vous déployez des pods qui doivent extraire des images de conteneurs, vous pouvez observer les symptômes suivants :
- Messages d'erreur contenant
pull QPS exceededlors du démarrage du pod - Lenteur de l'extraction des images, en particulier lors de l'extraction de plusieurs images de grande taille
- Les gousses mettent plus de temps que prévu à atteindre l'état
Running - Les opérations de tirage d'images semblent être restreintes ou limitées en taux
La cause la plus probable du ralentissement du téléchargement d'images accompagné d'erreurs pull QPS exceeded est que vos nœuds de travail VPC atteignent la limite de bande passante d'E/S disque.
Les nœuds de travail VPC ont des limites de bande passante différentes en fonction de leur configuration :
- Nœuds de travail standard (sans stockage secondaire): Limité à 393 Mbps (49 MB/sec) pour les opérations d'E/S sur disque
- Nœuds de travail avec stockage secondaire: Limites de bande passante plus élevées en fonction du niveau de stockage sélectionné
Lorsque plusieurs pods tentent d'extraire simultanément de grandes images de conteneurs :
- Chaque opération de tirage d'image consomme de la bande passante d'E/S sur disque
- La demande combinée de bande passante peut rapidement saturer la limite de 49 MB/sec
- Une fois la limite atteinte, les opérations de tirage d'images ralentissent considérablement
- Kubernetes peut signaler des erreurs
pull QPS exceededlorsqu'il limite les opérations
Pour déterminer si vous atteignez la limite de bande passante des nœuds de travail du VPC, utilisez les fonctionnalités de surveillance du site IBM Cloud.
Vérifier la bande passante des E/S du disque
-
Naviguez vers Observe → Metrics dans la console OpenShift pour votre cluster.
-
Utilisez la requête suivante Prometheus pour surveiller les taux de lecture et d'écriture des disques :
irate(node_disk_read_bytes_total[2m]) + irate(node_disk_written_bytes_total[2m]) -
Interpréter les résultats :
- Si l'un des dispositifs affiche des valeurs proches ou égales à 49M (49 MB/sec ), vous atteignez la limite de la bande passante.
- La saturation de la bande passante est confirmée par des valeurs proches de cette limite lors d'opérations de tirage d'images.
- Des pics multiples à cette limite indiquent des contraintes répétées de bande passante.
Vérifier les temps de tirage des images
Vous pouvez également vérifier directement les délais d'extraction des images :
oc get events -A | grep -E "Successfully pulled image"
Cette commande indique la durée de chaque tirage d'image, ce qui vous permet d'identifier les tirages lents.
Résolution du problème
Solution principale : Utiliser des pools de travailleurs avec un stockage secondaire
La solution recommandée est d'utiliser des pools de travailleurs avec un stockage secondaire. Le stockage secondaire avec 10iops-tier fournit une bande passante E/S dédiée qui n'est pas en concurrence avec le disque de démarrage,
ce qui se traduit par un débit beaucoup plus élevé pour les extractions d'images simultanées et des temps de démarrage des pods plus rapides.
-
Créez un nouveau pool de travailleurs avec un stockage secondaire.
- Lorsque vous créez un nouveau pool de travailleurs, sélectionnez une saveur avec stockage secondaire.
- Utilisez l'une des options de stockage
10iops-tierpour des performances optimales.
-
Migrez vos charges de travail vers le nouveau pool.
-
Vidanger et supprimer l'ancien pool de travailleurs une fois la migration terminée.
Autres considérations
Si la mise à niveau vers un système de stockage secondaire est la solution principale, vous pouvez aussi.. :
- Réduire la taille des images
- Utiliser des constructions en plusieurs étapes et minimiser les couches
- Utiliser la mise en cache des images
- Pré-tirer les images les plus utilisées vers les nœuds de travail
- Optimiser imagePullPolicy
- Configurez les spécifications de votre pod pour réduire les tirages inutiles :
- Utilisez
imagePullPolicy: IfNotPresentpour extraire des images uniquement si elles n'existent pas déjà sur le nœud. - Évitez
imagePullPolicy: Alwaysà moins que vous n'ayez spécifiquement besoin d'obtenir la dernière version à chaque fois. - Pour les charges de travail de production, utilisez des balises d'image spécifiques, et non
latest, combinées avecIfNotPresentpour minimiser les tirages.
- Utilisez
- Mise en place d'une surveillance et d'alertes
- Mettre en place des alertes pour les taux d'E/S disque élevés et soutenus qui approchent les 49 Mo/sec.
- Surveillez les temps d'extraction des images dans le cadre de vos mesures de déploiement.
- Suivre les temps de démarrage des pods pour identifier la dégradation des performances.