ブルーグリーンは、2 台の Docker ホストを使用して両者を同じように Kubernetes クラスタに展開および構成する展開モデルです。ブルーグリーン展開モデルで Code Stream のパイプラインがアプリケーションを展開するようにすると、ご使用の環境のダウンタイムを短縮できます。

展開モデルのブルー インスタンスとグリーン インスタンスは、それぞれ異なる目的を果たします。一度に 1 つのインスタンスのみが、アプリケーションを展開するライブ トラフィックを受け入れます。各インスタンスは、一定の時刻にそのトラフィックを受け入れます。ブルー インスタンスはアプリケーションの最初のバージョンを受け取り、グリーン インスタンスは 2 番目のバージョンを受け取ります。

ブルーグリーン環境のロード バランサによって、アプリケーションを展開するときにライブ トラフィックがどのルートをたどるかが決まります。ブルーグリーン モデルを使用すると、環境は動作し続け、ユーザーはダウンタイムがあっても気づかず、パイプラインはアプリケーションを本番環境に継続的に統合して展開します。

Code Stream でパイプラインを作成すると、ブルーグリーン展開モデルが 2 つのステージで表されます。開発用のステージと本番用のステージです。

Code Stream パイプライン ワークスペースでは、継続的インテグレーション タスクとカスタム タスクで Docker と Kubernetes がサポートされます。

ワークスペースの構成については、パイプライン ワークスペースの構成を参照してください。

表 1. ブルーグリーン展開の開発ステージ タスク
タスク タイプ タスク
Kubernetes ブルーグリーン展開用の名前空間を作成します。
Kubernetes Docker Hub のプライベート キーを作成します。
Kubernetes アプリケーションの展開に使用するサービスを作成します。
Kubernetes ブルー展開を作成します。
ポーリング ブルー展開を確認します。
Kubernetes 名前空間を削除します。
表 2. ブルーグリーン展開用の本番ステージ タスク
タスク タイプ タスク
Kubernetes グリーンは、ブルーからサービスの詳細を取得します。
Kubernetes グリーン レプリカ セットの詳細を取得します。
Kubernetes グリーン展開を作成し、プライベート キーを使用してコンテナ イメージをプルします。
Kubernetes サービスを更新します。
ポーリング 本番 URL で展開が成功したことを確認します。
Kubernetes ブルー展開を終了します。
Kubernetes ブルー展開を削除します。

独自のブルーグリーン展開モデルにアプリケーションを展開するには、Code Stream でパイプラインを作成して 2 つのステージを含めます。最初のステージにはブルー インスタンスにアプリケーションを展開するブルー タスクを含め、2 番目のステージにはグリーン インスタンスにアプリケーションを展開するグリーン タスクを含めます。

パイプラインの作成には、CICD スマート パイプライン テンプレートを使用できます。自動的にパイプラインのステージとタスクを作成するもので、展開を選択できます。

パイプラインを手動で作成する場合は、パイプライン ステージを計画する必要があります。例については、タスクの手動追加を行う前の Code Stream での CICD ネイティブ ビルドの計画を参照してください。

この例では、CICD スマート パイプライン テンプレートを使用してブルーグリーン パイプラインを作成します。

前提条件

  • AWS 上の動作中の Kubernetes クラスタにアクセスできることを確認します。
  • ブルーグリーン展開環境を設定し、ブルー インスタンスとグリーン インスタンスが同一になるように設定していることを確認します。
  • AWS 上の Kubernetes クラスタにアプリケーション イメージを展開する Code Stream の Kubernetes エンドポイントを作成します。
  • CICD スマート パイプライン テンプレートの使用について理解する必要があります。スマート パイプライン テンプレートを使用する前の Code Stream での CICD ネイティブ ビルドの計画を参照してください。

手順

  1. [パイプライン] > [新しいパイプライン] > [スマート テンプレート] > [CI/CD テンプレート] の順にクリックします。
  2. CICD スマート パイプライン テンプレートの CI 部分の情報を入力し、[次へ] をクリックします。
  3. スマート パイプライン テンプレートの CD 部分を入力します。
    1. アプリケーション展開の環境を選択します。たとえば、[開発][本番] です。
    2. パイプラインによる展開で使用するサービスを選択します。
    3. [展開] 領域で、開発環境と本番環境のクラスタ エンドポイントを選択します。
    4. 本番展開モデルの場合、[ブルーグリーン] を選択し、[作成] をクリックします。

    スマート パイプライン テンプレートで、サービスと展開を選択し、本番展開モデルの [ブルーグリーン] をクリックします。

結果

完了です。スマート パイプライン テンプレートを使用して、AWS 上の Kubernetes 本番クラスタ内のブルーグリーン インスタンスにアプリケーションを展開するパイプラインを作成しました。

例: ブルーグリーン展開タスクのサンプルの YAML コード

ブルーグリーン展開の Kubernetes パイプライン タスクに表示される YAML コードは、名前空間、サービス、展開を作成する次の例のようになります。プライベート所有のリポジトリからイメージをダウンロードする必要がある場合は、Docker 構成の [シークレット] を含むセクションを YAML ファイルに含める必要があります。スマート パイプライン テンプレートを使用する前の Code Stream での CICD ネイティブ ビルドの計画の CD 部分を参照してください。

スマート パイプライン テンプレートによってパイプラインが作成されたら、それぞれの展開での必要に応じてタスクを変更できます。

サンプルの名前空間を作成する YAML コード:

apiVersion: v1
kind: Namespace
metadata:
  name: codestream-82855
  namespace: codestream-82855

サンプルのサービスを作成する YAML コード:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: codestream-demo
  name: codestream-demo
  namespace: bluegreen-799584
spec:
  minReadySeconds: 0
  ports:
  - port: 80
  selector:
    app: codestream-demo
    tier: frontend
  type: LoadBalancer

サンプルの展開を作成する YAML コード:

apiVersion: extensions/v1
kind: Deployment
metadata:
  labels:
    app: codestream-demo
  name: codestream-demo
  namespace: bluegreen-799584
spec:
  minReadySeconds: 0
  replicas: 1
  selector:
    matchLabels:
      app: codestream-demo
      tier: frontend
  template:
    metadata:
      labels:
        app: codestream-demo
        tier: frontend
    spec:
      containers:
      - image: ${input.image}:${input.tag}
        name: codestream-demo
        ports:
        - containerPort: 80
          name: codestream-demo
      imagePullSecrets:
      - name: jfrog-2
      minReadySeconds: 0

次のタスク

Code Stream の使用方法の詳細については、Code Stream を使用するためのチュートリアルを参照してください。

デプロイをロールバックする場合は、Code Stream で展開をロールバックする方法を参照してください。

この他の参考情報については、Code Stream 管理者および開発者向けのその他のリソースを参照してください。