背景
ArgoRolloutsを利用し、Canary Releaseの動作検証をおこなっていました。
その中で、PrometheusのQueryを利用し、canary状態のPod(コンテナ)のデータ(例:CPU使用量)を取得するシナリオを考えていました。
取得したデータの値によって、成功 or 失敗を判断し、canaryからstableに昇格もしくは前バージョンにrollbackさせることが目的です。
悩んだこと
ここで悩んだのが、canary状態のPodを認識する方法です。
Pod名やコンテナ名でクエリーすると、canaryとstableの両方のデータが取れてしまいます。canaryのPodだけを識別するにはどうすれば良いのだろう?と悩んでしました。
解決方法
そんな中、 Ephemeral Metadata(エフェメラルメタデータ) という機能を見つけました。
Rolloutリソースのマニフェストに、stableMetadata
とcanaryMetadata
を指定でき、ラベルやアノテーションを設定できます。
canaryMetadata
に指定したメタデータは、canary状態の間だけ適用され、stable状態になったら自動で削除されます。
そして、stableMetadata
に指定したメタデータが設定されます。
これを使うことで、事前に定義したラベルを使って、canary状態のPodのデータのみを取得することが可能になりました。
参考
Ephemeral Metadata
https://argo-rollouts.readthedocs.io/en/release-1.5/features/ephemeral-metadata/