Flux2について調べた
久しぶりにFluxを調べたらFlux2が出ていて、別物になっていたので調べたことをまとめます。
Flux2について
ArgoCDと合流して、GitOpsEngineを開発していくみたいな話になったのですが、結局両者は別れることにことになり、WeaveWorks社が出したのがFlux2 です。 Fluxをカスタムコントローラーなどを利用してリライトしたものという理解でよさそうです。 思想は引き継いでいますが、インストール方法や設定方法はFlux1とは全然違います。
変わったところ
Fluxの各機能はコンポーネント化されていて、カスタムリソースを利用して設定していく形になっています。 また、Helmも正式サポートされています。
Helmを使った例がわかりやすいので紹介すると、今までHelmを利用する場合は下記のようにhelmコマンドを使ってインストールしていたと思います。 helm repo add で chartをレポジトリに追加し、 helm installでchartをクラスタにインストールしています。
helm repo add traefik https://helm.traefik.io/traefik helm install my-traefik traefik/traefik \ --version 9.18.2 \ --namespace traefik
それが、Fluxを使うとこうなります。
flux create source helm traefik --url https://helm.traefik.io/traefik flux create helmrelease --chart my-traefik \ --source HelmRepository/traefik \ --chart-version 9.18.2 \ --namespace traefik
flux create コマンドはk8sクラスタにリソースを作っているわけではなく、それぞれ、 Source, HelmRelease というFluxが定義したカスタムリソースを作成しています。 そして、そのカスタムリソースをHelm Controllerが参照してChartをクラスタにデプロイします。
Gitレポジトリからマニフェストを取得してApplyする場合は、 source として GitRepositryを定義し、それをapplyするkustomizeリソースを作成します。最初ちょっとわかりづらかったのですが、kubectl applyするだけのリソースはなく、 kustomizeリソースを利用するようです。
先ほどのHelmの例で作ったカスタムリソースは下記のようになります。これをkustomizationリソースで反映しても flux create コマンドと同じことができます。
# /flux/boot/traefik/helmrepo.yaml apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: HelmRepository metadata: name: traefik namespace: traefik spec: interval: 1m0s url: https://helm.traefik.io/traefik
# /flux/boot/traefik/helmrelease.yaml apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: traefik namespace: traefik spec: chart: spec: chart: traefik sourceRef: kind: HelmRepository name: traefik version: 9.18.2 interval: 1m0s
GitOpsツール自体の設定の可視化は課題だと思っていたので、カスタムリソースで定義できるのは非常によさそうです。
Configレポジトリのサンプル
マニフェストを保存するConfigレポジトリのサンプルが提供されていました。これをベースにカスタマイズしていくのがよさそうかなと思います。
ArgoCD との比較
こちらにまとまっていました。個人的にはArgoCDは権限周りが複雑そうで、k8sのRBACをそのまま使えるFluxが好みです。