2017-01-06 8 views
2

私はKubernetesのCassandraとRedisを使って、the examples for v1.5.1を使って実験しています。カサンドラStatefulSetで StatefulSet:ポッドが不明な状態になっています

  • は、私のシャットダウンは、排水やkubectlを経由して、それを削除せずにノードは、そのノードのポッドは、別のノードに移動されることなく、(少なくとも、とにかく週間以上)永遠の周りに留まる場合。
  • Redisでは、Cassandraのようにポッドが固まりますが、the sentinel serviceは新しいポッドを開始するので、機能ポッドの数は常に維持されます。

ノードがダウンした場合、Cassandraポッドを別のノードに自動的に移動する方法はありますか?または手動でノードを排水または削除する必要がありますか?

答えて

4

hereのドキュメントを参照してください。

Kubernetes(バージョン1.5以降)は、 ノードに到達できないため、ポッドを削除しません。到達不能ノード上で実行されているポッドは、タイムアウトの後に 'Terminating'または 'Unknown'状態に入ります。ユーザが 到達不能ノード上でポッドを正常に削除しようとすると、ポッドは と入力することもあります。

  • Nodeオブジェクトが削除される(どちらかによって、またはノードコントローラによって)ポッドは、このような状態は がapiserverから除去することができる唯一の方法は以下の通りです。
  • 応答しないノード上のkubeletが応答を開始すると、 がPodを強制終了し、apiserverからエントリを削除します。
  • ユーザーがポッドを強制的に削除します。

これはStatefulSetは、安全性を優先することができますkubernetes 1.5で導入された行動変化、でした。

  1. インスタンス

    は、Nodeオブジェクトが削除されずにシャットダウンさ:

    は、以下の場合を区別する方法はありません。

  2. 問題のノードとkubernetes-masterの間にネットワークパーティションが導入されています。

これらのケースの両方が、Kubernetesマスターによって応答しないノード上のkubeletとみなされます。 2番目のケースでは、別のノードに置換ポッドをすばやく作成する場合は、StatefulSetによって保証されている最大で1つのセマンティクスに違反し、同じIDを持つ複数のポッドが異なるノードで実行されます。最悪の場合、ステートフルなアプリケーションを実行すると、脳とデータの損失が発生する可能性があります。

ほとんどのクラウドプロバイダーでは、インスタンスが削除されると、Kubernetesはノードも削除されていることが分かり、StatefulSetポッドを別の場所で再作成できます。

ただし、オンデマンドで実行している場合、これは発生しない可能性があります。ノードオブジェクトをパワーダウンするときにkubernetesからノードオブジェクトを削除するか、Kubernetesのノード概念を利用可能な実際のノードと同期させた調整ループを持つことをお勧めします。

さらに詳しい情報はgithub issueにあります。

関連する問題