【ステートフルセット】

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のリソース集合を表すよ。
← 用語集にもどる