About
- https://argoproj.github.io/argo-rollouts/
- https://github.com/argoproj/argo-rollouts
- https://techstep.hatenablog.com/entry/2020/10/13/084905
Argo Rolloutsは、Blue/Green や Canary といったdeploy strategiesを提供します。
Kubernetes Deployment標準のdeploy strategies(RollingUpdate) と比較し高度なデプロイ機能を提供します。
(参考: Why Argo Rollouts?)
Architecture
Argo Rollout Controller
Rolloutresource typeを監視し変更が生じると定義と同じ状態にする役割を持つコントローラ
Rollout resource
Argo RolloutのCustomResource- Deployment resource typeとほぼ互換性がありますが、deployment strategiesとしてcanaryやblue-greenをサポートしそれらのためのフィールドを持つ
ReplicaSet
- Kubernetesの標準的なReplicaSet
Argo Rolloutが作成・管理します- rolloutで管理するためのメタデータも追加されます
- 上図では
Canary ReplicaSetやStable ReplicaSetと表記されている箇所旧version applicationが動作するStable ReplicaSet- stable昇格前の新version applicationが動作する
Canary ReplicaSet
Ingress / Service
Serviceに対するtrafficをどのReplicaSetへroutingするのかをselectorで管理しますIngressと連携することでcanary serviceに対するtraffic routingの比重やrouting ruleを制御できますServiceのみの場合、stable と canary のPod数でのみtraffic routingの比重を制御します-
Ingressの場合、パーセンテージ / HTTP Header / Mirror といった手法でのtraffic routingを実現できますWarning
HTTP Header や MirrorはIngress Controllerによってサポート状況が異なります
AnalysisTemplate / AnalysisRun
- https://argoproj.github.io/argo-rollouts/features/analysis/
AnalysisとはArgo Rolloutがdeploy中にMetricsProviderに接続し特定のMetricsに対する閾値を設定しておくことで新version applicationが正常に動いているかどうかを検証する仕組みです- Metricsが良好な場合はrolloutはdeployを継続し、そうでない場合はdeployを中断しrollbackします
Analysisを実行するためのCutomResourceとしてAnalysisTemplateとAnalysisRunがありますAnalysisTemplate- MetricsProviderやAnalysisに使用するMetricsに関する設定
- Rollout Resourceに直接設定、
AnalysisTemplateもしくはClusterAnalysisTemplateResourceとして定義する
AnalysisRunAnalysisTemplateの実行結果- 特定の
RolloutResourceにscopeされます
Deploy Strategies
rollout CRDの .spec.strategy で blueGreen もしくは canary を指定します。
Blue/Green
- https://argoproj.github.io/argo-rollouts/features/bluegreen/
- rolloutのBlue/Greenデプロイでは
activeServiceとpreviewServiceという2つのServiceを指定しますactiveServiceは旧version application ReplicaSetへtrafficをroutingしますpreviewServiceは新version application ReplicaSetへtrafficをroutingします
- rolloutの
.spec.templateが定義されている場合は新ReplicaSetを作成しますactiveServiceにtrafficが流れていない場合はすぐに新ReplicaSetへ切り替え、そうでない場合は新ReplicaSetが利用可能になるまでは旧ReplicaSetへroutingします- 新ReplicaSetが利用可能になったら
activeServiceを新ReplicaSetへroutingを切り替えます
Canary
- https://argoproj.github.io/argo-rollouts/features/canary/
- rolloutのCanaryデプロイでは旧Serviceには旧version applicationに対するtrafficをroutingしつつtrafficを徐々に新Serviceにroutingします
- rollout CRDの
spec.strategy.canary.stepsで新Serviceへtrafficをroutingする比重と移行間隔を指定します
- rollout CRDの
Progressive Delivery
Progressive Delivery とはContinuous Deliveryを発展させた考え方で、canary deploy途中で新version applicationを解析し正常であればdeployを継続、異常であれば旧version applicationへrollbackするといった考え方や仕組みを指します。Argo Rolloutsでは Analysis 機能を利用します。
Analysis
- Rollout の
sepc.strategy.canary.analysis - blue/green strategyでも
Analysisを利用可能- 新version applicationのReplicaSetのscaleが完了しトラフィックを新しいバージョンに切り替える前後で
AnalysisRunを起動できます - https://argoproj.github.io/argo-rollouts/features/analysis/#bluegreen-pre-promotion-analysis
- https://argoproj.github.io/argo-rollouts/features/analysis/#bluegreen-post-promotion-analysis
- https://aws.amazon.com/jp/blogs/architecture/use-amazon-eks-and-argo-rollouts-for-progressive-delivery/
- 新version applicationのReplicaSetのscaleが完了しトラフィックを新しいバージョンに切り替える前後で
Analysisに関するカスタムリソース
- https://argoproj.github.io/argo-rollouts/features/analysis/#custom-resource-definitions
AnalysisTemplate- 解析方法についての定義したカスタムリソース
- namespaceごと
ClusterAnalysisTemplateAnalysisTemplateと同じ- cluster wide
AnalysisRunAnalysisTemplateを実行するためのインスタンス化されたもの- Kubernetesの
Jobリソースと似ていて最終的に完了します - 実行結果としては
Successful、Failed、Inconclusiveがあり、それぞれがrolloutのdeployが継続、中断、または一時停止されるかに影響します。
Experiment- 後述
experimentation
- https://argoproj.github.io/argo-rollouts/features/experiment/
- 1つまたは複数のReplicaSetをエフェメラルなリソースとして起動させ、backgroundでAnalysisRunを実行させることで新version applicationの正常性確認を行えます
Experimentで1つまたは複数のReplicaSetとAnalysisTemplateの指定を行いますRolloutリソース内のstepsとしてexperimentを定義することも可能です


