2017-03-11 18 views
0

私は4ノードkubernetesクラスタを持っています。私のアプリケーションは2つのレプリカインスタンスで動作します。私はレプリカセットを持つ展開リソースを使用しています。ドキュメントごとに、レプリカセットは常に指定されたno。アプリケーションのインスタンスの実行されます。私は1つのポッドのインスタンスを削除する場合は、同じまたは別のノードで再起動されます。しかし、私は1つのノードでドッカーエンジンを停止してポッドインスタンスの障害をシミュレートした。 Kubectlは、ポッドインスタンスのエラーとしてステータスを表示しますが、別のノードでポッドを再起動しません。それは期待された行動か何かが欠けているか?Kubernetesが他のノードで失敗したポッドをスケジューリングしない

答えて

2

AFAIS Kubernetesがバージョン1.5でその動作を変更しました。 docsを正しく解釈すると、障害が発生したノードのポッドは突然終了し、ポッドの登録を解除できなかったため、依然としてAPserverに登録されます。ポッドはまだ登録されているので、ReplicaSetはそれを置き換えません。

この理由は、Kubernetesがネットワークエラー(スプリットブレインなど)かノード障害かどうかを判断できないためです。 StatefulSetsが導入されると、KubernetesはPodが何度も開始されないようにする必要があります。

これはバグのように聞こえるかもしれませんが、クラウドプロバイダ(GCEやAWSなど)が正しく設定されている場合、Kubernetesはそのノードがまだ実行中かどうかを確認できます。そのノードをシャットダウンするとき、コントローラはノードとそのポッドの登録を解除し、別のノードに新しいポッドを作成する必要があります。ノードのヘルスチェックとノードの置き換えとともに、クラスタは自身を修復できます。

クラウドプロバイダーの設定方法は、Kubernetesの設定に大きく依存します。

+0

お返事ありがとうございます。私はKubernetes 1.5.4を使用しています。私はドキュメントのリンクをチェックし、ステートフルセットに適用できます。ステートフルセット以外のすべてのコントローラーでは、コントローラーがポッド名を再使用しないため(つまり、generate-nameを使用するため)、コントローラーがポッドを置き換える機能には影響しません。 また、私はkubbernetesクラスタをubuntu vmsに配備しています。 –

+0

ノードはまだ 'kubectl get nodes'にリストされていますか?失敗したノードを削除して、何が起こるかを確認できますか? – svenwltr

+0

また、「ノードコントローラはapi-serverからポッドを強制的に削除しなくなりました。すべての種類のポッド用です。コントローラーがポッドを削除できない場合でも、有効なレプリカです。少なくとも私の経験から、行動は1.5で変わった。 – svenwltr

0

ノードまたはドッカーをドローダウンしてから約5分待ってください。 Kubernetesは、そのノードで実行されていたすべてのポッドの状態を「不明」とマークし、残りの有効な適格ノードでそれらを起動します。障害が発生したノードが復旧すると、K8Sがすでに他のノードにそれらを置き換えた場合、そのノード上のポッドは削除されます。

関連する問題