LoginSignup
1
0

More than 3 years have passed since last update.

FlaggerでBlue/Greenデプロイメントを試した

Posted at

先日FlaggerでBlue/Greenデプロイメントをやる案件があり、FlaggerのインストールからBlue/Greenデプロイメントの動作を確認するところまで一通りを試したので、結果を残しておく。
今回はSlackへの通知を設定したので、更新があったりプロモーションが完了したりするとSlackに通知が来る様になっている。

Flaggerインストール及びBlue/Greenデプロイメント

Flagger インストール

基本的には以下のページを参照。Istioを有効にしてデプロイしたGKEクラスタ向けの手順もあるが、より汎用性の広い手順を試した。
https://docs.flagger.app/install/flagger-install-on-kubernetes

Flaggerのインストールは基本的にhelmを使って行う。まずはhelmのリポジトリを追加する。

helm repo add flagger https://flagger.app

次にFlaggerで使用するCanary CRDを追加する。名称はCanaryだが、カナリアデプロイのほか、Blue/green deploymentでも使用する。

kubectl apply -f https://raw.githubusercontent.com/weaveworks/flagger/master/artifacts/flagger/crd.yaml

Flaggerで使用するメトリクスサーバとしてprometheusを使用する。今回はistioサンプルのprometheusインストール用プロファイルを使用する(あらかじめどこかしらにistioのリリースをダウンロードしている前提。ダウンロードしていない場合、istioのリポジトリを直接指定しても可)。

Kubectl apply -f ./istio/samples/addons/prometheus.yaml

Flaggerをhelmでインストールする。flaggerはhelmインストール時の引数で機能を有効にするので、今回はメッシュプロパイダーとしてistio、メトリクスサーバとしてprometheus、通知先としてslackを登録する。あらかじめslackにアプリを登録し、webhook urlを取得しておく必要がある。また、通知先のチャネルはアプリ側のチャンネルに上書きされる。

helm upgrade -i flagger flagger/flagger \
--namespace=istio-system \
--set crd.create=false \
--set meshProvider=istio \
--set metricsServer=http://prometheus:9090 \
--set slack.url=https://hooks.slack.com/services/your/webhook/url \
--set slack.channel=general \
--set slack.user=flagger-app

Blue/green deployment

Blue/green deploymentは以下のページを参照しつつ検証した。
https://docs.flagger.app/tutorials/kubernetes-blue-green
また、使用したコードは以下のリポジトリに保存した。
https://github.com/uS-aito/argocd-and-flagger-labo

Blue/green deploymentの検証はtest namespace上で行うので、まずはtest namespaceを作成する。

kubectl create ns test

まず、各種テストで使用するPodをデプロイする。

kubectl apply -k github.com/weaveworks/flagger//kustomize/tester

次に、サンプルアプリをデプロイする。

Kubectl apply -f app -R

Podinfoコンテナを含むdeploymentリソースと、CPU使用率を参照してpod数を2-4の範囲で調整するhpaリソースがデプロイされた。
flaggerはまずprogressive deliveryで管理したいdeploymentをデプロイしておき、次にそのdeploymentをspec.targetrefで指定したcanaryリソースをデプロイする。このcanaryリソースは指定されたdeploymentを基にしたprimary deployment(リソース名は元のdeploymentに-primaryをつけたもの)をデプロイし、元のdeploymentのpod数を0にスケールする。その後、元のdeploymentに変更があるたび、canary deployment(リソース名は元のdeploymentに-canaryをつけたもの)をデプロイし、メトリクスの確認等の動作を行なった上で、トラフィックを誘導する。

Canaryリソースをデプロイする。

Kubectl apply -f canary.yaml

これ以降、元のdeploymentにpodの再生成が必要な更新が加えられるたび、canary deploymentの作成以降の動作が行われる。その様子は以下のコマンドで確認することができる。

kubectl -n test describe canary/podinfo

Slackへの通知

flaggerのインストール時にSlackのwebhook URLを指定したので、何かあるたびにSlackへ通知が来る様になっている。その通知の例は以下の通り。

更新が成功した場合
image.png
Canary alaysisとなっているが、やっていることはBlue/Green Deploymentである。

更新が失敗した場合
image.png
一度デプロイしたものの、メトリクス条件を満たさなかったのでロールバックが発生した場合の例。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0