My External Storage

Jun 27, 2018 - 4 minute read - Comments - spinnaker

SpinnakerでGKEの自動カナリー分析をするときはStackdriver k8s Monitoring V2 BETAを使う #spinnaker #kayenta

SpinnakerとKayentaを使えばカナリーリリースの結果を自動評価することができる。

Automated Canary Analysis at Netflix with Kayenta
https://medium.com/netflix-techblog/automated-canary-analysis-at-netflix-with-kayenta-3260bc7acc69

この自動分析をGKEで試そうとしていたが、Kubenetes(k8s)コンテナー(Stackdriver)からメトリクスが取れていなかった。 理由がわかったのでメモしておく。

2018/07/06追記
なお、この記事はSpinnaker v1.8.0を利用したときの記事である。
すでにこの問題はPRで対応されており、tagを見る限り1.9.0では改善される見込みだ。

コメントで教えていただきありがとうございました。

TL;DR

  • Spinnaker1.8.0がサポートしているメトリクスのResource Typeにgke_containerは含まれていない
  • そのため、k8sを1.10系にしてStackdriver k8s MonitoringのBeta版を有効にする必要がある。

    GCP_PROJECT=$(gcloud info --format='value(config.project)')
    CLUSTER_NAME=cluster-1
    CLUSTER_VERSION=1.10.4-gke.2
    ZONE=us-central1-a
    CLOUDSDK_CONTAINER_USE_V1_API=false
    CLOUDSDK_API_CLIENT_OVERRIDES_CONTAINER=v1beta1
    gcloud beta container clusters create $CLUSTER_NAME \
    --zone=$ZONE \
    --project=$GCP_PROJECT \
    --cluster-version=$CLUSTER_VERSION \
    --enable-stackdriver-kubernetes \
    --enable-legacy-authorization

Kayentaにメトリクスデータが入ってこない

先日GKE上に自動カナリー分析を有効にしたSpinnakerを構築した。

ただ、実際にパイプラインを動かしてもStackdriver上では見えるメトリクスがSpinnaker上からは見えず、ずっと自動カナリーリリースが失敗していた。

Spinnakerが使うメトリクスのリソースタイプを確認する。

2018/06/27現在のSpinnakerの最新バージョン(1.8.0)でstackdriverの自動カナリー分析の設定を有効にする(hal config canary google edit --gcs-enabled true --stackdriver-enabled true)と、メトリクスのResource Typeは以下になっている。

Resource Types

  • gce_instance
  • aws_ec2_instance
  • gae_app
  • k8s_container
  • k8s_pod
  • k8s_node
  • global

ここでStackdriver MonitoringのResource Typeを確認すると、通常のGKEクラスターのResource Typeはgke_containerになっている。

Monitored Resource Types
https://cloud.google.com/monitoring/api/resources#tag_gke_container

Resource Typeが異なるため、メトリクスを収集することができていなかった。

k8sクラスターを1.10系にしてStackdriver Monitoring Beta版を有効にする

GKE上のk8sクラスターのモニタリングResource Typeを有効にするにはStackdriver MonitoringをBeta版にすれば良い。

Migrating to Kubernetes Monitoring
https://cloud.google.com/monitoring/kubernetes-engine/migration

自分は新しくk8sクラスターを作り直した。

GCP_PROJECT=$(gcloud info --format='value(config.project)')
CLUSTER_NAME=cluster-1
CLUSTER_VERSION=1.10.4-gke.2
ZONE=us-central1-a
CLOUDSDK_CONTAINER_USE_V1_API=false
CLOUDSDK_API_CLIENT_OVERRIDES_CONTAINER=v1beta1
gcloud beta container clusters create $CLUSTER_NAME \
  --zone=$ZONE \
  --project=$GCP_PROJECT \
  --cluster-version=$CLUSTER_VERSION \
  --enable-stackdriver-kubernetes \
  --enable-legacy-authorization

この状態でk8sでコンテナーを起動して、GCP ConsoleからStackdriver Loggingを確認する。 GKE Containerではなく、Kubernetes ContainerというResourceが選択できるようになったら変更成功だ。

Exsits k8s Container

これでSpinnakerからStackdriver経由でGKE上のメトリクスを参照できるようになった。

Metrics on Spinnaker

終わりに

なお、この新しいStackdriver k8s Monitoringは2018/06/27現在まだbeta releaseなのでSLAの対象外になっている。

https://cloud.google.com/monitoring/kubernetes-engine/migration

This is a Beta release of Stackdriver Kubernetes Monitoring. This feature is not covered by any SLA or deprecation policy and might be subject to backward-incompatible changes.

自分はお試しで触っているのでSLAなど気にしないのだが、本番環境で自動カナリーリリース分析をするにはPrometheus経由とかになるのかな?

参考

関連

関連記事