ノードのステータスはunknown
として報告されます
"conditions": [
{
"type": "Ready",
"status": "Unknown",
"lastHeartbeatTime": "2015-11-12T06:03:19Z",
"lastTransitionTime": "2015-11-12T06:04:03Z",
"reason": "Kubelet stopped posting node status."
}
kubectl get nodes
がNOTReadyステータスを返す場合。これは何を意味し、これを修正する方法は?
kubectl get nodes
結果:
NAME STATUS AGE
192.168.1.157 NotReady 42d
192.168.1.158 Ready 42d
192.168.1.159 Ready 42d
192.168.1.157
のノードにあるNotReadyです。次に、このnotreadyノードをデバッグすると、公式ドキュメントを読むことができます- アプリケーションのイントロスペクションとデバッグ 。
kubectl describe node 192.168.1.157
部分的な結果:
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.
私のノードにOutOfDiskがあり、Kubeletがノードステータスの投稿を停止しました。だから、Ubuntu14.04でdf
のコマンドを使用して、ディスク領域を解放する必要がありますメモリの詳細を確認し、docker rmi image_id/image_name
のコマンドを使用しますsu
の役割の下で、役に立たない画像を削除できます。
192.168.1.157
のようにsshを使用してssh [email protected]
にログインし、Sudo su
で「su」に切り替えます。
/etc/init.d/kubelet restart
結果:
stop: Unknown instance:
kubelet start/running, process 59261
マスターで:
kubectl get nodes
結果:
NAME STATUS AGE
192.168.1.157 Ready 42d
192.168.1.158 Ready 42d
192.168.1.159 Ready 42d
OK、そのノードは正常に動作します。
リファレンスは次のとおりです。 Kubernetes
次を発行することにより、マスターからノードを削除できます。
kubectl delete node hostname.company.net
NOTReadyステータスは、おそらくマスターがkubeletサービスにアクセスできないことを意味します。クライアントですべてが正常かどうかを確認します。
GET all Nodes
kubectl get nodes
not ready
ステータスのノードを確認します
そのノードを削除して新しいノードを作成し、クラスターに参加するだけです
Kubectl delete node <node name>
AWS EKSなどの管理サービスを使用している場合、新しいノードが自動的に表示されます。awsconsole reboot node(ec2)から再起動することもできます。
私もこの問題を抱えていましたが、Kubernetesの提供内容とすべてのインストール方法に依存しているようです。 Azureでは、acs-engineインストールを使用している場合、実際に実行されているシェルスクリプトを見つけてプロビジョニングできます:
/opt/Azure/containers/provision.sh
より詳細な理解を得るには、それを読み通して、指定されたコマンドを実行してください。私にとっては、ルートとして実行する必要がありました。
systemctl enable kubectl
systemctl restart kubectl
イネーブルが必要かどうかはわかりませんし、これらが特定のインストールで機能するかどうかはわかりませんが、私にとっては確実に機能しました。
ノードが異常であるため、マスターがステータスを取得できない場合-Kubernetesはノードを再起動できない可能性があります。また、ヘルスチェックが機能しない場合、SSHでノードにアクセスすることについて何を期待していますか?
この場合、hard-rebootが必要な場合があります。または、ハードウェアがクラウドにある場合は、プロバイダーに任せることができます。
たとえば、AWS EC2ダッシュボードを使用すると、インスタンスを右クリックして「インスタンス状態」メニューを表示できます。このメニューから、応答しないノードを再起動/終了できます。
これを行う前に、適切な尺度として kubectl cordon node
を選択できます。また、ノードが再起動後にクラスターに自動的に再参加しない場合は、 kubectl delete node
が正常に戻すプロセスの重要な部分であることがわかります。
ノードが応答しなくなるのはなぜですか?おそらく、ホストオペレーティングシステムが新しい要求をタイムリーに処理することを妨げる方法で、いくつかのリソースが使い果たされた可能性があります。これはディスクでもネットワークでもかまいませんが、より潜行性の高いケースはメモリ不足(OOM)です。これは Linuxの処理が不十分 です。
Kubernetesがノードメモリを安全に管理できるようにするには、次の両方を行うことをお勧めします。
requests
とlimits
の異なる値を許可しないでください。ここでの考え方は、メモリが 非圧縮 であり、bothLinuxとKubernetesであるため、 memory overcommit に関連する複雑さを回避することです。 OOMキラーは、ノードがすでに正常で到達不能になる前にトリガーしない場合があります。