Flux CD
技術

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 のドキュメントを確認してください。