8.6. Enquêtant sur les questions relatives aux pod
Le Red Hat OpenShift Service sur AWS exploite le concept Kubernetes d’un pod, qui est un ou plusieurs conteneurs déployés ensemble sur un hôte. Le pod est la plus petite unité de calcul pouvant être définie, déployée et gérée sur Red Hat OpenShift Service sur AWS 4.
Après qu’un pod est défini, il est assigné à courir sur un nœud jusqu’à la sortie de ses conteneurs, ou jusqu’à ce qu’il soit retiré. En fonction de la stratégie et du code de sortie, les pods sont soit supprimés après la sortie, soit conservés afin que leurs journaux puissent être consultés.
La première chose à vérifier quand des problèmes de pod se posent est le statut de la gousse. En cas de défaillance explicite de la gousse, observez l’état d’erreur de la gousse pour identifier des problèmes spécifiques de réseau d’image, de conteneur ou de pod. Concentrez la collecte de données diagnostiques en fonction de l’état d’erreur. Examinez les messages d’événements pod, ainsi que les informations de journal des pod et des conteneurs. Diagnostiquez les problèmes de manière dynamique en accédant à des Pods en cours d’exécution sur la ligne de commande, ou démarrez un pod debug avec un accès root basé sur la configuration de déploiement d’un pod problématique.
8.6.1. Comprendre les états d’erreur de pod Copier lienLien copié sur presse-papiers!
Les échecs de pod renvoient des erreurs explicites qui peuvent être observées dans le champ d’état dans la sortie de oc get pods. L’erreur de Pod indique les défaillances liées à l’image, au conteneur et au réseau de conteneurs.
Le tableau suivant fournit une liste d’états d’erreur de pod ainsi que leurs descriptions.
État d’erreur de pod | Description |
---|---|
| Erreur de récupération d’image générique. |
| La récupération d’image a échoué et est désactivée. |
| Le nom de l’image spécifié était invalide. |
| L’inspection d’images n’a pas réussi. |
| Le PullPolicy est défini sur NeverPullImage et l’image cible n’est pas présente localement sur l’hôte. |
| Lors de la tentative de récupérer une image à partir d’un registre, une erreur HTTP a été rencontrée. |
| Le conteneur spécifié n’est pas présent ou n’est pas géré par le kubelet, à l’intérieur de la gousse déclarée. |
| L’initialisation du conteneur a échoué. |
| Aucun des conteneurs de la gousse n’a commencé avec succès. |
| Aucun des conteneurs de la gousse n’a été tué avec succès. |
| Le conteneur s’est terminé. Le kubelet ne tentera pas de le redémarrer. |
| Le conteneur ou l’image a tenté de fonctionner avec des privilèges root. |
| La création de pod sandbox n’a pas réussi. |
| La configuration du bac à sable pod n’a pas été obtenue. |
| Le bac à sable de gousse ne s’est pas arrêté avec succès. |
| L’initialisation du réseau a échoué. |
| La terminaison du réseau a échoué. |
8.6.2. Examen du statut de la gousse Copier lienLien copié sur presse-papiers!
Il est possible d’interroger l’état de la pod et les états d’erreur. Il est également possible d’interroger la configuration de déploiement associée d’un pod et d’examiner la disponibilité de l’image de base.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle d’administrateur dédié.
- L’OpenShift CLI (oc) a été installé.
- le skopeo est installé.
Procédure
Basculer dans un projet:
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Liste des pods fonctionnant dans l’espace de noms, ainsi que l’état des pod, les états d’erreur, les redémarrages et l’âge:
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Déterminer si l’espace de noms est géré par une configuration de déploiement:
oc status
$ oc status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque l’espace de noms est géré par une configuration de déploiement, la sortie inclut le nom de configuration de déploiement et une référence d’image de base.
Inspecter l’image de base référencée dans la sortie de la commande précédente:
skopeo inspect docker://<image_reference>
$ skopeo inspect docker://<image_reference>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque la référence de l’image de base n’est pas correcte, mettez à jour la référence dans la configuration de déploiement:
oc edit deployment/my-deployment
$ oc edit deployment/my-deployment
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque la configuration du déploiement change à la sortie, la configuration se redéploie automatiquement. Consultez l’état de la pod au fur et à mesure que le déploiement progresse, afin de déterminer si le problème a été résolu:
oc get pods -w
$ oc get pods -w
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Examiner les événements dans l’espace de noms pour obtenir des informations diagnostiques relatives aux défaillances de pod:
oc get events
$ oc get events
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6.3. Inspection de la gousse et des bûches de conteneurs Copier lienLien copié sur presse-papiers!
Il est possible d’inspecter les journaux des pod et des conteneurs pour détecter les avertissements et les messages d’erreur liés à des pannes explicites de pod. En fonction de la politique et du code de sortie, les journaux de pod et de conteneur restent disponibles après la fin des pods.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle d’administrateur dédié.
- Le service API est toujours fonctionnel.
- L’OpenShift CLI (oc) a été installé.
Procédure
Journaux de requêtes pour un pod spécifique:
oc logs <pod_name>
$ oc logs <pod_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Journaux de requête pour un conteneur spécifique à l’intérieur d’un pod:
oc logs <pod_name> -c <container_name>
$ oc logs <pod_name> -c <container_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Les journaux récupérés à l’aide des commandes oc logs précédentes sont composés de messages envoyés à stdout dans des pods ou des conteneurs.
Inspecter les journaux contenus dans /var/log/ dans un pod.
Liste des fichiers journaux et sous-répertoires contenus dans /var/log dans un pod:
oc exec <pod_name> -- ls -alh /var/log
$ oc exec <pod_name> -- ls -alh /var/log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Interrogez un fichier journal spécifique contenu dans /var/log dans un pod:
oc exec <pod_name> cat /var/log/<path_to_log>
$ oc exec <pod_name> cat /var/log/<path_to_log>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Liste des fichiers journaux et sous-répertoires contenus dans /var/log dans un conteneur spécifique:
oc exec <pod_name> -c <container_name> ls /var/log
$ oc exec <pod_name> -c <container_name> ls /var/log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Interrogez un fichier journal spécifique contenu dans /var/log dans un conteneur spécifique:
oc exec <pod_name> -c <container_name> cat /var/log/<path_to_log>
$ oc exec <pod_name> -c <container_name> cat /var/log/<path_to_log>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6.4. Accès aux gousses en cours d’exécution Copier lienLien copié sur presse-papiers!
Il est possible de passer en revue dynamiquement les pods en ouvrant un shell à l’intérieur d’un pod ou en obtenant un accès réseau par le biais du transfert de port.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle d’administrateur dédié.
- Le service API est toujours fonctionnel.
- L’OpenShift CLI (oc) a été installé.
Procédure
Basculez dans le projet qui contient le pod auquel vous souhaitez accéder. Ceci est nécessaire parce que la commande oc rsh n’accepte pas l’option -n namespace:
oc project <namespace>
$ oc project <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Démarrez une coque distante dans un pod:
oc rsh <pod_name>
$ oc rsh <pod_name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Dans le cas où un pod a plusieurs conteneurs, oc rsh par défaut au premier conteneur, sauf si -c <container_name> est spécifié.
Démarrez une coque distante dans un conteneur spécifique à l’intérieur d’un pod:
oc rsh -c <container_name> pod/<pod_name>
$ oc rsh -c <container_name> pod/<pod_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer une session de transfert de port vers un port sur un pod:
oc port-forward <pod_name> <host_port>:<pod_port>
$ oc port-forward <pod_name> <host_port>:<pod_port>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Entrez Ctrl+C pour annuler la session de transfert de port.
8.6.5. Démarrage des gousses de débogage avec accès root Copier lienLien copié sur presse-papiers!
Il est possible de démarrer un pod debug avec un accès root, en fonction de la configuration de déploiement ou de déploiement d’un pod problématique. Les utilisateurs de Pod fonctionnent généralement avec des privilèges non-root, mais l’exécution de dosettes de dépannage avec des privilèges racine temporaires peut être utile lors de l’enquête sur les problèmes.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle d’administrateur dédié.
- Le service API est toujours fonctionnel.
- L’OpenShift CLI (oc) a été installé.
Procédure
Démarrez un pod debug avec un accès root, basé sur un déploiement.
Obtenir le nom de déploiement d’un projet:
oc get deployment -n <project_name>
$ oc get deployment -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Démarrez un pod debug avec des privilèges root, en fonction du déploiement:
oc debug deployment/my-deployment --as-root -n <project_name>
$ oc debug deployment/my-deployment --as-root -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Démarrez un pod debug avec un accès root, basé sur une configuration de déploiement.
Obtenir le nom de configuration de déploiement d’un projet:
oc get deploymentconfigs -n <project_name>
$ oc get deploymentconfigs -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Démarrez un pod debug avec des privilèges root, en fonction de la configuration de déploiement:
oc debug deploymentconfig/my-deployment-configuration --as-root -n <project_name>
$ oc debug deploymentconfig/my-deployment-configuration --as-root -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Il est possible d’ajouter -- <command> aux commandes oc debug précédentes pour exécuter des commandes individuelles dans un pod debug, au lieu d’exécuter un shell interactif.
8.6.6. Copier des fichiers vers et depuis des pods et conteneurs Copier lienLien copié sur presse-papiers!
Il est possible de copier des fichiers vers et à partir d’un pod pour tester les modifications de configuration ou recueillir des informations de diagnostic.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle d’administrateur dédié.
- Le service API est toujours fonctionnel.
- L’OpenShift CLI (oc) a été installé.
Procédure
Copiez un fichier dans un pod:
oc cp <local_path> <pod_name>:/<path> -c <container_name>
$ oc cp <local_path> <pod_name>:/<path> -c <container_name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le premier conteneur dans un pod est sélectionné si l’option -c n’est pas spécifiée.
Copiez un fichier à partir d’un pod:
oc cp <pod_name>:/<path> -c <container_name> <local_path>
$ oc cp <pod_name>:/<path> -c <container_name> <local_path>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le premier conteneur dans un pod est sélectionné si l’option -c n’est pas spécifiée.
NoteAfin que oc cp fonctionne, le binaire goudron doit être disponible dans le conteneur.