【ステートフルセット】
StatefulSet とは?
💡 「番号札付きの席」でデータベースを安全に管理する仕組み
📌 このページのポイント
- 各Podに pod-0, pod-1 のような固定の順序番号が付けられる
- PodとPersistent Volumeが紐づき再起動後もデータが消えない
- Deploymentはステートレスアプリ、StatefulSetはステートフルアプリに使う
- MySQL・Kafka・ZooKeeperなどの分散データストアに適している
StatefulSetって何? Deploymentとどう違うの?
ステートフルアプリって例えば何?
MySQLやPostgreSQLなどのデータベース、KafkaやZooKeeperなどのメッセージブローカーが典型例だよ。データを保持し続ける必要があるアプリだね。
StatefulSetのPodには固定のIDがつくって聞いたんだけど?
そうだよ。`mysql-0`、`mysql-1`、`mysql-2` のように順番に番号が振られるんだ。この番号は再起動やスケジューリングしなおしても変わらないよ。
データはどうやって保持するの? Podが消えたらデータも消えちゃうんじゃないの?
PodとPersistent Volume(永続ストレージ)が1対1で紐づいてるから、Podが削除・再作成されても同じストレージが自動的に再接続されるんだ。データは消えないよ。
スケールダウンするときは慎重にやらないといけなさそうだね。
鋭いね!StatefulSetは末尾の番号から順番に1つずつ削除されるんだ。データの整合性を保つために、Deploymentのような並行削除はしない設計になってるよ。
まとめ:ざっくりこれだけ覚えればOK!
「StatefulSet」って出てきたら「KubernetesでDBなど状態を持つアプリを管理する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「StatefulSet」 = 状態保持セット
💬 StatefulはStateless(状態を持たない)の対義語で「状態を持つ」という意味。SetはKubernetesのリソース集合を表すよ。