Help us understand the problem. What is going on with this article?

SpinnakerのAutomated Canary Analysis Workshopを受けてきた

More than 1 year has passed since last update.

はじめに

Spinnaker Summit 2018でAutomated Canary Analysis Workshopを受けてきたのでメモ

概要

Canary Releaseとは

名称未設定.png
新しいコードをデプロイした際に先に少量の実サービストラフィックを流して評価することで、全体への影響を抑えつつ展開していける手法

Kayenta

7.png
KayentaはStackdriverやPrometheusなどのメトリクスを使ってCanaryが現在のProductionよりデグレしていないか解析し、自動的に判断してくれるSpinnakerのコンポーネント

Workshop

環境

GCP上にGKE, GCR, GCS, Stackdriver, Pub/Sub, CloudBuildなどを使って構築する
yamlをGCSにアップロード、もしくはCloud Buildでコンテナイメージをビルドを契機にパイプラインが走る構成

yaml -> GCS
Dockerfile -> Cloud Build -> GCR

GCS, GCR -> Pub/Sub -> Spinnaker(Staging -> Canary -> Production) -> K8s(GKE)

インストール

GoogleCloudShell
gsutil cp gs://gke-spinnaker-codelab/base/install.tar .
tar xvf install.tar
./setup.sh kayenta-workshop

これでKubernetesクラスタが作成され, その上にSpinnaker(Kayenta入り)とサンプルのサービスがデプロイされる
また、8080ポートでSpinnakerのWeb UIにアクセスできる

(Automatedでない) Canary Release

割愛、この辺からやればOK

※コンテナのメモリを減らした場合は戻すのを忘れずに

Stackdriverでメトリクスを見てみる

以下のような設定でMetrics Explorerを開いておくとproduction環境のコンテナのメモリ使用率が見れる

Resource type: k8s_container
Metric: kubernetes.io/container/memory/request_utilization
Filter:
    cluster_name=spin-kayenta-workshop
    namespace_name=production
Group By: label top_level_controller_name
Aggregation: mean

Canary Configの作成

SpinnakerのWeb UIの
Applications -> demo -> DELIVERY -> CANARY CONFIGS -> Add configuration
から

NAME AND DESCRIPTION:
     Configration Name: sample-canary-config
FILTER TEMPLATES:
     - Name: mem-request-util-template
       Template: resource.label.cluster_name="spin-kayenta-workshop" AND resource.label.namespace_name="${location}" AND metadata.system_labels.top_level_controller_name="${scope}"
METRICS: 
     - Group: Group 1
       Name: mem-request-util
       Filter Template: mem-request-util-template
       Metric Type: kubernetes.io/container/memory/request_utilization
SCORING:
     Metric Group Weights:
          - Group 1: 100 

てきな感じで作る、見ればわかるが上のStackdriverで見たメトリクスと同じもの

Canary Analysisへパイプラインの変更

PIPELINES -> Deploy Simple Canary to Production -> Configure
からManually Validate Canary Resultsのステージを消して、Wait For Canary ResultsをCanary Analysisに変更する
スクリーンショット 2018-10-19 2.26.45.png

Canary Analysisの設定はこんな感じ

Analysis Config:
     Analysis Type: Real Time (Manual)
     Config Name: sample-canary-config
     Lifetime: 0h5min
     Delay: 2min
     Step: 60sec
Baseline + Canary Server Groups:
     Baseline: backend-primary
     Baseline Location: production
     Canary: backend-canary
     Canary Location: production
Metric Scope:
     Resource Type: k8s_container
Advanced Settings:
     Metrics Account: my-google-account
     Storage Account: my-google-account

Baseline, Canaryの設定は上で設定したCanary Configの${scope}${location}に入り、これを元にメトリクスの比較が行われる

Canary Analysisの動作確認

テスト環境ではトラフィックが来るわけではないので、コードの変更によってパフォーマンスが悪化した場合をシミュレートするために(だと思う)backendのメモリの設定を128Mi -> 12Miに変更してみる

~/services/manifests/backend.yml
        resources:
          requests:
            cpu: 100m
            memory: 12Mi
          limits:
            cpu: 100m
            memory: 12Mi
$ cd services/manifests/
$ ./update-backend.sh

Deploy to StagingはManual JudgementになっているのでOKする

スクリーンショット 2018-10-19 3.17.51.png
上で作ったクエリをStackdriverで見てみると(当たり前だが)canaryのメモリの使用"率"が今のproductionと比べて大幅に高いことがわかる
これをみてCanary Analysisは自動的にProducationへのデプロイを止める
スクリーンショット 2018-10-19 3.23.24.png

おまけ

ThresholdsのMarginalとかMetricのCriticalityとかそのうち書きたい

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした