it-swarm.com.de

Wie starte ich kubernetes Nodes neu?

Der Status der Knoten wird als unknown gemeldet.

"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 gibt den Status NOTReady zurück. Was bedeutet das und wie kann man das beheben?

14
user_mda

Knoten holen

kubectl get nodes

Ergebnis:

NAME            STATUS     AGE
192.168.1.157   NotReady   42d
192.168.1.158   Ready      42d
192.168.1.159   Ready      42d

Beschreiben Sie den Knoten

Hier ist ein NotReady auf dem Knoten von 192.168.1.157. Wenn Sie diesen nicht vorhandenen Knoten debuggen, können Sie offizielle Dokumente lesen - Application Introspection und Debugging .

kubectl describe node 192.168.1.157

Teilergebnis:

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.

Auf meinem Knoten befindet sich ein OutOfDisk, dann stoppt Kubelet den Status des Knotens. Also muss ich etwas Speicherplatz freigeben, indem ich den Befehl df auf meinem Ubuntu14.04 verwende. Ich kann die Speicherdetails überprüfen und den Befehl docker rmi image_id/image_name unter der Rolle su I verwenden kann die unbrauchbaren Bilder entfernen.

Melden Sie sich im Knoten an

Melden Sie sich mit ssh wie 192.168.1.157 bei ssh [email protected] an und wechseln Sie mit Sudo su zum 'su'.

Starten Sie kubelet neu

/etc/init.d/kubelet restart

Ergebnis:

stop: Unknown instance: 
kubelet start/running, process 59261

Holen Sie sich wieder Knoten

Auf dem Meister:

kubectl get nodes

Ergebnis:

NAME            STATUS    AGE
192.168.1.157   Ready     42d
192.168.1.158   Ready     42d
192.168.1.159   Ready     42d

Ok, dieser Knoten funktioniert gut.

Hier ist eine Referenz: Kubernetes

17
CHENJIAN

Sie können den Knoten vom Master löschen, indem Sie Folgendes ausgeben:

kubectl delete node hostname.company.net

Der NOTReady-Status bedeutet wahrscheinlich, dass der Master nicht auf den kubelet-Service zugreifen kann. Prüfen Sie, ob auf dem Client alles in Ordnung ist.

5
cristi
GET all Nodes

kubectl get nodes

knoten mit not ready Status überprüfen 

sie löschen einfach diesen Knoten, erstellen einen neuen Knoten und fügen ihn zum Cluster hinzu

Kubectl delete node <node name>

Wenn Sie Verwaltungsdienste wie AWS EKS verwenden, wird der neue Knoten .__ angezeigt. automatisch. Sie können auch vom aws console neustart node (ec2) aus einen Neustart durchführen.

0
Harsh Manvar

Ich hatte auch dieses Problem, aber es scheint, dass es vom Kubernetes-Angebot abhängt und wie alles installiert wurde. Wenn Sie in Azure acs-engine install verwenden, finden Sie das Shell-Skript, das tatsächlich ausgeführt wird, um es bereitzustellen:

/opt/Azure/containers/provision.sh

Um ein besseres Verständnis zu erhalten, lesen Sie es einfach durch und führen Sie die von ihm angegebenen Befehle aus. Für mich musste ich als root laufen:

systemctl enable kubectl
systemctl restart kubectl

Ich weiß nicht, ob die Aktivierung erforderlich ist, und ich kann nicht sagen, ob diese für Ihre spezielle Installation geeignet ist, aber es hat definitiv für mich funktioniert. 

0
Chad

Wenn ein Knoten so fehlerhaft ist, dass der Master keinen Status von ihm erhalten kann - Kubernetes ist möglicherweise nicht in der Lage, um den Knoten neu zu starten. Und wenn die Gesundheitschecks nicht funktionieren, welche Hoffnung haben Sie dann, wenn Sie über SSH auf den Knoten zugreifen?

In diesem Fall müssen Sie möglicherweise hard-neustarten - oder, wenn sich Ihre Hardware in der Cloud befindet, dies Ihrem Provider überlassen.

Mit AWS EC2 Dashboard können Sie beispielsweise mit der rechten Maustaste auf eine Instanz klicken, um ein "Instanzstatus" -Menü aufzurufen, über das Sie einen nicht reagierenden Knoten neu starten bzw. beenden können.

Bevor Sie dies tun, können Sie kubectl cordon node wählen, um eine gute Messung durchzuführen. Möglicherweise ist kubectl delete node ein wichtiger Teil des Prozesses, um die Dinge wieder in den Normalzustand zu bringen - falls der Knoten nach einem Neustart nicht automatisch dem Cluster beitritt.


Warum reagiert ein Knoten nicht? Möglicherweise wurde eine Ressource so erschöpft, dass das Host-Betriebssystem keine neuen Anfragen rechtzeitig bearbeiten kann. Dies kann eine Festplatte oder ein Netzwerk sein - aber der heimtückischere Fall ist Out-of-Memory (OOM), das Linux schlecht handhabt .

Um Kubernetes bei der sicheren Verwaltung des Knotenspeichers zu unterstützen, ist es ratsam, beide Schritte auszuführen:

  • Reserve etwas Speicher für das System.
  • Seien Sie sehr vorsichtig mit (vermeiden Sie) opportunistische Speicherspezifikationen für Ihre Pods. Anders ausgedrückt, erlauben Sie keine unterschiedlichen Werte von requests UND limits für den Speicher.

Die Idee hier ist, die Komplikationen zu vermeiden, die mit memory overcommit verbunden sind, weil der Speicher incompressible ist, und beide Linux- und Kubernetes-OOM-Killer werden möglicherweise nicht ausgelöst, bevor der Knoten bereits ungesund geworden ist und unerreichbar.

0
nobar