KubernetesにはPodを管理するリソースとして、DeploymentとStatefulSetの2つが挙げられます。これらのPodのスケールと更新のストラテジーにおける違いについてまとめると次の表のようになります。
| Deployment | StatefulSet | |
|---|---|---|
| スケール | なし | OrderedReady or Parallel |
| 更新 | RollingUpdate or Recreate | RollingUpdate or OnDelete |
Podのスケール
DeploymentはPodをスケールする時、選択できるストラテジーはありません。Podの数を増減する場合には常に並列的に行われます。実際、DeploymentがPodを増減しているのではなく、Deploymentが管理しているReplicaSetが行っているのであり、この動作はReplicaSetによるものです。
一方で、StatefulSetはOrderedReadyとParallelの2つのストラテジーがあります。Deploymentと異なり、StatefulSetはPodを直接管理しています。
- OrderedReadyはReadinessProbeを監視しつつ、一つずつPodを増減します。
- ParallelはDeploymentのスケールと同様、Podを並列的に増減させます。
Podの更新
DeploymentはRollingUpdateとParallelの2つのストラテジーがあります。
- RollingUpdateは段階的に古いPodから新しいPodへ以降する方法です。ダウンタイムは発生しないので本番環境では積極的に使われるストラテジーだと思います。
- Recreateは全てのPodを一度に削除し、一度に作成する方法です。Podの数が0になる時間が発生するのでダウンタイムが発生します。
StatefulSetもRollingUpdateとOnDeleteの2つのストラテジーがあります。
- RollingUpdateは一つずつPodを更新する方法です。Deploymentと同じ名前を持つストラテジーですが、Deploymentは任意の数で更新できるのに対し、StatefulSetは一つずつであるという違いがあります。
- OnDeleteは手動で削除されたPodが更新される方法です。更新をよりコントロールしたい場合、こちらのほうが適切でしょう。