本番環境の GKE クラスターにブルー/グリーンデプロイを実施したいと考えています。現在のバージョン(ブルー)と新バージョン(グリーン)を並行稼働させ、切り替えをゼロダウンタイムで行う方法として最も適切なものはどれですか?
- A. ブルーとグリーンの Deployment を別の Namespace に作成し、gcloud コマンドで Namespace を切り替える
- B. Kubernetes の StatefulSet を使ってブルーとグリーンのローリング更新を管理する
- C. ブルーとグリーンに異なるラベルを付与した Deployment を同一クラスターに作成し、Service のセレクターを切り替えてトラフィックを移行する
- D. GKE のノードプールをブルーとグリーンに分けて、Cloud DNS でトラフィックを切り替える
解答と解説を見る
正解: C
ブルー/グリーンデプロイの標準的な実装は、ブルー(app: my-app, version: blue)とグリーン(app: my-app, version: green)のラベルを持つ Deployment を並行稼働させ、Service のセレクターを version: blue から version: green に変更することでトラフィックを瞬時に切り替えます。問題があれば version: blue に戻すだけです。Namespace の切り替えでは Service のエンドポイントが変わるため、クライアント側の設定変更が必要になります。StatefulSet はデータを持つステートフルなアプリ向けで、ブルー/グリーンデプロイの一般的な手法ではありません。ノードプールの分割と Cloud DNS 切り替えは大きな構成変更が必要で、Service セレクター変更より複雑です。