Flux CD と Argo CD:GitOps ツールの選び方
アーキテクチャ、UI、Helm、シークレット、テナンシー、イメージの自動化を比較して、適切なツールを選びます。
Flux と Argo CD は、Kubernetes の 2 つの主要な GitOps コントローラーです。どちらも CNCF の graduated プロジェクトで、どちらも本番環境に対応しており、どちらも同じ 4 つの GitOps の原則、つまり宣言的、バージョン管理、自動的な pull、継続的な調整を実装しています。違いは設計にあり、どちらが適しているかは、機能よりもチームによって決まります。このガイドは、選択するため、あるいは両方を実行すると決めるために、両者を比較します。
2 つの設計思想
Argo CD はアプリケーション中心で、1 つの統合されたシステムとして提供されます。API サーバー、マニフェストをレンダリングする repo サーバー、アプリケーションコントローラー、Web UI です。Git のパスをクラスターと namespace に対応付ける Application を定義すれば、あとは Argo CD がやってくれます。
Flux は、小さな単一目的のコントローラー(source、kustomize、helm、notification、そしてオプションのイメージ自動化)のツールキットで、カスタムリソースを通じて通信します。source とデプロイは別々のオブジェクトなので、1 つの GitRepository が複数の Kustomization に供給できます。組み込みの UI はなく、主なインターフェースは CLI と kubectl です。
役に立つ目安は次のとおりです。Argo CD は見てクリックしたいチームに、Flux は組み合わせてスクリプト化したいチームに向いています。
並べて比較
| 領域 | Argo CD | Flux |
|---|---|---|
| アーキテクチャ | 統合されたコンポーネント | 独立した組み合わせ可能なコントローラー |
| Web UI | 組み込み。ライブのリソースツリーとワンクリックのロールバック | 組み込みなし。CLI、Grafana、またはコミュニティのダッシュボード |
| インストール | 1 つのマニフェストの kubectl apply | flux bootstrap。Flux のマニフェストも Git に commit する |
| 自己管理 | 自分自身を管理できる。設定はユーザーが行う | bootstrap がデフォルトで Git から自分自身を管理する |
| 同期の制御 | デフォルトは手動同期。自動化(auto-sync、prune、self-heal)はオプトイン | デフォルトで自動。本番のゲート制御は Git、タグ、suspend で行う |
| マルチクラスター | 一級の機能:1 つのインスタンスが多くのクラスターを登録して管理する | デフォルトではクラスターごとに 1 つの Flux のインストール。kubeconfig 経由でリモートクラスターも可能 |
| Helm | チャートをテンプレートとしてレンダリングし、マニフェストを適用する | helm-controller が実際の Helm のライフサイクルを実行し、テストと自動ロールバックがある |
| OCI アーティファクト | source としてサポート | マニフェストと Helm チャートの一級の source |
| イメージの更新 | 別のアドオンプロジェクト | タグを Git に commit する、組み込みのオプションのコントローラー |
| シークレット | 外部のプラグインまたは operator(Vault、External Secrets、プラグイン経由の SOPS) | kustomize-controller に SOPS の復号が組み込み。その他のアプローチも可能 |
| マルチテナンシー | Argo CD のプロジェクトと RBAC ポリシー | namespace と service account のなりすまし。Kubernetes RBAC が適用 |
| SSO | 組み込み(Dex 経由または直接の OIDC、SAML) | 不要。アクセスは Kubernetes RBAC |
| 通知 | テンプレート付きの通知エンジン | Alert、Provider、Receiver を持つ notification-controller |
Argo CD が適している場合
- 開発者が、
kubectlなしで、同期ステータス、リソースグラフ、ログを見たい。 - 1 つの中央インスタンスで多くのクラスターを管理し、新しいユーザーの導入を素早くしたい。
- SSO と、プロダクトチーム向けのセルフサービスポータルに大きく依存している。
- チームが、一部の環境で、明示的な手動の同期ステップを好む。
Flux が適している場合
- Git に commit される、自動化されたイメージの更新が欲しい。
- シークレットを、追加のツールを最小限にして、暗号化した状態で Git に置きたい。
- Helm を多用しており、自動ロールバックを含む、本物のリリースのライフサイクルの処理が欲しい。
- 内部プラットフォームを構築しており、組み合わせ可能なコントローラーと、テナントのための Kubernetes ネイティブの RBAC を好む。
- 各クラスターを自己完結にし、認証情報がそこから決して出ないようにしたい。
スケーリング
どちらも大規模なインフラにスケールします。Argo CD は、非常に大きな単一インスタンス向けに、アプリケーションコントローラーのシャーディングと Redis のクラスタリングを提供します。Flux のコントローラーは独立してスケールし、各クラスターが独自のものを実行するため、中央のボトルネックを避けられます。公表されている数値はワークロードによって異なるため、見出しの数字を鵜呑みにせず、自分の環境でベンチマークしてください。
両方を実行できる
両者は敵同士ではありません。一般的な分け方は、開発者が UI の恩恵を受けるアプリケーションのデリバリーに Argo CD を、クラスターのアドオン、インフラ、シークレットに Flux を使うというものです。ただし、2 つに同じリソースを管理させてはいけません。そうしないと、それらをめぐって争います。
選択
- 開発者が初日から UI を必要としていますか。Argo CD から始めます。
- イメージの自動化、組み込みのシークレットの復号、厳格なクラスターごとの自律性が必要ですか。Flux から始めます。
- まだ迷っていますか。このライブラリの最初のアプリケーションのガイドを使って、使い捨ての kind クラスターで、午後いっぱい、それぞれを試してみてください。
両者ともに Git からプレーンな YAML、Helm、Kustomize を読むため、一方から他方への移行は可能ですが、慎重に計画してください。ファイルの名前を変えるだけではありません。リファレンスの詳細は、Flux のドキュメントと Argo CD のドキュメントを参照してください。
人気のガイド
-
Push と Pull:Flux が Kubernetes にデリバリーする仕組み Git 主導の pull 型デリバリーが、デプロイ、セキュリティ、復旧の方法をどう変えるか。 -
GitRepository と Kustomization で最初のアプリケーションをデプロイする Kustomization リソースを使って Flux を Git のマニフェストに向け、同期の様子を確認します。 -
同期動作を制御する:間隔、prune、ドリフトの修正、ロールバック Flux がいつ変更を適用するか、何を削除するか、どう一時停止するか、失敗したデプロイをどう元に戻すかを決めます。 -
Flux Image Automation でイメージの更新を自動化する 新しいコンテナイメージのタグを Flux に検出させ、Git に commit させます。 -
Flux でマルチクラスターを構成する 共有インフラとクラスターごとの違いを持たせて、1 つのリポジトリから複数のクラスターを管理します。