- Blue Green Deployment
- Canary Deployment
- Rolling Deployment
Blue Green Deploymentとは、異なるバージョンのアプリケーションを二つ作り、Load Balancer(OCPの場合はRouterが内部LBとして機能します) の向き先を変更することでアプリケーションのバージョンを切り替える手法です。Blueが現行バージョン、Greenが新バージョンです。
-
プロジェクトを選択します。
$ oc login https://api.cluster-tokyo-ef76.tokyo-ef76.openshiftworkshop.com:6443 $ oc project ユーザー名 (ex. oc project dev01) -
アプリケーション (Blue) を作成します。
$ oc run blue --image=openshift/hello-openshift --replicas=2 --limits='cpu=500m,memory=128Mi' -
作成したアプリケーションのレスポンスを設定します。(このサンプルアプリケーションは環境変数によってレスポンスメッセージが設定可能になっています)
$ oc set env dc/blue RESPONSE="Hello from Blue" -
サービスを作成します。
$ oc expose dc/blue --port=8080 -
サービスを外部公開します。
$ oc expose svc/blue --name=bluegreen -
別バージョンのアプリケーション (Green) を作成します。
$ oc run green --image=openshift/hello-openshift --replicas=2 --limits='cpu=500m,memory=128Mi' $ oc set env dc/green RESPONSE="Hello from Green" $ oc expose dc/green --port=8080 -
トラフィックをBlueに設定します。
$ oc set route-backends bluegreen blue=100 green=0 -
別のターミナルを開き、今どちらのアプリケーションに向いているのか確認します。
$ oc get route bluegreen $ while true; do curl http://<oc get routeで取得したエンドポイント>; sleep .5; done Hello from Blue Hello from Blue Hello from Blue Hello from Blue Hello from Blue Hello from Blue ... -
今度はトラフィックをGreenに向けます。
$ oc set route-backends bluegreen blue=0 green=100 -
再びアクセスすると、別のバージョンに切り替わっていることが確認できます。
$ oc get route bluegreen $ while true; do curl http://oc get routeで取得したエンドポイント; sleep .5; done Hello from Green Hello from Green Hello from Green Hello from Green Hello from Green Hello from Green ...
Canary Deploymentは異なるバージョンのアプリケーションを二つ作り、トラフィックを少しずつ新しいバージョンへ流して、問題が無ければそのまま全て切り替える手法です。
-
プロジェクトを選択します。
$ oc login https://api.cluster-tokyo-ef76.tokyo-ef76.openshiftworkshop.com:6443 $ oc project ユーザー名 (ex. oc project dev01) -
アプリケーションを作成します。
$ oc run prod --image=openshift/hello-openshift --replicas=2 --limits='cpu=500m,memory=128Mi' $ oc set env dc/prod RESPONSE="Hello from Prod" $ oc expose dc/prod --port=8080 -
サービスを作成します。
$ oc expose svc/prod -
次に別バージョンのアプリケーションを作成します。
$ oc run canary --image=openshift/hello-openshift --limits='cpu=500m,memory=128Mi' $ oc set env dc/canary RESPONSE="Hello from Canary" $ oc expose dc/canary --port=8080 $ oc set route-backends prod prod=100 canary=0 -
別のターミナルを開き、トラフィックが片方に寄っていることを確認します。
$ oc get route prod $ while true; do curl http://<oc get routeで取得したエンドポイント>; sleep .5; done Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Prod ... -
トラフィックの配分を変更します。
$ oc set route-backends prod prod=90 canary=10 -
もう一度リクエストを送り、今度はトラフィックが分配されていることを確認します。
$ oc get route prod $ while true; do curl http://oc get routeで取得したエンドポイント; sleep .5; done Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Prod Hello from Canary Hello from Prod Hello from Prod ...
Rolling Updateは新しいバージョンのアプリケーションのPodを少しずつ増やし、古いバージョンのアプリケーションのPodを少しずつ減らして入れ替えていく手法です。
-
プロジェクトを選択します。
$ oc login 接続先クラスタ $ oc project ユーザー名 (ex. oc project dev11) -
アプリケーションを作成します。
$ oc run rolling --image=openshift/hello-openshift --replicas=2 --limits='cpu=500m,memory=128Mi' $ oc expose dc/rolling --port 8080 $ oc expose svc/rolling -
アプリケーションから返されるレスポンスを設定します。
$ oc set env dc/rolling RESPONSE="Hello from new roll" -
Workloads > Deployment Configs > rolling > Podsを確認します。
-
別のターミナルを開き、レスポンスを確認します。
$ oc get route rolling $ while true; do curl http://<oc get routeで取得したエンドポイント>; sleep .5; done Hello from new roll Hello from new roll Hello from new roll ... -
レスポンスを変更します。
$ oc set env dc/rolling RESPONSE="Hello from second roll" -
再度レスポンスを確認し、変更されていることを確認します。
$ oc get route rolling $ while true; do curl http://oc get routeで取得したエンドポイント; sleep .5; done Hello from second roll Hello from second roll Hello from second roll ... -
Workloads > Deployment Configs > rolling > Podsを再度確認し、Pod名が変わっていることを確認します。

