7.3. Résolution des problèmes liés à l'exécution du conteneur CRI-O
7.3.1. A propos du moteur d'exécution de conteneurs CRI-O Copier lienLien copié sur presse-papiers!
CRI-O est une implémentation de moteur de conteneur natif de Kubernetes qui s'intègre étroitement avec le système d'exploitation pour fournir une expérience Kubernetes efficace et optimisée. Le moteur de conteneurs CRI-O s'exécute en tant que service systemd sur chaque nœud de cluster OpenShift Container Platform.
Lorsque des problèmes d'exécution des conteneurs surviennent, vérifiez l'état du service crio
systemd sur chaque nœud. Rassemblez les journaux de l'unité CRI-O journald des nœuds qui présentent des problèmes d'exécution des conteneurs.
7.3.2. Vérification de l'état du moteur d'exécution CRI-O Copier lienLien copié sur presse-papiers!
Vous pouvez vérifier l'état du moteur d'exécution des conteneurs CRI-O sur chaque nœud du cluster.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
).
Procédure
Examinez l'état du CRI-O en interrogeant le service
crio
systemd sur un nœud, à l'intérieur d'un pod de débogage.Démarrer un pod de débogage pour un nœud :
oc debug node/my-node
$ oc debug node/my-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Définissez
/host
comme répertoire racine dans le shell de débogage. Le pod de débogage monte le système de fichiers racine de l'hôte dans/host
au sein du pod. En changeant le répertoire racine en/host
, vous pouvez exécuter les binaires contenus dans les chemins d'exécution de l'hôte :chroot /host
# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteLes nœuds de cluster OpenShift Container Platform 4.12 exécutant Red Hat Enterprise Linux CoreOS (RHCOS) sont immuables et s'appuient sur les opérateurs pour appliquer les changements de cluster. L'accès aux nœuds de cluster à l'aide de SSH n'est pas recommandé et les nœuds seront altérés en tant que accessed. Cependant, si l'API OpenShift Container Platform n'est pas disponible, ou si le kubelet ne fonctionne pas correctement sur le nœud cible, les opérations
oc
seront impactées. Dans de telles situations, il est possible d'accéder aux nœuds en utilisantssh core@<node>.<cluster_name>.<base_domain>
à la place.Vérifiez si le service
crio
systemd est actif sur le nœud :systemctl is-active crio
# systemctl is-active crio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Affiche un résumé plus détaillé de l'état de
crio.service
:systemctl status crio.service
# systemctl status crio.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.3. Collecte des journaux d'unité du CRI-O Copier lienLien copié sur presse-papiers!
Si vous rencontrez des problèmes avec CRI-O, vous pouvez obtenir les journaux de l'unité CRI-O d'un nœud.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. - Your API service is still functional.
-
Vous avez installé l'OpenShift CLI (
oc
). - Vous disposez des noms de domaine complets du plan de contrôle ou des machines du plan de contrôle.
Procédure
Rassembler les journaux de l'unité CRI-O journald. L'exemple suivant collecte les journaux de tous les nœuds du plan de contrôle (au sein de la grappe) :
oc adm node-logs --role=master -u crio
$ oc adm node-logs --role=master -u crio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rassemble les journaux de l'unité CRI-O journald d'un nœud spécifique :
oc adm node-logs <node_name> -u crio
$ oc adm node-logs <node_name> -u crio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Si l'API n'est pas fonctionnelle, examinez les journaux en utilisant SSH à la place. Remplacez
<node>.<cluster_name>.<base_domain>
par les valeurs appropriées :ssh core@<node>.<cluster_name>.<base_domain> journalctl -b -f -u crio.service
$ ssh core@<node>.<cluster_name>.<base_domain> journalctl -b -f -u crio.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteLes nœuds de cluster OpenShift Container Platform 4.12 exécutant Red Hat Enterprise Linux CoreOS (RHCOS) sont immuables et dépendent des opérateurs pour appliquer les changements de cluster. L'accès aux nœuds de cluster à l'aide de SSH n'est pas recommandé et les nœuds seront altérés comme accessed. Avant d'essayer de collecter des données de diagnostic via SSH, vérifiez si les données collectées en exécutant
oc adm must gather
et d'autres commandesoc
sont suffisantes. Cependant, si l'API OpenShift Container Platform n'est pas disponible, ou si le kubelet ne fonctionne pas correctement sur le nœud cible, les opérationsoc
seront impactées. Dans de telles situations, il est possible d'accéder aux nœuds en utilisantssh core@<node>.<cluster_name>.<base_domain>
.
7.3.4. Nettoyage de l'entrepôt CRI-O Copier lienLien copié sur presse-papiers!
Vous pouvez effacer manuellement la mémoire éphémère de CRI-O si vous rencontrez les problèmes suivants :
Un nœud ne peut s'exécuter sur aucun pod et cette erreur apparaît :
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to mount container XXX: error recreating the missing symlinks: error reading name of symlink for XXX: open /var/lib/containers/storage/overlay/XXX/link: no such file or directory
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to mount container XXX: error recreating the missing symlinks: error reading name of symlink for XXX: open /var/lib/containers/storage/overlay/XXX/link: no such file or directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous ne pouvez pas créer un nouveau conteneur sur un nœud de travail et l'erreur "can't stat lower layer" apparaît :
can't stat lower layer ... because it does not exist. Going through storage to recreate the missing symlinks.
can't stat lower layer ... because it does not exist. Going through storage to recreate the missing symlinks.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Votre nœud est dans l'état
NotReady
après une mise à niveau du cluster ou si vous tentez de le redémarrer. -
L'implémentation de l'exécution du conteneur (
crio
) ne fonctionne pas correctement. -
Vous ne pouvez pas démarrer un shell de débogage sur le nœud utilisant
oc debug node/<nodename>
car l'instance d'exécution du conteneur (crio
) ne fonctionne pas.
Suivez cette procédure pour effacer complètement la mémoire du CRI-O et résoudre les erreurs.
Prérequis :
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
).
Procédure
Utiliser
cordon
sur le nœud. Cela permet d'éviter qu'une charge de travail ne soit planifiée si le nœud passe à l'étatReady
. Vous saurez que la planification est désactivée lorsqueSchedulingDisabled
apparaîtra dans votre section Statut :oc adm cordon <nodename>
$ oc adm cordon <nodename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Drainer le nœud en tant qu'utilisateur cluster-admin :
oc adm drain <nodename> --ignore-daemonsets --delete-emptydir-data
oc adm drain <nodename> --ignore-daemonsets --delete-emptydir-data
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteL'attribut
terminationGracePeriodSeconds
d'un pod ou d'un modèle de pod contrôle la période de terminaison gracieuse. Cet attribut est fixé par défaut à 30 secondes, mais peut être personnalisé par application si nécessaire. S'il est fixé à plus de 90 secondes, le module peut être marqué commeSIGKILLed
et ne pas se terminer avec succès.Lorsque le nœud revient, connectez-vous à nouveau au nœud via SSH ou la console. Ensuite, connectez-vous à l'utilisateur root :
ssh core@node1.example.com sudo -i
$ ssh core@node1.example.com $ sudo -i
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Arrêter manuellement le kubelet :
systemctl stop kubelet
# systemctl stop kubelet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Arrêter les conteneurs et les cosses :
Utilisez la commande suivante pour arrêter les pods qui ne se trouvent pas dans le site
HostNetwork
. Ils doivent être supprimés en premier car leur suppression dépend des pods du plugin de mise en réseau, qui se trouvent dans le siteHostNetwork
... for pod in $(crictl pods -q); do if [[ "$(crictl inspectp $pod | jq -r .status.linux.namespaces.options.network)" != "NODE" ]]; then crictl rmp -f $pod; fi; done
.. for pod in $(crictl pods -q); do if [[ "$(crictl inspectp $pod | jq -r .status.linux.namespaces.options.network)" != "NODE" ]]; then crictl rmp -f $pod; fi; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Arrêter toutes les autres nacelles :
crictl rmp -fa
# crictl rmp -fa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Arrêter manuellement les services crio :
systemctl stop crio
# systemctl stop crio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Après avoir exécuté ces commandes, vous pouvez effacer complètement le stockage éphémère :
crio wipe -f
# crio wipe -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Démarrer le service crio et kubelet :
systemctl start crio systemctl start kubelet
# systemctl start crio # systemctl start kubelet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vous saurez que le nettoyage a fonctionné si les services crio et kubelet sont démarrés et si le nœud est dans l'état
Ready
:oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready, SchedulingDisabled master 133m v1.25.0
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready, SchedulingDisabled master 133m v1.25.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Marquez le nœud comme étant planifiable. Vous saurez que l'ordonnancement est activé lorsque
SchedulingDisabled
n'aura plus d'état :oc adm uncordon <nodename> $ oc adm uncordon <nodename>
oc adm uncordon <nodename> $ oc adm uncordon <nodename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready master 133m v1.25.0
NAME STATUS ROLES AGE VERSION ci-ln-tkbxyft-f76d1-nvwhr-master-1 Ready master 133m v1.25.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow