【ステートフルセット】

StatefulSet とは?

💡 「番号札付きの席」でデータベースを安全に管理する仕組み
📌 このページのポイント
StatefulSet: PodとPersistent Volumeの対応 mysql-0 Primary(書き込み) mysql-1 Replica(読み取り) mysql-2 Replica(読み取り) PVC-0 data-mysql-0 PVC-1 data-mysql-1 PVC-2 data-mysql-2 1対1で固定 — 再起動しても同じVolumeが接続される StatefulSet: mysql(replicas: 3)
StatefulSetでPodとPersistent Volumeが1対1で対応するイメージ
ひよこ ひよこ

StatefulSetって何? Deploymentとどう違うの?

ペンギン先生 ペンギン先生

Deploymentは「どのPodも同じで交換可能」なステートレスアプリ向けで、StatefulSetは「各PodにIDと永続データがある」ステートフルアプリ向けなんだよ。

ひよこ ひよこ

ステートフルアプリって例えば何?

ペンギン先生 ペンギン先生

MySQLPostgreSQLなどのデータベース、KafkaやZooKeeperなどのメッセージブローカーが典型例だよ。データを保持し続ける必要があるアプリだね。

ひよこ ひよこ

StatefulSetのPodには固定のIDがつくって聞いたんだけど?

ペンギン先生 ペンギン先生

そうだよ。`mysql-0`、`mysql-1`、`mysql-2` のように順番に番号が振られるんだ。この番号は再起動やスケジューリングしなおしても変わらないよ。

ひよこ ひよこ

データはどうやって保持するの? Podが消えたらデータも消えちゃうんじゃないの?

ペンギン先生 ペンギン先生

PodPersistent Volume(永続ストレージ)が1対1で紐づいてるから、Podが削除・再作成されても同じストレージが自動的に再接続されるんだ。データは消えないよ。

ひよこ ひよこ

スケールダウンするときは慎重にやらないといけなさそうだね。

ペンギン先生 ペンギン先生

鋭いね!StatefulSetは末尾の番号から順番に1つずつ削除されるんだ。データの整合性を保つために、Deploymentのような並行削除はしない設計になってるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「StatefulSet」って出てきたら「KubernetesでDBなど状態を持つアプリを管理する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「StatefulSet」 = 状態保持セット
💬 StatefulはStateless(状態を持たない)の対義語で「状態を持つ」という意味。SetはKubernetesのリソース集合を表すよ。
← 用語集にもどる