Flux CD
Kubernetes クラスターを Git と同期させ続けるための GitOps ツールキット
Flux は、Kubernetes クラスターを、Git リポジトリ、Helm リポジトリ、OCI レジストリなどの設定ソースと同期させ続ける、継続的デリバリーのコントローラーの集合です。デプロイは、クラスターに対して命令的なコマンドを実行する作業ではなく、プルリクエストをマージする作業になります。
仕組み
Flux は、クラスター内で少数のコントローラーとして動作します。それぞれが 1 つの仕事を担当します。1 つはソースを取得し、1 つは Kubernetes マニフェストを適用し、1 つは Helm リリースを管理する、といった具合です。コントローラー同士は Kubernetes のカスタムリソースを通じて通信するため、設定するすべてのものが、Git に保存できる YAML そのものです。Flux は、自分自身のインストールを管理することさえできます。flux bootstrap コマンドは、Flux のマニフェストをリポジトリに commit し、そこから同期します。
主要な概念
- Source — 望ましい状態が保存されている場所です。
GitRepository、HelmRepository、OCIRepository、Bucketなどです。Source オブジェクトは、他のコントローラーが使うために、アーティファクトを取得してキャッシュします。 - Kustomization — ソースのどのパスを、どのくらいの頻度で、どのようなオプション(prune、ヘルスチェック、依存関係)で適用するかをクラスターに伝える、Flux 独自のリソースです。Kustomize の
kustomization.yamlと混同しないでください。Flux はそれもビルドできます。 - HelmRelease — Helm リポジトリ、Git リポジトリ、OCI レジストリから Helm チャートをインストールおよびアップグレードし、リリースのライフサイクル全体を処理します。
- Reconciliation(調整) — コントローラーが、Git が宣言していることと実行中のものを比較し、その差を修正するループです。一定の間隔で、また要求に応じて実行されます。
- Bootstrap — Flux をクラスターにインストールし、Git リポジトリに接続して、Flux が自分自身を管理できるようにします。
- Controllers(コントローラー) — source、kustomize、helm、notification、そしてオプションの image-reflector と image-automation のコントローラーです。
チームが Flux で GitOps を採用する理由
- デフォルトで監査可能。 クラスターへのすべての変更には commit があり、通常はレビュー済みのプルリクエストがあります。
- 簡単なロールバック。 デプロイを元に戻すのは
git revertであり、プレッシャーの中で手動のkubectl操作を行う必要はありません。 - 組み合わせ可能。 必要なコントローラーだけをインストールし、それぞれ独立してスケールさせられます。
- プラットフォームチーム向けに作られている。 ネイティブな SOPS によるシークレットの復号、Kubernetes RBAC によるマルチテナンシー、OCI アーティファクト、イメージの自動更新が、ツールキットの一部です。
- ドリフトの修正。 クラスターに直接加えられた変更は、次の調整で元に戻されます。
はじめに
flux CLI をインストールし、Git リポジトリに対して Flux をクラスターに bootstrap し、マニフェスト(プレーンな YAML、Kustomize オーバーレイ、Helm チャート)を指す GitRepository と Kustomization を追加します。以降のガイドでは、単一のアプリケーションから、複数のクラスターとテナントまで、最も一般的な構成を順に説明します。これらは Flux 2.9 を想定して書かれています。インストールするバージョンについては、Flux のドキュメントを確認してください。