5.4.4. Blue-Green デプロイメント

Blue-green デプロイメントでは、同時にアプリケーションの 2 つのバージョンを実行し、実稼働版 (blue バージョン) からより新しいバージョン (green バージョン) にトラフィックを移動します。ルートでは、ローリングストラテジーまたは切り替えサービスを使用できます。

多くのアプリケーションは永続データに依存するので、N-1 互換性 をサポートするアプリケーションが必要です。つまり、データを共有して、データ層を 2 つ作成し、データベース、ストアまたはディスク間のライブマイグレーションを実装します。

新規バージョンのテストに使用するデータについて考えてみてください。実稼働データの場合には、新規バージョンのバグにより、実稼働版を破損してしまう可能性があります。

5.4.4.1. Blue-Green デプロイメントの設定

Blue-green デプロイメントでは 2 つの Deployment を使用します。どちらも実行され、実稼働のデプロイメントはルートが指定するサービスによって変わります。この際、各 Deployment オブジェクトは異なるサービスに公開されます。

注記

ルートは、Web (HTTP および HTTPS) トラフィックを対象としているので、この手法は Web アプリケーションに最適です。

新規バージョンに新規ルートを作成し、これをテストすることができます。準備ができたら、実稼働ルートのサービスが新規サービスを参照するように変更します。 新規 (green) バージョンは有効になります。

必要に応じて以前のバージョンにサービスを切り替えて、以前の (blue) バージョンにロールバックすることができます。

手順

  1. 2 つの独立したアプリケーションコンポーネントを作成します。

    1. v1 イメージを example-blue サービスで実行するサンプルアプリケーションのコピーを作成します。

      $ oc new-app openshift/deployment-example:v1 --name=example-blue
    2. example-green サービスで v2 イメージを使用する 2 つ目のコピーを作成します。

      $ oc new-app openshift/deployment-example:v2 --name=example-green
  2. 以前のサービスを参照するルートを作成します。

    $ oc expose svc/example-blue --name=bluegreen-example
  3. bluegreen-example-<project>.<router_domain> でアプリケーションを参照し、v1 イメージが表示されることを確認します。
  4. ルートを編集して、サービス名を example-green に変更します。

    $ oc patch route/bluegreen-example -p '{"spec":{"to":{"name":"example-green"}}}'
  5. ルートが変更されたことを確認するには、v2 イメージが表示されるまで、ブラウザーを更新します。