FlaggerでBlue/Greenデプロイメントを試した
先日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へ通知が来る様になっている。その通知の例は以下の通り。
更新が成功した場合
Canary alaysisとなっているが、やっていることはBlue/Green Deploymentである。
Author And Source
この問題について(FlaggerでBlue/Greenデプロイメントを試した), 我々は、より多くの情報をここで見つけました https://qiita.com/uS_aito/items/b64d4e5cb83f48683775著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .