StatefulSetっていつ使うの?PersistentVolumesでいいんじゃないの?
に全部答えが書いてあったのでざっくり噛み砕く。
---
たしかに永続ボリュームでもできるけど、Podをグループ化したい時につらいよ。
たとえばDBのマスタースレーブ構成を作るとか。ひとつがマスターで、それ以外がスレーブであることを確実に担保しないといけないでしょ。それに、起動してくる順番も制御したくない?
そういうことをしたい時、普通のPodではできない以下のような機能が必要になるはず。
わかりやすい名前: スレーブ1,スレーブ2みたいな名前は普通にPodを作っただけではつかない。
固定のIPアドレスとDNS名: マスターのIPとDNSがコロコロ変わるとスレーブから接続できないでしょ。
グループ内での固定のリンク: あるPodを再作成した時に必ずマスター用の永続ボリュームを掴み直してくれないといけない。
固定のネットワーク識別子
固定の永続ストレージ
順番を担保したデプロイとスケーリング
順番を担保した削除と終了
いや、たしかにここに書いたことの一部はServiceとPodを使えばできる。でもめっちゃやること増えるよ。
たとえば3つのDBインスタンスがほしかったら3つのServiceとDeploymentが必要になるよ。で、追加しようと思ったらそのたびにまたServiceとDeploymentが必要になる。
まぁたしかにPetSet/PersistentSetが導入される前、これはよくある手だった。
でもこれをやってもなお、上に書いたStatefulSetにしかない利点の一部は実現できないけどね。(順番の担保とか)
---
たしかに。
逆に、数を増やしていくつもりがなくて順番の制御が要らないなら普通にServiceとDeploymentを切ればいいみたいだな。