Flux Deep Dive: A GitOps Approach to Progressive Delivery
KubeCon + CloudNativeCon Europe 2020 1日目 のセッションである Flux Deep Dive: A GitOps Approach to Progressive Delivery
についてです。
GitOps を実現する CD ツールの一つである Flux について、Experimental な内容の話でした。
Flux は、2019年に話題になった Argo Flux (Flux の GitOps に関するコアな部分に https://github.com/argoproj/gitops-engine を利用したもの) を諦めて、今後 v2 として GitOps Toolkit となるようです。*1
GitOps Toolkit のドキュメントは以下です。発表の内容もほとんどこのドキュメントからでした。
Flux v1 と v2 の違い
GitOps Toolkit
GitOps Toolkit は以下のコンポーネントからなる
- Source Controller
- Kustomize Controller
- Helm Controller
- Notification Controller
- (検討中らしい) image-update-controller
- (検討中らしい) fleet-controller
Source Controller
以下のカスタムリソースを提供する。
- GitRepository Resource
- HelmRepository Resource
- HelmChart Resource
これらのアーティファクトを以降の Kustomize Controller や Helm Controller が参照する。
Kustomize Controller
以下のカスタムリソースを提供する。
Kustomization
- Source Controller の扱う
GitRepository
Resource を参照して以下を実施kustomize build
よりマニフェストを生成- yaml のバリデーションチェック
- Kubernetes に apply
- apply したものの Health Check
- Notification Controller 経由で様々な外部サービスへ通知
- Source Controller の扱う
Helm Controller
以下のカスタムリソースを提供する。
HelmRelease
HelmRepository
,HelmChart
Resource を参照して以下を実施- Helm Release を生成
- Kubernetes に apply
Notification Controller
以下のカスタムリソースを提供する
Receiver
- GitHub, Harbor 等からイベントを受け取り、それをもとに上記 Controller (
Source
,Kustomize
,Helm
) のイベントを発火する
- GitHub, Harbor 等からイベントを受け取り、それをもとに上記 Controller (
Provider
,Alert
- 上記 Controller からイベントを受け取り、それをもとに外部サービスへ通知する
Flagger
Flux v2 でも Flagger を使って以下の delivery strategies を取れるそうです。
- Canary Release (progressive traffic shifting)
- A/B Testing (HTTP headers and cookies traffic routing)
- Blue/Green (traffic mirroring, traffic switch)
感想
個人的に Argo CD と Flux の統合により最強 GitOps 用 CD ツールが決定しないかなと軽く期待していたため、Flux が GitOps Engine を使わない選択をしたことは正直残念です。 これからも Flux v2 の動向もそうですし、残された GitOps Engine の動向も探っていこうと思います。