KubernetesがK8s v1.5で新しいStatefulSet機能を発表したとき(古いPetSet
名前から変換)、その使用例を紹介する非常に優れたブログ投稿を公開しました:https : //kubernetes.io/blog/2016/ 12 / statefulset-run-scale-stateful-applications-in-kubernetes /
最初の段落には、常に私の心に残っていた差別化機能の本当に良い説明があります:
...セット内のポッドのデプロイ用の「インデックスごとに最大1つのポッド」。注文された導入、注文された終了、一意のネットワーク名、および永続的な安定したストレージに加えて...
重要なものを分解します。
一意のネットワーク名
デプロイでは、どのポッドも作業を取得できるはずなので、ネットワーク名は重要ではありません。ただし、ステートフルクラスターのようなものを実行している場合、「マスター」と「スレーブ」の概念があるかもしれません。この一意のネットワーク命名により、予測可能な増分名で特定のポッドを参照することにより、区別を保つことができます。
注文された終了
これは、ステートフルクラスターでの再デプロイメントにとって重要です。重要なマシンが長時間稼働し続ける必要がある場合があるためです。コーディネーターまたは「リーダー」ノードがある場合は、それらを最後に再起動する必要があります。StatefulSetsを使用すると、これを行うことができます。リンクされたブログ投稿には、この例も示されています。
永続的な安定したストレージ
間違いなく、これは最も重要な違いです。デフォルトでは、StatefulSetはストレージを保持します。Kubernetesは、StatefulSetに接続されていたストレージを自動的に削除しません。デプロイメントでも同じことができますが、デフォルトではありません。