Utilisez ce guide pour diagnostiquer les exceptions de nœud, appliquer des méthodes courantes de dépannage et résoudre les problèmes afin de rétablir les nœuds dans un état sain.
Contenu
Catégorie | Contenu |
Procédure de diagnostic | |
Méthodes courantes de dépannage | |
Problèmes courants et solutions |
|
Procédure de diagnostic
-
Vérifiez si un nœud présente des anomalies. Pour plus d'informations, consultez Vérifier l'état d'un nœud.
-
Si un nœud est dans l'état Not Ready, suivez les étapes ci-dessous pour résoudre le problème :
Examinez les informations sur l'état du nœud pour vérifier si les conditions du nœud, telles que PIDPressure, DiskPressure et MemoryPressure, sont définies sur True. Si une condition de nœud est True, résolvez le problème en fonction de cette condition. Pour obtenir des solutions, consultez Exceptions dockerd - RuntimeOffline, Mémoire insuffisante sur le nœud - MemoryPressure et Inodes insuffisants sur le nœud - InodesPressure.
-
Vérifiez les composants clés et les journaux du nœud.
-
Kubelet
Vérifiez l'état, les journaux et la configuration de kubelet pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si kubelet présente des anomalies, consultez Gestion des exceptions Kubelet.
-
Dockerd
Vérifiez l'état, les journaux et la configuration de dockerd pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si dockerd présente des anomalies, consultez Exceptions dockerd - RuntimeOffline.
-
Containerd
Vérifiez l'état, les journaux et la configuration de containerd pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si containerd présente des anomalies, consultez Exceptions containerd - RuntimeOffline.
-
NTP
Vérifiez l'état, les journaux et la configuration du service NTP pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si le service NTP présente des anomalies, consultez Exceptions NTP - NTPProblem.
-
Collectez et examinez les journaux de diagnostic du nœud. Pour plus d'informations, consultez Collecter les journaux de diagnostic d'un nœud.
Vérifiez les données de surveillance du nœud pour détecter une charge de ressources anormale (telle que CPU, mémoire et réseau). Pour plus d'informations, consultez Vérifier la surveillance du nœud. Si la charge du nœud est anormale, consultez CPU insuffisant sur le nœud et Mémoire insuffisante sur le nœud - MemoryPressure pour obtenir des solutions.
-
Si un nœud est dans l'état Unknown, suivez les étapes ci-dessous pour résoudre le problème :
Vérifiez que l'instance ECS sous-jacente est dans l'état Running.
-
Vérifiez les composants clés du nœud.
-
Kubelet
Vérifiez l'état, les journaux et la configuration de kubelet pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si kubelet présente des anomalies, consultez Gestion des exceptions Kubelet.
-
Dockerd
Vérifiez l'état, les journaux et la configuration de dockerd pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si dockerd présente des anomalies, consultez Exceptions dockerd - RuntimeOffline.
-
Containerd
Vérifiez l'état, les journaux et la configuration de containerd pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si containerd présente des anomalies, consultez Exceptions containerd - RuntimeOffline.
-
NTP
Vérifiez l'état, les journaux et la configuration du service NTP pour détecter d'éventuelles anomalies. Pour plus d'informations, consultez Vérifier les composants clés d'un nœud.
Si le service NTP présente des anomalies, consultez Exceptions NTP - NTPProblem.
-
Vérifiez la connectivité réseau du nœud. Pour plus d'informations, consultez Vérifier les groupes de sécurité du nœud. Si une exception réseau se produit sur le nœud, consultez Exceptions réseau du nœud pour obtenir une solution.
Collectez et examinez les journaux de diagnostic du nœud. Pour plus d'informations, consultez Collecter les journaux de diagnostic d'un nœud.
Vérifiez les données de surveillance du nœud pour détecter une charge de ressources anormale (telle que CPU, mémoire et réseau). Pour plus d'informations, consultez Vérifier la surveillance du nœud. Si la charge du nœud est anormale, consultez CPU insuffisant sur le nœud et Mémoire insuffisante sur le nœud - MemoryPressure pour obtenir des solutions.
-
Si cette procédure de diagnostic ne résout pas le problème, utilisez la fonctionnalité de diagnostic des nœuds dans Container Service for Kubernetes (ACK). Pour plus d'informations, consultez Diagnostic des nœuds.
Méthodes courantes de dépannage
Diagnostiquer les pannes de nœud
En cas de panne d'un nœud, utilisez la fonctionnalité de diagnostic des exceptions d'ACK pour analyser le problème.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Nodes, localisez le nœud cible et choisissez dans la colonne Actions.
Dans le panneau qui s'affiche, cliquez sur Create Diagnosis. Consultez ensuite les résultats du diagnostic et les suggestions de correction dans la console.
Vérifier les détails du nœud
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Nodes, cliquez sur le nom du nœud cible ou sur Details dans la colonne Actions pour afficher ses détails.
Vérifier l'état du nœud
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
-
Sur la page Nodes, consultez l'état du nœud.
Si l'état du nœud est Ready, le nœud fonctionne comme prévu.
-
Si l'état du nœud n'est pas Ready, cliquez sur le nom du nœud cible ou sur Details dans sa colonne Actions pour afficher ses détails.
RemarquePour collecter des informations sur des conditions telles que
InodesPressure,DockerOfflineetRuntimeOffline, vous devez installer node-problem-detector dans votre cluster et créer un K8s Event Center. L'option de création d'un K8s Event Center est sélectionnée par défaut lors de la création du cluster. Pour plus d'informations, consultez la rubrique Créer et utiliser un centre d'événements K8s.
Vérifier les événements du nœud
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
-
Sur la page Nodes, cliquez sur le nom du nœud cible ou sur Details dans la colonne Actions pour afficher ses détails.
Les événements du nœud s'affichent en bas de la page des détails.
Collecter les journaux de diagnostic du nœud
Utilisez le Container Intelligence Service dans la console pour collecter les journaux de diagnostic. Pour plus d'informations, consultez la rubrique Diagnostic des nœuds.
Utilisez un script pour collecter les journaux de diagnostic. Pour plus d'informations, consultez la rubrique Comment collecter les informations de diagnostic d'un cluster Kubernetes ?.
Vérifier les composants clés du nœud
-
kubelet
-
Vérifiez l'état de kubelet
Connectez-vous au nœud et exécutez la commande suivante pour vérifier l'état de kubelet :
systemctl status kubeletSortie attendue :
[root@iZm5eali3mx0qwqo68eobrZ ~]# systemctl status kubelet ● kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/kubelet.service.d └─10-kubeadm.conf Active: active (running) since Thu 2025-06-12 13:18:45 CST; 28min ago Docs: http://kubernetes.io/docs/ Main PID: 6171 (kubelet) Tasks: 12 (limit: 98626) Memory: 88.2M CGroup: /system.slice/kubelet.service └─6171 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/manifests --v=3 --authorization Jun 12 13:47:12 kubelet[6171]: I0612 13:47:12.250117 6171 prober.go:116] "Probe succeeded" probeType="Liveness" pod="kube-system/coredns-5b97654649-jkbtq" podUID="0530c82c-a012-4f Jun 12 13:47:12 kubelet[6171]: I0612 13:47:12.250144 6171 prober.go:116] "Probe succeeded" probeType="Readiness" pod="kube-system/coredns-5b97654649-jkbtq" podUID="0530c82c-a012-4 Jun 12 13:47:12 kubelet[6171]: I0612 13:47:12.716032 6171 prober.go:116] "Probe succeeded" probeType="Liveness" pod="kube-system/csi-plugin-bqdjr" podUID="33fd9325-c75d-458d-adc3- Jun 12 13:47:13 kubelet[6171]: I0612 13:47:13.574947 6171 kubelet_pods.go:1151] "Clean up pod workers for terminated pods" Jun 12 13:47:13 kubelet[6171]: I0612 13:47:13.575713 6171 kubelet_pods.go:1201] "Clean up probes for terminated pods" Jun 12 13:47:13 kubelet[6171]: I0612 13:47:13.575724 6171 kubelet_pods.go:1205] "Clean up orphaned pod statuses" Jun 12 13:47:13 kubelet[6171]: I0612 13:47:13.575731 6171 kubelet_pods.go:1209] "Clean up orphaned pod user namespace allocations" Jun 12 13:47:13 kubelet[6171]: I0612 13:47:13.575736 6171 kubelet_pods.go:1221] "Clean up orphaned pod directories" Jun 12 13:47:13 kubelet[6171]: I0612 13:47:13.575775 6171 kubelet_pods.go:1232] "Clean up mirror pods" Jun 12 13:47:13 kubelet[6171]: I0612 13:47:13.575807 6171 kubelet_pods.go:1374] "Clean up orphaned pod cgroups" lines 1-22/22 (END) -
Vérifiez les journaux de kubelet
Connectez-vous au nœud et exécutez la commande suivante pour afficher les journaux de kubelet. Pour plus d'informations sur la consultation des journaux de kubelet, consultez la section Collecter les journaux de diagnostic du nœud.
journalctl -u kubelet -
Vérifiez la configuration de kubelet
Connectez-vous au nœud et exécutez la commande suivante pour afficher la configuration de kubelet :
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
-
-
Runtime
-
Vérifiez dockerd
-
Vérifiez l'état de dockerd
Connectez-vous au nœud et exécutez la commande suivante pour vérifier l'état de dockerd :
systemctl status dockerSortie attendue :
#systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-03-02 15:11:46 CST; 5 days ago Docs: https://docs.docker.com Main PID: 4330 (dockerd) Tasks: 75 Memory: 8.3G CGroup: /system.slice/docker.service └─4330 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Mar 02 15:19:29 xxx dockerd[4330]: time="2022-03-02T15:19:29.418689546+08:00" level=info msg="Attempting next endpoint for pull a...eaders Mar 02 15:22:20 xxx dockerd[4330]: time="2022-03-02T15:22:20.888769038+08:00" level=warning msg="Error getting v2 registry: Get h...eaders Mar 02 15:22:20 xxx dockerd[4330]: time="2022-03-02T15:22:20.888912991+08:00" level=info msg="Attempting next endpoint for pull a...eaders Mar 02 15:23:25 xxx dockerd[4330]: time="2022-03-02T15:23:25.487947465+08:00" level=warning msg="Seccomp is not enabled in your k...rofile -
Vérifiez les journaux de dockerd
Connectez-vous au nœud et exécutez la commande suivante pour afficher les journaux de dockerd. Pour plus d'informations sur la consultation des journaux de dockerd, consultez la section Collecter les journaux de diagnostic du nœud.
journalctl -u docker -
Vérifiez la configuration de dockerd
Connectez-vous au nœud et exécutez la commande suivante pour afficher la configuration de dockerd :
cat /etc/docker/daemon.json
-
-
Vérifiez containerd
-
Vérifiez l'état de containerd
Connectez-vous au nœud et exécutez la commande suivante pour vérifier l'état de containerd :
systemctl status containerdSortie attendue :
[root@iZm5eali3mx0qwqo68eobrZ ~]# systemctl status containerd ● containerd.service - containerd container runtime Loaded: loaded (/etc/systemd/system/containerd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2025-06-12 13:18:44 CST; 29min ago Docs: https://containerd.io Main PID: 5994 (containerd) Tasks: 153 Memory: 3.5G CGroup: /system.slice/containerd.service ├─ 5994 /usr/bin/containerd ├─ 6589 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id b4ad8b28c61fa573e04bc641901bd64b15adb1d4a... xxx -address /run/containerd/containerd.sock ├─ 6592 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id eb828cfb114bd404d7781f72b55ed4ee1e9743b7d... xxx -address /run/containerd/containerd.sock ├─ 6666 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 92bf24db851fcaf65ed9c3ddc9210b61169623158... xxx -address /run/containerd/containerd.sock ├─ 6726 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 96d44ff7503b876227e7d287a730cac5b50b5183f1... xxx -address /run/containerd/containerd.sock ├─ 6727 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3707c088fec2d14f9ec2c78beccf5f3e1f0a18a6b... xxx -address /run/containerd/containerd.sock ├─ 6766 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id b390b71290b772958626a0cc943fb678c7fec4ef5... xxx -address /run/containerd/containerd.sock ├─ 9501 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 40c0f850c4c003144bbc5a17bcb5b7f15ad121862... xxx -address /run/containerd/containerd.sock ├─ 9567 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 3b07c32bf4fe84fde20177efdcffabd2cd93ac02a... xxx -address /run/containerd/containerd.sock ├─ 9633 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id d181fcabeebca990b1298072f91da4fbb251b666c... xxx -address /run/containerd/containerd.sock └─11643 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id f3744bcb95b522bc64a5a88dd4c49a231c082f5d79... xxx -address /run/containerd/containerd.sock Jun 12 13:19:53 containerd[5994]: time="2025-06-12T13:19:53.013508035+08:00" level=error msg="ContainerStatus for \"f3744bcb95b522bc64a5a88dd4c49a231c082f5d790e64e6f835760b83e7b280\"" Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.708151565+08:00" level=info msg="ImageCreate event &ImageCreate{Name:registry-cn-qingdao-vpc.ack.aliyuncs.com/acs/loongcol..." Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.710172874+08:00" level=info msg="ImageCreate event &ImageCreate{Name:sha256:e705a85d376f9fdecd0f1b2ebce63d85f8392de70a9636..." Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.713591809+08:00" level=info msg="PullImage \"registry-cn-qingdao-vpc.ack.aliyuncs.com/acs/loongcollector:v3.0.11.0-915c655..." Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.713969883+08:00" level=info msg="ImageCreate event &ImageCreate{Name:registry-cn-qingdao-vpc.ack.aliyuncs.com/acs/loongcol..." Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.717628440+08:00" level=info msg="CreateContainer within sandbox \"f3744bcb95b522bc64a5a88dd4c49a231c082f5d790e64e6f835760b..." Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.732237135+08:00" level=info msg="CreateContainer within sandbox \"f3744bcb95b522bc64a5a88dd4c49a231c082f5d790e64e6f835760b..." Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.735512597+08:00" level=info msg="StartContainer for \"e7c6a20368f9c20900848fbcec81d5145d73caa8c4decaae660e0ea89dd64c28\"" Jun 12 13:19:54 containerd[5994]: time="2025-06-12T13:19:54.771464238+08:00" level=info msg="StartContainer for \"e7c6a20368f9c20900848fbcec81d5145d73caa8c4decaae660e0ea89dd64c28\"..." Jun 12 13:20:47 containerd[5994]: time="2025-06-12T13:20:47.246563467+08:00" level=error msg="ContainerStatus for \"f3744bcb95b522bc64a5a88dd4c49a231c082f5d790e64e6f835760b83e7b280\"" lines 1-30/30 (END) -
Vérifiez les journaux de containerd
Connectez-vous au nœud et exécutez la commande suivante pour afficher les journaux de containerd. Pour plus d'informations sur la consultation des journaux de containerd, consultez la section Collecter les journaux de diagnostic du nœud.
journalctl -u containerd
-
-
-
Vérifier NTP
-
Vérifiez l'état du service NTP
Connectez-vous au nœud et exécutez la commande suivante pour vérifier l'état du processus chronyd :
systemctl status chronydSortie attendue :
[root@iZm5eali3mx0qwqo68eobrZ ~]# systemctl status chronyd ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2025-06-12 13:18:22 CST; 20min ago Docs: man:chronyd(8) man:chrony.conf(5) Main PID: 1603 (chronyd) Tasks: 1 (limit: 98626) Memory: 732.0K CGroup: /system.slice/chronyd.service └─1603 /usr/sbin/chronyd Jun 12 13:18:22 iZm5eali3mx0qwqo68eobrZ systemd[1]: chronyd.service: Succeeded. Jun 12 13:18:22 iZm5eali3mx0qwqo68eobrZ systemd[1]: Stopped NTP client/server. Jun 12 13:18:22 iZm5eali3mx0qwqo68eobrZ systemd[1]: Starting NTP client/server... Jun 12 13:18:22 iZm5eali3mx0qwqo68eobrZ chronyd[1603]: chronyd version 4.5 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG) Jun 12 13:18:22 iZm5eali3mx0qwqo68eobrZ chronyd[1603]: Frequency -35.639 +/- 2.058 ppm read from /var/lib/chrony/drift Jun 12 13:18:22 iZm5eali3mx0qwqo68eobrZ systemd[1]: Started NTP client/server. Jun 12 13:18:23 iZm5eali3mx0qwqo68eobrZ chronyd[1603]: System clock was stepped by 0.000000 seconds Jun 12 13:18:27 iZm5eali3mx0qwqo68eobrZ chronyd[1603]: Selected source 100.100.61.88 (ntp.cloud.aliyuncs.com) Jun 12 13:18:27 iZm5eali3mx0qwqo68eobrZ chronyd[1603]: System clock wrong by 1.476188 seconds xxx -
Vérifiez les journaux du service NTP
Connectez-vous au nœud et exécutez la commande suivante pour afficher les journaux NTP :
journalctl -u chronyd
-
Vérifier les données de surveillance du nœud
-
Cloud Monitor
ACK s'intègre à CloudMonitor. Consultez les données de surveillance de base des instances ECS correspondantes dans la console CloudMonitor. Pour plus d'informations sur la surveillance des nœuds avec CloudMonitor, consultez la rubrique Surveiller les nœuds.
-
Managed Service for Prometheus
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
Sur la page Prometheus Monitoring, cliquez sur l'onglet Node Monitoring, puis sur l'onglet Nodes.
Sur la page Nodes, sélectionnez un nœud pour afficher ses métriques de surveillance, telles que l'utilisation du CPU, de la mémoire et du disque.
Vérifier les groupes de sécurité du nœud
Pour plus d'informations sur la vérification des groupes de sécurité des nœuds, consultez les rubriques Présentation des groupes de sécurité et Configurer les groupes de sécurité du cluster.
Dépannage des exceptions kubelet
Cause
Les causes typiques incluent un processus Kubelet anormal, une exception du runtime de conteneur ou une configuration Kubelet incorrecte.
Symptômes
Le statut de Kubelet est inactive.
Solution
-
Exécutez la commande suivante pour redémarrer Kubelet. Cette action n'affecte pas les conteneurs en cours d'exécution.
systemctl restart kubelet -
Une fois Kubelet redémarré, connectez-vous au nœud et exécutez la commande suivante pour vérifier son statut.
systemctl status kubelet -
Si le statut de Kubelet reste anormal, connectez-vous au nœud et exécutez la commande suivante pour afficher ses journaux.
journalctl -u kubeletSi les journaux contiennent des messages d'erreur spécifiques, utilisez les mots-clés de ces messages pour résoudre le problème.
-
Si la configuration de Kubelet est incorrecte, exécutez les commandes suivantes pour la corriger.
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf # Modify the Kubelet configuration. systemctl daemon-reload;systemctl restart kubelet # Reload the configuration and restart Kubelet.
Exception dockerd : RuntimeOffline
Cause
Les causes courantes incluent une configuration dockerd non valide, une charge de processus élevée ou une charge de nœud élevée.
Symptômes
Le statut de dockerd est inactive.
Le statut de dockerd est active (running), mais le daemon fonctionne mal, ce qui provoque une exception de nœud. Des commandes telles que
docker psetdocker execpeuvent échouer.La condition RuntimeOffline du nœud est True.
Une exception dockerd déclenche une alerte si vous avez configuré l'alerting pour les exceptions de nœud de cluster. Pour plus d'informations sur la configuration des règles d'alerte, consultez Gestion des alertes ACK.
Solution
-
Exécutez la commande suivante pour redémarrer dockerd :
systemctl restart docker -
Connectez-vous au nœud et exécutez la commande suivante pour vérifier le statut de dockerd :
systemctl status docker -
Si le statut reste anormal, vérifiez les journaux de dockerd :
journalctl -u docker
Exception containerd : RuntimeOffline
Cause
Ce problème est souvent causé par une configuration containerd non valide, une charge de processus élevée ou une charge de nœud élevée.
Le statut de containerd est inactive.
La condition RuntimeOffline du nœud est True.
Si l'alerting est configuré pour les exceptions de nœud de cluster, vous serez notifié lorsqu'une exception containerd se produit. Pour plus d'informations, consultez Gestion des alertes ACK.
Solution
-
Exécutez la commande suivante pour redémarrer containerd :
systemctl restart containerd -
Une fois containerd redémarré, connectez-vous au nœud et exécutez la commande suivante pour vérifier son statut :
systemctl status containerd -
Si le statut reste anormal après le redémarrage, connectez-vous au nœud et exécutez la commande suivante pour afficher les journaux de containerd :
journalctl -u containerd
Exception NTP : NTPProblem
Cause
Un processus NTP anormal cause généralement ce problème.
Symptômes
Le statut de chronyd est inactive.
La condition de nœud NTPProblem est True.
Si vous avez configuré des alertes pour les exceptions de nœud de cluster, vous recevrez une alerte lorsque le service de temps d'un nœud est anormal. Pour plus d'informations sur la configuration des alertes, consultez Gestion des alertes ACK.
Solution
-
Exécutez la commande suivante pour redémarrer chronyd :
systemctl restart chronyd -
Une fois chronyd redémarré, connectez-vous au nœud et exécutez la commande suivante pour vérifier que son statut est normal :
systemctl status chronyd -
Si le statut est toujours anormal après le redémarrage, connectez-vous au nœud et exécutez la commande suivante pour afficher les journaux de chronyd :
journalctl -u chronyd
PLEG is not healthy
Cause
Le Pod Lifecycle Event Generator (PLEG) enregistre les événements tout au long du cycle de vie du pod, tels que les démarrages et les terminaisons de conteneurs. L'exception PLEG is not healthy est généralement causée par des problèmes avec le runtime de conteneur sur le nœud ou un défaut dans la version systemd du nœud.
Symptômes
Le statut du nœud est NotReady.
-
Les journaux de kubelet contiennent l'entrée suivante.
I0729 11:20:59.245243 9575 kubelet.go:1823] skipping pod synchronization - PLEG is not healthy: pleg was last seen active 3m57.138893648s ago; threshold is 3m0s. Si vous avez configuré des alertes pour les exceptions de nœud de cluster, vous recevez une alerte lorsqu'une exception PLEG se produit. Pour configurer les alertes, consultez Gestion des alertes ACK.
Solution
Redémarrez séquentiellement les composants clés du nœud dockerd/containerd et kubelet, puis vérifiez si le nœud a récupéré.
-
Si le redémarrage des composants clés ne résout pas le problème, redémarrez le nœud. Consultez redémarrer une instance pour obtenir des instructions.
AvertissementLe redémarrage du nœud peut interrompre vos charges de travail. Procédez avec prudence.
Si le nœud exécute CentOS 7.6, consultez ["Erreur \"PLEG is not healthy\" dans les journaux kubelet sur CentOS 7.6"]()Erreur "Reason:KubeletNotReady Message:PLEG is not healthy:" dans les journaux kubelet sur CentOS 7.6.
Ressources de planification de nœud insuffisantes
Cause
Ce problème survient généralement lorsque les nœuds du cluster disposent de ressources insuffisantes.
Symptômes
Si les nœuds du cluster manquent de ressources, les pods ne peuvent pas être planifiés et vous pouvez voir l'un des messages d'erreur suivants :
Ressources CPU insuffisantes : 0/2 nodes are available: 2 Insufficient cpu
Ressources mémoire insuffisantes : 0/2 nodes are available: 2 Insufficient memory
Stockage éphémère insuffisant : 0/2 nodes are available: 2 Insufficient ephemeral-storage
Le planificateur utilise les formules suivantes pour déterminer si un nœud manque de ressources :
Un nœud manque de CPU si : La demande de CPU du pod > (CPU allouable du nœud - CPU alloué du nœud)
Un nœud manque de mémoire si : La demande de mémoire du pod > (Mémoire allouable du nœud - Mémoire allouée du nœud)
Un nœud manque de stockage éphémère si : La demande de stockage éphémère du pod > (Stockage éphémère allouable du nœud - Stockage éphémère alloué du nœud)
Un pod ne sera pas planifié sur un nœud si ses demandes totales de ressources dépassent les ressources disponibles du nœud (allouables moins allouées).
Exécutez la commande suivante pour afficher les détails de l'allocation des ressources d'un nœud :
kubectl describe node [$nodeName]
Notez les sections suivantes dans la sortie :
Allocatable:
cpu: 3900m
ephemeral-storage: 114022843818
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 12601Mi
pods: 60
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 725m (18%) 6600m (169%)
memory 977Mi (7%) 16640Mi (132%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Dans la sortie :
Allocatable : Le montant total des ressources allouables (telles que le CPU, la mémoire et le stockage éphémère) sur le nœud.
Allocated resources : Les ressources totales allouées aux pods sur le nœud.
Solution
Pour résoudre ce problème, réduisez la charge du nœud en utilisant l'une des méthodes suivantes :
Supprimez les pods inutiles pour réduire la charge du nœud. Pour plus d'informations, consultez Gérer les pods.
Ajustez la configuration des ressources pour vos pods en fonction de vos besoins métier. Pour plus d'informations, consultez Définir les demandes et limites de CPU et de mémoire pour un conteneur.
Vous pouvez utiliser la fonctionnalité de profilage des ressources fournie par ACK pour obtenir des suggestions de configuration des ressources pour les conteneurs basées sur les données historiques d'utilisation des ressources. Cela simplifie la configuration des demandes et des limites de ressources pour les conteneurs. Pour plus d'informations, consultez Profilage des ressources.
Ajoutez de nouveaux nœuds au cluster. Pour plus d'informations, consultez Créer et gérer des pools de nœuds.
Mettez à niveau les configurations des nœuds. Pour plus d'informations, consultez Mettre à niveau ou rétrograder les configurations d'un nœud de travail.
Pour plus d'informations, consultez CPU de nœud insuffisant, Mémoire de nœud insuffisante - MemoryPressure et Espace disque de nœud insuffisant - DiskPressure.
Ressources CPU de nœud insuffisantes
Cause
Les conteneurs qui consomment des ressources CPU excessives sur un nœud causent généralement ce problème.
Symptômes
Des ressources CPU insuffisantes peuvent entraîner un statut anormal du nœud.
Si des alertes sont configurées pour les exceptions de nœud de cluster, une alerte est déclenchée lorsque l'utilisation du CPU du nœud atteint ou dépasse 85 %. Pour plus d'informations sur la configuration des alertes, consultez Gestion des alertes ACK.
Solution
Examinez la courbe d'utilisation du CPU du nœud pour identifier quand l'exception s'est produite et quels processus sur le nœud consomment des ressources CPU excessives. Pour plus d'informations, consultez Vérifier les données de surveillance d'un nœud.
Réduisez la charge sur le nœud. Pour plus d'informations, consultez Ressources de nœud insuffisantes pour la planification.
-
Si nécessaire, redémarrez le nœud affecté. Pour plus d'informations, consultez Redémarrer une instance.
AvertissementLe redémarrage du nœud peut interrompre vos services. Procédez avec prudence.
Mémoire de nœud insuffisante - MemoryPressure
Cause
Ce problème survient généralement lorsque les conteneurs sur un nœud consomment une mémoire excessive, laissant le nœud avec une mémoire disponible insuffisante.
Symptômes
Lorsque la mémoire disponible d'un nœud tombe en dessous du seuil spécifié par
memory.available, la condition MemoryPressure du nœud est définie sur True et les conteneurs sur le nœud sont expulsés. Pour plus d'informations sur l'expulsion des nœuds, consultez Expulsion sous pression de nœud.-
Lorsqu'un nœud manque de mémoire, vous pouvez observer les symptômes courants suivants :
La condition MemoryPressure du nœud est True.
-
Lorsque les conteneurs sur le nœud sont expulsés :
Les événements pour les conteneurs expulsés incluent le message The node was low on resource: memory.
Les événements du nœud incluent le message attempting to reclaim memory.
Un OOM système peut également se produire, ce qui est indiqué par le message System OOM dans les événements du nœud.
Vous pouvez configurer des alertes pour être notifié lorsque l'utilisation de la mémoire d'un nœud atteint ou dépasse 85 %. Consultez Gestion des alertes ACK pour savoir comment faire.
Solution
Analysez la courbe d'utilisation de la mémoire dans les données de surveillance du nœud pour identifier précisément quand le problème s'est produit, et inspectez les processus en cours d'exécution pour détecter des fuites de mémoire. Pour plus d'informations, consultez Vérifier les données de surveillance d'un nœud.
Réduisez la charge sur le nœud. Pour plus d'informations, consultez Ressources de nœud insuffisantes pour la planification.
-
Si nécessaire, redémarrez le nœud affecté. Pour plus d'informations, consultez Redémarrer une instance.
AvertissementAttention : Le redémarrage d'un nœud peut interrompre vos services.
Inodes insuffisants - InodesPressure
Cause
Ce problème survient généralement lorsque les conteneurs d'un nœud consomment un nombre excessif d'inodes.
Symptômes
Lorsque le nombre d'inodes disponibles sur un nœud descend en dessous du seuil
inodesFree, la condition InodesPressure est définie sur True et les conteneurs du nœud sont expulsés. Pour plus d'informations, consultez node-pressure eviction.-
En cas de pénurie d'inodes sur un nœud, vous pouvez observer les messages d'erreur courants suivants :
La condition de nœud InodesPressure est définie sur True.
-
Lors de l'expulsion des conteneurs du nœud :
Les événements liés aux conteneurs expulsés contiennent le message : The node was low on resource: inodes.
Les événements du nœud contiennent le message : attempting to reclaim inodes.
Si vous avez configuré des alertes pour les exceptions de nœud dans votre cluster, vous recevez une notification lorsqu'un nœud manque d'inodes. Pour savoir comment configurer ces alertes, consultez la rubrique ACK alert management.
Solution
Examinez la courbe d'utilisation des inodes dans les données de surveillance du nœud afin d'identifier le moment où l'exception s'est produite et de détecter les processus consommant un nombre excessif d'inodes. Pour plus d'informations, consultez la section Vérification des données de surveillance des nœuds.
Pour résoudre d'autres problèmes connexes, reportez-vous à la rubrique Résolution des problèmes « no space left » sous Linux.
PIDs insuffisants - NodePIDPressure
Cause
Ce problème se produit lorsque les conteneurs d'un nœud consomment trop de PIDs, épuisant ainsi les PIDs disponibles du nœud.
Symptômes
Lorsque les PIDs disponibles d'un nœud descendent en dessous du seuil
pid.available, la condition NodePIDPressure est définie sur True et les pods du nœud sont expulsés. Pour plus d'informations sur l'expulsion des nœuds, consultez Node-pressure Eviction.Si vous avez configuré des alertes pour les exceptions de nœud dans votre cluster, vous recevez une alerte lorsqu'un nœud manque de PIDs. Pour savoir comment configurer ces alertes, consultez la rubrique ACK alert management.
Solution
-
Exécutez les commandes suivantes pour vérifier le nombre maximal de PIDs sur le nœud et le PID le plus élevé actuellement utilisé.
sysctl kernel.pid_max # Check the maximum number of PIDs. ps -eLf|awk '{print $2}' | sort -rn| head -n 1 # Check the current highest PID in use. -
Exécutez la commande suivante pour identifier les cinq processus consommant le plus de PIDs.
ps -elT | awk '{print $4}' | sort | uniq -c | sort -k1 -g | tail -5Sortie attendue :
# The first column shows the number of PIDs used by a process. The second column shows the process ID. 73 9743 75 9316 76 2812 77 5726 93 5691 Utilisez l'ID de processus pour trouver le processus et le pod correspondants. Analysez les raisons pour lesquelles le processus consomme trop de PIDs et optimisez le code de l'application.
Réduisez la charge sur le nœud. Pour plus d'informations, consultez la section Ressources de nœud insuffisantes pour la planification.
-
Si nécessaire, redémarrez le nœud concerné. Pour plus d'informations, consultez la rubrique Redémarrage d'une instance.
AvertissementLe redémarrage du nœud peut interrompre vos services. Procédez avec prudence.
Espace disque insuffisant - DiskPressure
Cause
En général, un nœud manque d'espace disque parce que les conteneurs consomment trop d'espace ou que les images de conteneur sont trop volumineuses.
Symptômes
Lorsque l'espace disque disponible pour les images de conteneur sur un nœud descend en dessous du seuil
imagefs.available, la condition DiskPressure du nœud devient True.Lorsque l'espace disque disponible sur le système de fichiers racine du nœud descend en dessous du seuil
nodefs.available, tous les pods de ce nœud sont expulsés. Pour plus d'informations sur l'expulsion due à la pression du nœud, consultez node-pressure eviction.-
Lorsqu'un nœud manque d'espace disque, vous observez généralement les messages d'erreur suivants :
La condition DiskPressure du nœud est définie sur True.
Après l'exécution du garbage collection des images, si l'espace disque reste inférieur au seuil de santé (par défaut : 80 %), vous pouvez trouver le mot-clé failed to garbage collect required amount of images dans les événements du nœud.
-
Lors de l'expulsion des pods du nœud :
Dans les événements des pods expulsés, vous pouvez trouver le mot-clé The node was low on resource: [DiskPressure].
Dans les événements du nœud, vous pouvez trouver des mots-clés tels que attempting to reclaim ephemeral-storage ou attempting to reclaim nodefs.
Si vous avez configuré des alertes pour les exceptions de nœud, vous recevez une alerte si l'utilisation du disque d'un nœud atteint 85 % ou plus. Pour savoir comment configurer ces alertes, consultez la rubrique ACK alert management.
Solution
Consultez les données de surveillance du nœud pour afficher la courbe d'utilisation du disque. Cela vous aide à identifier le moment où l'utilisation a augmenté brusquement et à déterminer si des processus consomment un espace disque excessif. Pour plus d'informations, consultez la section Vérification des données de surveillance des nœuds.
Supprimez les fichiers inutiles du disque pour libérer de l'espace. Pour obtenir des instructions, consultez la rubrique Résolution des problèmes « no space left » sous Linux.
Selon les exigences de votre charge de travail, définissez les demandes et les limites de ressources pour
ephemeral-storagedans les spécifications de vos pods. Pour plus d'informations, consultez la rubrique Définition des limites de ressources CPU et mémoire pour un conteneur.Utilisez les services de stockage Alibaba Cloud au lieu des volumes hostPath. Pour plus d'informations, consultez la rubrique Stockage.
Augmentez la taille du disque du nœud.
Réduisez la charge du nœud. Pour plus d'informations, consultez la section Ressources de nœud insuffisantes pour la planification.
Adresses IP de nœud insuffisantes - InvalidVSwitchId.IpNotEnough
Cause
Ce problème se produit lorsqu'un nombre excessif de conteneurs sur un nœud épuise les adresses IP disponibles.
Symptômes
-
Les pods ne parviennent pas à démarrer et restent bloqués dans l'état ContainerCreating. Les journaux du pod affichent un message d'erreur contenant le mot-clé InvalidVSwitchId.IpNotEnough. Pour savoir comment afficher les journaux des pods, consultez la rubrique Dépannage des exceptions de pod.
time="2020-03-17T07:03:40Z" level=warning msg="Assign private ip address failed: Aliyun API Error: RequestId: 2095E971-E473-4BA0-853F-0C41CF52651D Status Code: 403 Code: InvalidVSwitchId.IpNotEnough Message: The specified VSwitch \"vsw-AAA\" has not enough IpAddress., retrying" Si vous avez configuré des alertes pour votre cluster, vous recevez une alerte lorsqu'un nœud manque d'adresses IP. Pour savoir comment configurer ces alertes, consultez la rubrique ACK alert management.
Solution
Réduisez le nombre de conteneurs sur le nœud. Pour plus d'informations, consultez la section Ressources de nœud insuffisantes pour la planification. Pour d'autres solutions connexes, consultez Adresses IP de vSwitch insuffisantes dans un environnement réseau TerwayQue faire si un vSwitch fournit des adresses IP insuffisantes dans un cluster Terway et la rubrique J'ai étendu les plages CIDR des vSwitch en mode Terway mais je ne peux toujours pas allouer d'adresses IP aux pods. Que faire ?.
Exceptions réseau du nœud
Cause
Ce problème résulte généralement d'un état anormal du nœud, d'une mauvaise configuration des groupes de sécurité ou d'une charge réseau élevée.
Symptômes
Vous ne pouvez pas vous connecter au nœud.
L'état du nœud est Unknown.
Si vous avez configuré des alertes pour les exceptions de nœud du cluster, vous recevez une alerte lorsque l'utilisation de la bande passante Internet sortante du nœud atteint 85 % ou plus. Pour plus d'informations, consultez la rubrique ACK alert management.
Solution
-
Si vous ne pouvez pas vous connecter au nœud, procédez comme suit :
Vérifiez si l'instance de nœud est dans l'état Running.
Vérifiez la configuration du groupe de sécurité du nœud. Pour plus d'informations, consultez la section Vérification des groupes de sécurité des nœuds.
-
Si la charge réseau du nœud est élevée, procédez comme suit :
Examinez la courbe d'utilisation du réseau du nœud dans les données de surveillance pour identifier les pods consommant une bande passante réseau excessive. Pour plus d'informations, consultez la section Vérification des données de surveillance des nœuds.
Utilisez des politiques réseau pour contrôler le trafic des pods. Pour plus d'informations, consultez la rubrique Politiques réseau dans les clusters ACK.
Redémarrages inattendus du nœud
Cause
Ce problème est généralement causé par une charge anormale du nœud.
Symptômes
Pendant le redémarrage du nœud, son état est NotReady.
Si vous avez configuré des alertes pour les exceptions de nœud du cluster, vous recevez une alerte lorsqu'un nœud redémarre de manière inattendue. Pour plus d'informations, consultez la rubrique ACK alert management.
Solution
-
Exécutez la commande suivante pour vérifier l'heure de redémarrage du nœud.
last rebootSortie attendue :
[root@iZoj203tgmxxx /root] #last reboot reboot system boot xxx Tue Mar 22 06:26 - 11:49 (1+05:22) reboot system boot xxx Fri Oct 15 05:27 - 11:49 (159+06:22) wtmp begins Fri Oct 15 05:27:03 2021 Examinez les données de surveillance du nœud et investigatez toute anomalie de ressource en fonction de l'heure de redémarrage. Pour plus d'informations, consultez la section Vérification des données de surveillance des nœuds.
Vérifiez les journaux du noyau du nœud et recherchez les journaux d'erreur correspondant à l'heure de redémarrage. Pour plus d'informations, consultez la section Collecte des journaux de diagnostic des nœuds.
E/S disque élevées dues à auditd ou erreur « audit: backlog limit exceeded »
Cause
Par défaut, certains nœuds existants d'un cluster sont configurés avec des règles auditd qui surveillent les opérations Docker. Lorsque ces nœuds utilisent le runtime de conteneur Docker, les règles déclenchent l'enregistrement par le système des journaux d'audit pour les activités liées à Docker. Dans certaines conditions, telles que des redémarrages fréquents de conteneurs, des applications écrivant un grand volume de fichiers en peu de temps ou des bugs du noyau, le système peut générer un nombre excessif de journaux d'audit. Cela peut occasionnellement provoquer des E/S disque élevées pour le processus auditd ou une erreur audit: backlog limit exceeded dans le journal système.
Symptômes
Ce problème affecte uniquement les nœuds utilisant le runtime de conteneur Docker. Un nœud concerné peut présenter les symptômes suivants :
Lorsque vous exécutez la commande iotop -o -d 1, la sortie indique que la valeur
DISK WRITEpour le processus auditd reste constamment à 1 Mo/s ou plus.Lorsque vous exécutez la commande dmesg -d, la sortie contient des journaux avec le mot-clé
audit_printk_skb, tel queaudit_printk_skb: 100 callbacks suppressed.Lorsque vous exécutez la commande dmesg -d, la sortie contient le mot-clé
audit: backlog limit exceeded.
Solution
Suivez ces étapes pour vérifier que la configuration auditd est la cause du problème :
Connectez-vous à un nœud du cluster.
-
Exécutez la commande suivante pour vérifier les règles d'audit.
sudo auditctl -l | grep -- ' -k docker'Si la sortie contient la ligne suivante, la configuration auditd est la cause du problème.
-w /var/lib/docker -k docker
Si la vérification confirme que ce problème affecte les nœuds de votre cluster, choisissez l'une des solutions suivantes.
-
Mettre à niveau le cluster
Mettez à niveau votre cluster pour résoudre ce problème. Pour plus d'informations, consultez la rubrique Mise à niveau manuelle d'un cluster.
-
Utiliser le runtime de conteneur containerd
Pour les clusters que vous ne pouvez pas mettre à niveau, vous pouvez contourner ce problème en changeant le runtime de conteneur du nœud de Docker à containerd. Effectuez les étapes suivantes pour chaque pool de nœuds utilisant le runtime de conteneur Docker :
Créez un nouveau pool de nœuds utilisant containerd en clonant le pool de nœuds existant. La configuration du nouveau pool de nœuds doit être identique à celle d'origine, à l'exception du runtime de conteneur.
Pendant les heures creuses, videz les nœuds du pool de nœuds d'origine un par un.
-
Mettre à jour la configuration auditd sur les nœuds
Si vous ne pouvez pas mettre à niveau le cluster ou passer à containerd, contournez le problème en mettant à jour manuellement la configuration auditd sur chaque nœud concerné.
Connectez-vous au nœud concerné.
-
Exécutez les commandes suivantes pour supprimer les règles d'audit liées à Docker.
sudo test -f /etc/audit/rules.d/audit.rules && sudo sed -i.bak '/ -k docker/d' /etc/audit/rules.d/audit.rules sudo test -f /etc/audit/audit.rules && sudo sed -i.bak '/ -k docker/d' /etc/audit/audit.rules -
Exécutez la commande suivante pour appliquer les nouvelles règles d'audit.
if service auditd status |grep running || systemctl status auditd |grep running; then sudo service auditd restart || sudo systemctl restart auditd sudo service auditd status || sudo systemctl status auditd fi