Le statut des nœuds est signalé sous la forme unknown
"conditions": [
{
"type": "Ready",
"status": "Unknown",
"lastHeartbeatTime": "2015-11-12T06:03:19Z",
"lastTransitionTime": "2015-11-12T06:04:03Z",
"reason": "Kubelet stopped posting node status."
}
whle kubectl get nodes
renvoie un statut NOTReady. Qu'est-ce que cela implique et comment résoudre ce problème?
kubectl get nodes
Résultat:
NAME STATUS AGE
192.168.1.157 NotReady 42d
192.168.1.158 Ready 42d
192.168.1.159 Ready 42d
Voici un NotReady sur le nœud de 192.168.1.157
. Ensuite, déboguez ce nœud non prêt et vous pourrez lire des documents officiels - Application Introspection and Debugging .
kubectl describe node 192.168.1.157
Résultat partiel:
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
OutOfDisk Unknown Sat, 28 Dec 2016 12:56:01 +0000 Sat, 28 Dec 2016 12:56:41 +0000 NodeStatusUnknown Kubelet stopped posting node status.
Ready Unknown Sat, 28 Dec 2016 12:56:01 +0000 Sat, 28 Dec 2016 12:56:41 +0000 NodeStatusUnknown Kubelet stopped posting node status.
Il y a un OutOfDisk sur mon nœud, puis Kubelet a arrêté de poster le statut du nœud. Donc, je dois libérer de l'espace disque en utilisant la commande df
sur mon Ubuntu14.04 je peux vérifier les détails de la mémoire, et en utilisant la commande docker rmi image_id/image_name
sous le rôle su
I peut supprimer les images inutiles.
Connectez-vous à 192.168.1.157
en utilisant ssh, comme ssh [email protected]
, et passez au 'su' par Sudo su
;
/etc/init.d/kubelet restart
Résultat:
stop: Unknown instance:
kubelet start/running, process 59261
Sur le maître:
kubectl get nodes
Résultat:
NAME STATUS AGE
192.168.1.157 Ready 42d
192.168.1.158 Ready 42d
192.168.1.159 Ready 42d
Ok, ce noeud fonctionne bien.
Voici une référence: Kubernetes
Vous pouvez supprimer le nœud du maître en émettant:
kubectl delete node hostname.company.net
L'état NOTReady signifie probablement que le maître ne peut pas accéder au service Kubelet. Vérifiez si tout va bien sur le client.
GET all Nodes
kubectl get nodes
vérifier le noeud avec le statut not ready
vous supprimez simplement ce nœud et créez un nouveau nœud et joignez-le au cluster
Kubectl delete node <node name>
Si vous utilisez des services de gestion tels que AWS EKS, un nouveau nœud sera créé automatiquement.Vous pouvez également redémarrer à partir du nœud de redémarrage de la console aws (ec2).
J'ai eu ce problème aussi mais il semble que cela dépend de l'offre de Kubernetes et de la manière dont tout a été installé. Dans Azure, si vous utilisez l'installation acs-engine, vous pouvez trouver le script Shell en cours d'exécution pour le provisionner à l'adresse suivante:
/opt/Azure/containers/provision.sh
Pour obtenir une compréhension plus fine, il suffit de le lire et d'exécuter les commandes qu'il spécifie. Pour moi, je devais courir en tant que root:
systemctl enable kubectl
systemctl restart kubectl
Je ne sais pas si l'activation est nécessaire et je ne peux pas dire si cela fonctionnera avec votre installation particulière, mais cela a définitivement fonctionné pour moi.
Si un nœud est si malsain que le maître ne peut en obtenir le statut, Kubernetes risque de ne pas pouvoir redémarrer le nœud. Et si les contrôles de santé ne fonctionnent pas, quel espoir avez-vous d'accéder au nœud via SSH?
Dans ce cas, il se peut que vous deviez hard-reboot - ou, si votre matériel est dans le cloud, laissez votre fournisseur le faire.
Par exemple, le tableau de bord AWS EC2 vous permet de cliquer avec le bouton droit de la souris sur une instance pour afficher un menu "Etat de l'instance" - à partir duquel vous pouvez redémarrer/terminer un nœud qui ne répond pas.
Avant de faire cela, vous pouvez choisir de kubectl cordon node
pour faire bonne mesure. Et vous trouverez peut-être que kubectl delete node
constitue un élément important du processus de restauration de la situation, si le noeud ne rejoint pas automatiquement le cluster après un redémarrage.
Pourquoi un nœud deviendrait-il insensible? Certaines ressources ont probablement été épuisées de manière à empêcher le système d'exploitation hôte de traiter les nouvelles demandes en temps voulu. Cela peut être un disque ou un réseau - mais le cas le plus insidieux est le manque de mémoire (MOO), que Linux gère mal .
Pour aider Kubernetes à gérer la mémoire des noeuds en toute sécurité, il est conseillé d’effectuer les deux opérations suivantes:
requests
ET limits
pour la mémoire.L'idée est d'éviter les complications associées à surcharge de mémoire , car la mémoire est incompressible , et à la fois les tueurs de MOO de Kubernetes et Linux ne peuvent pas se déclencher avant le noeud devenir malsain et inaccessible.