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
  • これらのコンポーネントtk という CLI ツールから操作可能

Source Controller

以下のカスタムリソースを提供する。

  • GitRepository Resource
  • HelmRepository Resource
  • HelmChart Resource

これらのアーティファクトを以降の Kustomize Controller や Helm Controller が参照する。

f:id:skitazawa1121:20200818233531p:plain

Kustomize Controller

以下のカスタムリソースを提供する。

  • Kustomization
    • Source Controller の扱う GitRepository Resource を参照して以下を実施
      • kustomize build よりマニフェストを生成
      • yaml のバリデーションチェック
      • Kubernetes に apply
      • apply したものの Health Check
      • Notification Controller 経由で様々な外部サービスへ通知

f:id:skitazawa1121:20200818233455p:plain

Helm Controller

以下のカスタムリソースを提供する。

  • HelmRelease
    • HelmRepository , HelmChart Resource を参照して以下を実施

f:id:skitazawa1121:20200818233448p:plain

Notification Controller

以下のカスタムリソースを提供する

  • Receiver
    • GitHub, Harbor 等からイベントを受け取り、それをもとに上記 Controller (Source, Kustomize, Helm) のイベントを発火する
  • Provider , Alert
    • 上記 Controller からイベントを受け取り、それをもとに外部サービスへ通知する

f:id:skitazawa1121:20200818233552p:plain

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 の動向も探っていこうと思います。