【ステートフルセット】

StatefulSet とは?

最終更新:
💡 Podの識別子と保存先の対応を保つ

Kubernetesで、Podごとの安定した識別子を保って複数のPodを管理するリソース。永続ストレージや決まった起動順序が必要なアプリに使い、保存方法などは別途設定する。

📌 このページのポイント
StatefulSet:識別子と保存先の対応 volumeClaimTemplatesを使う構成例 mysql-0 Pod PVC-0 保存先 mysql-1 Pod PVC-1 保存先 mysql-2 Pod PVC-2 保存先 置換したPodも、対応する既存PVCを使う 保存装置・削除方針・バックアップは別途必要
PVCは保存先を要求するリソースで、実際のボリュームも用意する。図の0・1・2は識別子で、DBの主系・待機系の役割ではない。
ひよこ ひよこ
Deploymentとどう違うの?
ペンギン先生 ペンギン先生
同じ仕様のPodを管理する点は似ているけれど、StatefulSetはPodごとの安定した識別子を保つよ。Podを交換可能として扱えるならDeploymentが候補になり、固定の識別子や順序が必要ならStatefulSetを検討するんだ
ひよこ ひよこ
どんなアプリで使うの?
ペンギン先生 ペンギン先生
データベースなど、安定した名前や保存先を必要とするアプリで役立つよ。ただしStatefulSetを作るだけでDBのデータが複製されたり、主系と待機系が決まったりするわけではない。アプリ側の構成も必要なんだ
ひよこ ひよこ
Podの名前は変わらないの?
ペンギン先生 ペンギン先生
例えばmysqlというStatefulSetなら、通常mysql-0、mysql-1、mysql-2のような名前になるよ。Pod自体が作り直されても、その識別子を引き継ぐ。同じPodオブジェクトが永遠に残るという意味ではないんだ
ひよこ ひよこ
保存したデータも必ず残る?
ペンギン先生 ペンギン先生
volumeClaimTemplatesでPodごとのPVCを作ると、置き換えたPodにも対応する既存のボリュームを使えるよ。ただしストレージの用意が必要で、PVCの削除方針や保存装置の状態も関係する。StatefulSetはバックアップや無損失の保証そのものではないんだ
ひよこ ひよこ
スケールダウンは必ず順番に削除される?
ペンギン先生 ペンギン先生
既定のOrderedReadyでは、大きい番号から順に終了を待ちながら減らすよ。Parallelなら並行で作成・終了できる。StatefulSet自体の削除には同じ順序の保証がないし、PVCを残すか消すかも設定次第。アプリの終了手順と保存方針を確認しよう
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「StatefulSet」って出てきたら「KubernetesでDBなど状態を持つアプリを管理する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「StatefulSet」 = 状態保持セット
💬 StatefulはStateless(状態を持たない)の対義語で「状態を持つ」という意味。SetはKubernetesのリソース集合を表すよ。

参考資料

← 用語集にもどる