2016-08-09 8 views
6

私はKubernetesを知っており、Kubernetesでステートフルなサービスを展開するためのシンプルなソリューションは見つかりませんでした。Kubernetesでのステートフルアプリケーションの展開

  • すべてのポッドは、ロードバランスすることはできませんの接触点(他のポッドIPのリスト)とブートストラップする必要があります(私は不運の場合のスプリットブレインの怖​​い:最悪の場合には荷重 - バランサは各ノードの負荷バランスをとって、1つのノードのいくつかの自己閉じ込めクラスタを作成する)
  • すべてのポッドには、最悪の場合、手動でアクセスする必要がある永続ストレージが必要です(例:領事のpeers.json)
  • すべてのポッドは再構成可能でなければなりません。もし私が領事クラスターで何かをするのを忘れてしまったら、それをゼロから再構築するだけではダウンタイムになるでしょう。 kubernetesがこれを防ぐのであれば、私はまだ展開の仕組みに精通していません。
  • 新しく構成されたインスタンスでサービスクラスターを動的に増やして古いものを排除することは非常に望ましくないかもしれません(私は精通した専門家ではありませんが、私の視点からは、

AFAIK最も適切なのはペットセットですが、まだアルファベットになっており完全に削除することはできますが、また、私はPet Setレクリエーションで生き残るために永続的なボリュームをどのように管理すべきか理解していないと感じています。私が思いついたもう一つの選択肢は、サービス展開をブートストラップノード展開、ブートストラップノードサービス、および他のすべてのノード展開に分割することです。ブートストラップノードサービスを接点として使用できます(これは完全には安全ではありません)。

このケースの一般的なアプローチは何ですか?また、賛否両論には何がありますか?

+1

ありません。 K8はまだこの準備が整っていません。 PetSetsは答えですが、それは長い道のりです。 – Drew

+0

私はK8がこのために準備ができているのか分かりません。 Kubernetesの考え方はすべてが一時的だということです。 PetSetsは部分的な解決策を提供するかもしれませんが、その場合、Kubernetesを使用することで実際には何も得られません – 3ocene

答えて

1

Kubernetesクラスター内のステートフルクラスター内の一定数のポッドを見ている場合、PetSets(StatefulSetsはこれが現在呼び出されていると思います)が答えです...または1つのポッドごとにサービスを定義できます同じ。

ポッドが他のポッドのIPを認識するために、ヘッドレスサービスを使用できます。このサービスでは、ラベルに関連付けられたIPのリストが提供されます。

storageの場合、emptyDirを使用している場合はローカルストレージがありますが、Podを削除/再スケジュールすると失われます。

私はKubernetesでZookeeperを使用していますが、これはセットアップに苦労しますが、Zookeeperはノードの変更時にクラスタを再構成できる「再構成」APIを提供しているため、起動時にクラスタを再定義するのはポッドが再スケジュールされたときの新しいノードの領事が同じ種類の機能を持っているかどうかは分かりませんが、おそらくそうでしょう。

関連する問題