Deploymentで理解する、望む状態を保つ仕組み
DeploymentはPodを直接操作する道具ではありません。利用者が宣言した状態と実際の状態の差を、コントローラが繰り返し埋めるための入口です。
TL;DR
- DeploymentはPodテンプレートと望む台数を宣言する。
- ReplicaSetが台数を維持し、Deploymentが更新世代を管理する。
- 更新や障害時はPodを手で直す前に、宣言と状態差を確認する。
01宣言した状態が出発点
宣言ファイル→API Server→コントローラ→実際のPodの循環

DeploymentのspecにはPodテンプレートと必要な状態を置きます。Kubernetesは一度の命令を実行して終わりではなく、望む状態と実際の状態を継続して照合します。
押さえること:DeploymentはPodテンプレートと望む台数を宣言する。
02ReplicaSetが台数を守る
目標3台・実際2台を検知して補充するReplicaSet

Deploymentの配下にはReplicaSetがあり、Podが落ちれば不足分を作ろうとします。利用者は通常ReplicaSetを単体で操作せず、Deploymentという上位の意図を更新します。
押さえること:ReplicaSetが台数を維持し、Deploymentが更新世代を管理する。
03更新は世代を切り替える
旧ReplicaSetと新ReplicaSetが入れ替わるローリング更新

イメージなどPodテンプレートが変わると、Deploymentは新しいReplicaSetを作り、古いReplicaSetから新しいReplicaSetへ段階的に移します。ロールバックは以前の世代へ戻す操作です。
押さえること:更新や障害時はPodを手で直す前に、宣言と状態差を確認する。
結論
- DeploymentはPodテンプレートと望む台数を宣言する。
- ReplicaSetが台数を維持し、Deploymentが更新世代を管理する。
- 更新や障害時はPodを手で直す前に、宣言と状態差を確認する。