ブルー グリーン デプロイ。 ECSでCodeDeployを使用したBlue/Green Deploymentがサポートされたので早速試してみた #reinvent

Kubernetes で Blue Green デプロイをやってみた

ブルー グリーン デプロイ

ブルーグリーン・デプロイメントは、ユーザートラフィックを、アプリケーションやマイクロサービスの以前のバージョンから、ほぼ同一の新しいリリースに徐々に転送するアプリケーション・リリースモデルで、両バージョンが稼働中の状態で実施するものです。 古いバージョンはブルー環境、新しいバージョンはグリーン環境と呼ばれます。 ブルーからグリーンへのプロダクション・トラフィックの転送が完了すると、ブルーはロールバックに備えてスタンバイさせるか、あるいはプロダクションからプルして更新し、次回の更新の際にテンプレートとして使用することができます。 この継続的なデプロイメントモデルには欠点があります。 すべての環境が、同じアップタイム要件やブルーグリーンのような プロセスを適切に実行するためのリソースを備えているわけではありません。 しかし、多くのアプリケーションは、それらをサポートするエンタープライズのデジタル・トランスフォーメーションのような継続的デリバリーを支援できるように進化しています。 簡単な例を使って説明します。 あなたはシンプルなを開発しました。 ユーザーが画面上を飛ぶ色とりどりの風船をタップしてポイントを獲得するゲームです。 ゲームのバックエンドは、ゲームの実績、スコアリング、メカニクス、コミュニケーション、プレーヤーの識別を処理する複数のベースのによってサポートされています。 最初のリリース後、何百人ものユーザーがゲームをプレイし始めます。 毎分数千ものトランザクションがログに記録されます。 チームが迅速で頻繁なリリースを推奨しているので、あなたは、メカニック・マイクロサービスにマイナーアップデートをリリースして、赤い風船のサイズとスピードを増加しようとしています。 本番環境への更新を深夜 アクティブユーザーの数が最も少ない時間帯 まで待つのではなく、ブルーグリーン・デプロイメントモデルを使用して、ピーク使用時にアプリケーションを更新します。 ダウンタイムは生じません。 これができるのは、本番環境 ブルー でメカニック・マイクロサービスを取得し、それを同一、ただし別個のコンテナ グリーン にコピーしたからです。 運用チームは、ロードバランサーを使用して各ユーザーの次のトランザクションをブルーからグリーンにリダイレクトできます。 すべてのプロダクション・トラフィックがグリーン環境でフィルター処理されると、ブルー環境がオフラインになります。 ブルーは、障害復旧のためのオプションとしてスタンバイすることも、次回の更新のためのコンテナにすることもできます。 は、クラウドネイティブ・アプリケーション、マイクロサービス、コンテナ、継続的インテグレーション、継続的デリバリー、継続的デプロイメント、DevOps など、ブルーグリーン・デプロイメントのプロセスに関連するすべての要素と自然に調和します。 コンテナのオペレーションを自動化する・プラットフォームとして、Kubernetes はクラウドネイティブ・アプリケーションのマイクロサービスをパッケージ化するコンテナのオーケストレーションをサポートするだけでなく、Kubernetes では開発者がアプリケーション・アーキテクチャをゼロから作成せずに再利用できるアーキテクチャ・パターンのコレクションを使用することもできます。 これらの Kubernetes パターンの 1 つに、宣言的デプロイメントパターンがあります。 マイクロサービスは本質的に小さいため、非常に迅速に数を増やすことができます。 宣言的デプロイメントパターンにより、で最小かつ最も単純なユニットである新しいポッドをデプロイするために必要な手動の労力が軽減されます。 そして、Red Hat OpenShift 環境内でブルーグリーン・デプロイメントをロールアウトするためのステップバイステップのコマンドラインプロンプトと引数をしています。 また、エンタープライズ Kubernetes プラットフォームをオープンソースのままにしておくと、プラットフォーム全体とそれに依存するすべてのものを制御できるため、アプリケーションとサービスの場所や、それらが何をサポートしているかに関係なく、そのまま機能させることができます。 そこから始めて、テクノロジーを支えるソースコードを調査、修正、改良しましょう。

次の

CodeBuild,CodeDeploy,CodePipeline3つ使ってCI/CDの環境構築してみた

ブルー グリーン デプロイ

CX事業本部@札幌の佐藤です。 You build this infrastructure using AWS CloudFormation, enabling you to reproduce the environment when needed. You also learn about monitoring and debugging capabilities using Amazon CloudWatch. AWS CloudFormationを使用してこのインフラストラクチャを構築し、必要なときに環境を再現できるようにします。 また、Amazon CloudWatchを使用したモニタリングおよびデバッグ機能についても学びます。 ワークショップURL 以下のURLからご自身のAWS環境を使ってワークショップを体験することができます。 レポート 学べること• ECS Cluster Fargate の作成• ECS タスクやECSサービス、ALBの作成• CloudWatch Logsからビルドログの確認 まとめ このワークショップは予約なしで行ったんですが、待機列がすごい行列になっていて、かなり人気のあるワークショップでした。 途中で打ち切られてしまいまして、結局その場でワークショップを受けることはできませんでしたが、ワークショップのURLはもらうことができたので、帰国してからやってみました。 Code3兄弟の学習にも最適なワークショップでした。 興味のある方はぜひやってみてください。

次の

「ブルーグリーンデプロイメントの仕組み」を理解する (2/3):OpenStack上に構築する、ブルーグリーンデプロイメント実践入門(2)

ブルー グリーン デプロイ

最近の仮想技術とクラウドサービスを使うと、アプリケーションのデプロイ作業もより安全に行える。 その手法の一つが 「ブルー・グリーン・デプロイメント」というモノで、コレを Kubernetes クラスタでやってみた、という話。 Blue Green Deployment とは ブルー・グリーン・デプロイメントとは、 既存のサーバ環境を残したまま 新たなサーバ環境を構築しておき、準備が整ったらロードバランサーで接続先のサーバ環境を新しい方に切り替える、という手法だ。 既存環境を残したまま新環境を用意できるので、 無停止デプロイできる上に、何か問題があったときに元の環境に ロールバックしやすいのが特徴だ。 「既存のサーバ環境」を「ブルー」、 「新たなサーバ環境」を「グリーン」と表現したりするが、一度 「グリーン」側のデプロイが終わったら、次のデプロイ時は 「グリーン」が「既存のサーバ環境」と呼ばれ、 新たにデプロイするのは「ブルー」環境、ということになる。 参考:• 参考: どうして青と緑なのかは、調べても出てこなかった。 ただ、• 「正系」と「副系」を決める アクティブ・スタンバイ構成 アクティブ・パッシブ構成 とも違うし、• 両方を同時に動かす アクティブ・アクティブ構成 二重化・多重化・冗長化 とも違うし、 と思うと、「どっちも正系なんだけど普段使うのは片方」という意味合いを表現するには、青と緑が良かったのかも?• 参考: ブルー・グリーン・デプロイメントによく似た手法として、 「イミュータブル・デプロイ Immutable Deployment 」というモノがある。 手順は同じなのだが、最後に 「古くなった環境を捨てる」場合はイミュータブル・デプロイになる。 ブルー・グリーン・デプロイは使っていない方の環境も残したままになっているので、何か問題があった時は古いバージョンに差し戻しやすくなる。 しかし、使っていないとはいえ2環境を稼動させたままになるので、リソースを食う。 Kubernetes でブルー・グリーン・デプロイをやってみる ブルー・グリーン・デプロイ自体は単なる手法なので、物理サーバでも行えることだが、今回は Kubernetes クラスタでコレを実現してみる。 手順およびサンプルコードは以下の記事を参考にした。 参考: 1. 初回リリース まずは初回リリース。 ココでは「Blue」を「既存環境」とするため、以下のような Deployment と Service を kubectl apply で適用して、Web アプリを稼動させておく。 deployment-blue. service. yaml apiVersion : v1 kind : Service metadata : name : nginx-service labels : name : nginx spec : type : LoadBalancer selector : Blue の Pod 群を指定する name : nginx version : blue ports : - name : http port : 80 targetPort : 80 こんな感じ。 replicas の指定のとおり、Pod としては3台稼動している状態だ。 Load Balancer Service が割り振る Pod 群を特定するために指定したラベルは、 name と version プロパティを振っているが、この辺のラベル名や値はお好みで。 実際はリリースするバージョン番号とかを書いた方が分かりやすいかも。 「Green」環境をデプロイする さて、この状態で、新しいバージョンをリリースしてみよう。 既存の nginx-deployment-blue Deployment はそのまま保持するので、 deployment-blue. yaml ファイルを変更して適用するのではなく、このファイルをコピーして deployment-green. yaml というファイルを作る。 deployment-green. yaml との違いはコメントがある部分のみ。 Deployment 名、Pod のラベル、使用する Docker イメージが違う。 yaml コマンドで適用し、デプロイする。 Green 側の Web アプリもリクエストを待ち受けている状態にはなっているが、Load Balancer Service が Blue 側の Pod たちにしかリクエストを割り振らないので、Green 側が外部から呼び出されることはない状態だ。 ココまでで、Green としてデプロイした各 Pod が正常に動作しているか確認しておく。 Load Balancer 経由で到達できないだけで、Green 側の直接 IP アドレスを叩いて動作確認してみたりはできるだろう。 通信先を Blue の Pod 群から Green の Pod 群に変える さて、デプロイした Green の Pod 群が問題なさそうなら、Load Balancer Service の設定を変更して、Blue の Pod 群ではなく Green の Pod 群に通信を割り振るようにする。 使用するのは先程使った service. yaml だ。 service. yaml apiVersion : v1 kind : Service metadata : name : nginx-service labels : name : nginx spec : type : LoadBalancer selector : Green の Pod 群を指定する name : nginx version : green ports : - name : http port : 80 targetPort : 80 変更したのは spec. selector 部分のみ。 yaml コマンドを実行すれば、即座にリクエストが Green 側で処理されるようになる。 Blue 側の Pod 群は稼動はしたままだが、Load Balancer 経由ではリクエストを受け取ることはなくなった。 イミュータブル・デプロイ : Blue 環境を捨てておく あとはオマケ。 ココまでだと、6台の Pod が動いたままになる。 リリース直後は Blue 側にロールバックすることも考えて、環境を残しておいても良いが、しばらくしたらロールバックの備えも必要なくなるだろう。 使っていないとはいえ多少リソースは食うし、システムログなんかは随時溜まっていく。 時間が経つと、実際どの Pod がリクエストを処理しているのか、パッと見で分かりにくくなったりもするので、個人的には Blue 側の環境は最終的には削除したいと思う。 Blue の Pod 群も合わせて破棄される。 呼ばれなくなった Pod 群を破棄しただけなので、利用されている Green 側の Deployment や Pod 群には影響なし。 この次のリリース時は、 deployment-blue. yaml を新バージョンに書き換えて適用していけば、Green から Blue に切り替えられる、というワケ。 以上 なんだか最終的に ブルー・グリーン・デプロイではなく イミュータブル・デプロイをやってみた感じになったが、手順はとっても簡単だった。 Kubernetes だとこういう「サーバのデプロイ」みたいな作業が簡単に行えて素晴らしい。 レガシーなオンプレ環境の頃は、「本番作業室」に入室して、リリース資材を共有サーバに中継して、本番環境にリモート接続して、手順書に沿ってリリース作業をして…みたいなことを、夜間に半日〜1日がかりでやっていたが、Kubernetes なら設定ファイルを書き換えて kubectl コマンドを2・3回叩けば終わるからなぁ。 本当に楽になった…。

次の