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として定義する
 
- AnalysisRun- AnalysisTemplateの実行結果
- 特定の 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ごと
 
- ClusterAnalysisTemplate- AnalysisTemplateと同じ
- cluster wide
 
- AnalysisRun- AnalysisTemplateを実行するためのインスタンス化されたもの
- 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を定義することも可能です
 


