Kubernetes の Deployment とは?rolling update を解説
Deployment は、選んだ数の同一の pod を稼働させ続け、そのイメージが変わったときに安全な rolling update をオーケストレーションする Kubernetes オブジェクトです。
pod を手作業で管理することはめったにありません。代わりに「この pod spec のレプリカを N 個実行せよ」と述べる Deployment を宣言し、Kubernetes がそれを維持します。イメージを変更すると、Deployment は制御された rollout を実行し - うまくいかなければ rollback できます。stateless なアプリの主力オブジェクトです。
何を管理するか
Deployment は ReplicaSet を所有し、それが pod を所有します。replicas: 3 と pod テンプレートを設定すると、Kubernetes は一致する pod が 3 つ存在することを保証し、死んだものはすべて再作成します。
rolling update
イメージを変更すると、Deployment は古い pod を新しいものへ徐々に置き換えます - 新しい pod を立ち上げ、readiness を待ち、それから古いものを退役させます。maxUnavailable や maxSurge のような設定が rollout の積極性を制御します。
rollback
Deployment はリビジョン履歴を保持するため、新しい rollout が不調なら kubectl rollout undo が以前の動作するバージョンに戻します - CD にとって極めて重要なセーフティネットです。
最小限の spec
Deployment の YAML は spec.replicas、selector、そして pod(そのコンテナとイメージ)を記述する template を設定します。kubectl apply -f deploy.yaml で適用すると現実になります。
CD の対象としての Deployment
継続的デリバリは通常、Deployment のイメージを CI がちょうどビルドして push した digest に更新します。あとは Kubernetes が rollout を扱います。readiness probe は、実際に準備ができた pod にのみトラフィックが届くことを保証します。
重要なポイント
- Deployment は N 個のレプリカ pod を維持し、rolling update を扱います。
- リビジョン履歴を保持するため、rollback は 1 つのコマンドで済みます。
- CD は Deployment を対象とし、そのイメージを新しくビルドされたものに更新します。