このブログは、コンテナのオーケストレーターであるkubernetesについて
自分の知識をまとめることを目的として記事を書いています。
もともとなが~くvSphereのあれやこれやに携わってきたのでvSphereとの類似点や
相違点についてもちょっと混ぜていけたりしたらいいかなぁとかも思っています。
今回は、Podの展開を行う方法である『Deploiment』と『Statefulset』という
リソースの違いについてご説明したいと思います。
Deploiment
Deploimentは、展開するPodの数を決めて一度に複数のPodを展開することができます。
vSphereで考えると、一つのテンプレートから複数の仮想マシンをグループとして
一度に作成するようなイメージでしょうか。
ただ、PVCを利用した場合、すべてのPodで同じ領域を使用するため個別にデータを
残しておきたいようなアプリケーションには不向きとなります。
ただ単にプリケーションを実行したいとか、Webサーバーにしておきたいとかそう
いった用途のPodはこの方式でよく作られていると思います。
※仮に残しておきたいデータがあった場合は、定期的に外部にデータを保存する仕組み
を持たせていると思います。
Statefulset
Statefulsetも、展開するPodの数を決めて一度に複数のPodを展開することができます。
Deploimentとの違いは、こちらはPVCを使用することでPod毎にデータ絵領域を持たせる
ことができる点です。
データベースなど、個別に情報を残しておく必要があるPod用の展開方式となります。
大きな違いは上記となります。
また、単体のPodではなく、DeploimentやStatefulsetとして展開することで、得られる
以下の様なメリットもあります。
・必要展開数の保持
展開したPodに何かしら問題が発生して正常に動いているPodの数が設定したPodの数に
足りなくなった場合、自動的にPodを展開して正常に稼働しているPodの数を保ちます。
・Podの展開数調整が容易(スケールアウト、スケールイン)
yamlに記載するPod展開数を変更し、再度kubectl applyすることで数を増やしたり
減らしたりがすぐにできます。
・ローリングアップデート
yamlファイルに変更があって更新されたことを感知すると、新しいyamlファイルで
展開したPodと入れ替えてくれる機能。
1台づつ入れ替えてくれるので、提供しているサービスは停止しない優れもの。
どうやって、ローリングアップデートしているかというと。
実はDeploimentもStatefulsetも内部にPodの展開をするReplicaSetというリソース
を持っていたりします。
それをうまく使っているということになりますが、ここでは、仮にDeploimentか
Statefulsetで現在動いているPodたちがあったとして説明したいと思います。
yamlファイルに変更が起きると、新しいyamlファイルでReplicaSetがPodを作ります。
実は、複数のReplicaSetを管理する機能をDeploimentもStatefulset持っているので、
古いReplicaSetと新しいReplicaSetが同時に存在しているのです。
新しいyamlファイルでの展開が終わると、現在メインとなっている古いReplicaSetの
Podと新しいReplicaSetのPodを1台入れ替えてくれます。
この動作を必要なPod台数分実施することで、提供しているサービスを止めることなく
Podアップデートを行えるようにしているわけです。
次回は実際にStatefulsetを展開とローリングアップデートを確認してみたいと思います。