ブルーグリーンは、2 台の Docker ホストを使用して両者を同じように Kubernetes クラスタに展開および構成する展開モデルです。ブルーグリーン展開モデルで Code Stream のパイプラインがアプリケーションを展開するようにすると、ご使用の環境のダウンタイムを短縮できます。
展開モデルのブルー インスタンスとグリーン インスタンスは、それぞれ異なる目的を果たします。一度に 1 つのインスタンスのみが、アプリケーションを展開するライブ トラフィックを受け入れます。各インスタンスは、一定の時刻にそのトラフィックを受け入れます。ブルー インスタンスはアプリケーションの最初のバージョンを受け取り、グリーン インスタンスは 2 番目のバージョンを受け取ります。
ブルーグリーン環境のロード バランサによって、アプリケーションを展開するときにライブ トラフィックがどのルートをたどるかが決まります。ブルーグリーン モデルを使用すると、環境は動作し続け、ユーザーはダウンタイムがあっても気づかず、パイプラインはアプリケーションを本番環境に継続的に統合して展開します。
Code Stream でパイプラインを作成すると、ブルーグリーン展開モデルが 2 つのステージで表されます。開発用のステージと本番用のステージです。
Code Stream パイプライン ワークスペースでは、継続的インテグレーション タスクとカスタム タスクで Docker と Kubernetes がサポートされます。
ワークスペースの構成については、パイプライン ワークスペースの構成を参照してください。
タスク タイプ | タスク |
---|---|
Kubernetes | ブルーグリーン展開用の名前空間を作成します。 |
Kubernetes | Docker Hub のプライベート キーを作成します。 |
Kubernetes | アプリケーションの展開に使用するサービスを作成します。 |
Kubernetes | ブルー展開を作成します。 |
ポーリング | ブルー展開を確認します。 |
Kubernetes | 名前空間を削除します。 |
タスク タイプ | タスク |
---|---|
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 ネイティブ ビルドの計画を参照してください。
手順
結果
完了です。スマート パイプライン テンプレートを使用して、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 管理者および開発者向けのその他のリソースを参照してください。