
Kubernetesの普及と継続的デリバリーの定着により、新バージョンのリリースはかつてないほど自動化されています。しかし、不具合のあるバージョンをデプロイしてしまったらどうなるでしょうか? 正常な以前のバージョンへ戻すのに、どれだけの時間と労力がかかるでしょうか?
kuberbs(Kubernetes Rollback System)は、この課題を解決するためのツールです。Kubernetesのデプロイメントを監視し、エラー率(ユーザー定義のメトリクス)がしきい値を超えた場合に、自動で以前のバージョンへロールバックします。
現時点では、エラー率の指標としてStackdriverとDatadogのメトリクスに対応しています。今後は他の監視システムとの連携も順次追加していく予定です。
kuberbsはGoで実装されており、GKEクラスタのkube-system名前空間にPodとして稼働します。クラスタ本体に手を加える必要は一切ありません。
kuberbsはCRD(Custom Resource Definition)を利用し、Operatorとして、監視対象のデプロイメント・メトリクス・しきい値といった設定を管理します。
apiVersion
:"doit.com/v1" kind
: Rbsmetadata
:name
: my-rbs-examplespec
:watchperiod
: 5metricssource
: stackdrivernamespaces
: -name
: defaultdeployments
: -deployment
:name
: hello-kubernetes-app#Stack driver metric metric
: logging.googleapis.com/user/hello-kubernetes-app-errorsthreshold
: 1 -deployment
:name
: kubernetes-app-2# DataDog metric metric
: gcp.container.cpu.usage_time{*}threshold
: 85 -name
: kube-systemdeployments
: -deployment
:name
: kube-dnsmetric
: logging.googleapis.com/user/digthreshold
: 30設定は、kuberbsのConfigMapで定義された環境変数を通じて行います。
apiVersion
: v1data
:KUBERBS_CHECKMETRICSINTERVAL
:"10" KUBERBS_APIKEY
:"" KUBERBS_APPKEY
:"" KUBERBS_DEBUG
:"false" kind
: ConfigMapmetadata
:labels
:app
: kuberbsname
: kuberbs-confignamespace
: kube-systemKubeRBSの動作は、こちらの短い動画でご覧いただけます。
kuberbsはまだ初期段階ですが、大きな構想のもとで開発を進めています。改善やユースケースの拡充に向けて、コントリビューターを積極的に募集しています。ぜひプロジェクトにご参加ください。
他の記事もぜひブログでチェックしてください。AvivのTwitterのフォローもお待ちしています。