ある企業が、Amazon EKS クラスター上のアプリケーションのカナリアデプロイを実現したい。新バージョンのコンテナイメージをデプロイする際、最初は全体の 10% のトラフィックのみを新バージョンに向け、問題がなければ段階的に 100% まで増やしたい。ALB を使ってトラフィックを制御する最も適切な方法はどれか。
- A. Route 53 の重み付きルーティングで 2 つの EKS クラスターにトラフィックを分散する。
- B. Kubernetes の Rolling Update で maxSurge=1 を設定して新バージョンのPodを1台ずつ増やす。
- C. 2 つの Kubernetes Deployment(旧バージョン・新バージョン)を作成し、それぞれに別々の Service を作成する。AWS Load Balancer Controller の TargetGroupBinding と Ingress のアノテーション(alb.ingress.kubernetes.io/actions.forward-multiple-tg)で重み付き転送ルール(旧:新 = 90:10)を設定する。
- D. Blue/Green デプロイを使って旧バージョンを完全に置き換えてから、問題があれば元に戻す。
解答と解説を見る
正解: C
AWS Load Balancer Controller(ALB Ingress Controller)を使うと、Kubernetes の Ingress リソースのアノテーションで ALB のターゲットグループへの重み付きトラフィック転送を設定できる。alb.ingress.kubernetes.io/actions アノテーションで旧バージョン TargetGroup に 90%・新バージョン TargetGroup に 10% の重みを設定し、検証が完了したら重みを変更していくカナリアデプロイが実現できる。選択肢BのRolling Update は Pod を順次置き換えるが、トラフィックの正確な割合制御(10%/90%)は難しく、Kubernetes の Pod 数に依存した比率になる。選択肢DのBlue/Green デプロイはまず 100% 切り替えてから問題があればロールバックする方式で、段階的な割合制御という要件と異なる。選択肢AのRoute 53 重み付きルーティングは 2 つの EKS クラスターが必要で、コストと管理の複雑さが大幅に増加する。