ここでは、Alibaba Cloud Container Service for Kubernetes により提供される Ingress 機能を用いた、グレーリリースおよび Blue/Green デプロイの実装方法を解説します。

背景

グレーリリースまたは Blue/Green デプロイにより、対象となるソフトウェアの最新バージョンとそれ以前のバージョンに対する、2 つの全く同じ環境を作成することができます。 以前のバージョンのソフトウェアに影響を与えずに、以前のバージョンから最新バージョンへのトラフィックを再ルーティングするルールを指定することができます。 指定した期間で例外なく最新バージョンのソフトウェアが実行された後、以前のバージョンから最新バージョンへ全てのトラフィックを再ルーティングすることができます。

A/B テストは、比較および増分タイプのグレーリリースです。 特に、A/B テストでは、ユーザーが以前のバージョンのサービスを使い続けることができ、最新バージョンのサービスを使う他のユーザーのトラフィックを再ルーティングすることができます。 最新バージョンのサービスが、指定した期間に、例外なく実行される場合、徐々に全てのユーザーのトラフィックを最新バージョンのサービスへと再ルーティングすることができます。

シナリオ

シナリオ 1

たとえば、サービス A がすでにオンラインで実行され外部にアクセスできるレイヤー 7 サービスが提供され、 新しい機能である サービス A' を備えた新しいバージョンが開発されているとします。 サービス A' をリリースしたいと考えても、1 度に直接サービス Aと置き換えたくはありません。 加えて、リクエストヘッダーが foo=bar を含んでいたり、または Cookie に foo=bar を含んだクライアントリクエストがサービス A' に転送されるようにしたいと考えています。 指定した期間、例外なくサービス A' が実行された後に、サービス A からサービス A' へ再ルーテイングし、スムーズにサービス A をオフラインにしたい場合です。

シナリオ 2

たとえば、以前のサービス であるサービス B がオンラインで実行中であり、外部にアクセスできるレイヤー 7 サービスを提供していると仮定します。 しかし、問題があるとわかっています。 問題が解決された新しいバージョンのサービス B' が開発され、この最新バージョンをリリースしたいと考えています。 しかし、始めは全てのトラフィックのうち 20% だけをサービス B' へ再ルーティングしたいと考えています。 一定期間、例外なくサービス B' が実行された後に、サービス B からサービス B' へ再ルーテイングし、スムーズにサービス B をオフラインにしたい場合です。

上記のようなアプリケーションリリース要求を満たために、Alibaba Cloud Container Service for Kubernetes は Ingress の機能を利用し、以下の 4 つのトラフィック分配方法を提供しています。

A/B テストにおいて
  • リクエストヘッダーに応じたトラフィックの分配
  • Cookie に応じたトラフィックの分配
  • クエリパラメーターに応じたトラフィックの分配
Blue/Green デプロイにおいて
  • サービスの weight に応じたトラフィックの分配