GitOpsツールOSS比較:ArgoCD vs Flux vs Rancher Fleet でKubernetes継続デリバリー
オープンソースラボ編集部 ・ 2026年6月13日
GitOpsツールOSS比較:ArgoCD vs Flux vs Rancher Fleet でKubernetes継続デリバリー
Gitリポジトリを「唯一の真実のソース」として、KubernetesクラスターをGitの状態に自動同期させる「GitOps」は現代のKubernetesデプロイのデファクトスタンダードです。ArgoCD(Web UI重視・CNCF卒業)・Flux(CLI重視・CNCF卒業)・Rancher Fleet(大規模マルチクラスター)はOSSのGitOpsツールで、CI/CDパイプラインの末端としてGit-push-to-deployを実現します。
GitOpsツールの選定理由
- デプロイ標準化:
kubectl apply手動作業をなくし、すべての変更をGitコミット経由にする - ドリフト検出・自動修正: 誰かが手動でKubernetesリソースを変更しても、Gitの状態に自動復元
- マルチクラスター管理: 開発/ステージング/本番クラスターのデプロイをGit一元管理
- Helmチャート/Kustomize対応: 既存のHelmチャートをそのままGitOpsで管理
- 可視性: どのブランチ・コミットがどのクラスターで動いているか常に把握
主要ツールの概要
ArgoCD
Intuit発祥・現在はCNCF卒業プロジェクトです。GitHubスター17k+。Webベースのダッシュボードでアプリケーションの同期状態・ドリフト・ロールバックを視覚的に操作でき、特に初めてGitOpsを導入するチームに向いています。
# ArgoCDをKubernetesにインストール
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# ArgoCDのUIにアクセス(port-forward)
kubectl port-forward svc/argocd-server -n argocd 8080:443
# 初期パスワードを取得
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
# ArgoCDのCLIをインストール
brew install argocd # Mac
# または https://github.com/argoproj/argo-cd/releases からバイナリDL
# CLIでログイン
argocd login localhost:8080 --username admin --password $(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
# ArgoCD Application(宣言的設定)
# argocd-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-production
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/k8s-manifests.git
targetRevision: main
path: apps/my-app/production
# Helmチャートを使う場合
# chart: my-app
# helm:
# valueFiles:
# - values-production.yaml
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true # Git から削除されたリソースをクラスターからも削除
selfHeal: true # 手動変更をGitの状態に自動修正
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
# GitHub ActionsからArgoCDのsyncを手動トリガー
# .github/workflows/deploy.yml
name: Deploy via ArgoCD
on:
push:
branches: [main]
paths:
- 'src/**'
- 'Dockerfile'
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
push: true
tags: registry.yourcompany.com/myorg/my-app:${{ github.sha }}
- name: Update manifest (kustomize)
run: |
git clone https://x-access-token:${{ secrets.GIT_TOKEN }}@github.com/myorg/k8s-manifests.git
cd k8s-manifests
kustomize edit set image registry.yourcompany.com/myorg/my-app:${{ github.sha }}
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git add .
git commit -m "chore: update my-app image to ${{ github.sha }}"
git push
working-directory: apps/my-app/production
Flux
Weaveworks発祥・現在はCNCF卒業プロジェクトです。GitHubスター14k+。ArgoCDと異なりWebUIがなくCLI中心ですが、Gitリポジトリの変更を自動検出する自動ポーリング・OCI Artifactsを使ったManifest配布・Notificationコントローラーによるアラートが特徴です。
# Flux CLIをインストール
curl -s https://fluxcd.io/install.sh | sudo bash
# クラスターにFluxをインストール(GitHubと連携)
flux bootstrap github --owner=myorg --repository=fleet-infra --branch=main --path=./clusters/production --personal # 個人リポジトリの場合
# これにより以下が行われる:
# 1. myorg/fleet-infraリポジトリを作成(既存の場合はスキップ)
# 2. ./clusters/production/ にFluxコンポーネントのマニフェストをコミット
# 3. KubernetesクラスターにFluxコンポーネントをインストール
# 4. FluxがGitリポジトリを自動的に監視し始める
# Flux GitRepository + Kustomization(宣言的設定)
# flux/source.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-app
namespace: flux-system
spec:
interval: 1m # 1分ごとにGitリポジトリをポーリング
url: https://github.com/myorg/k8s-manifests
ref:
branch: main
secretRef:
name: flux-system # GitHub PAT or SSH key
---
# flux/kustomization.yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: my-app-production
namespace: flux-system
spec:
interval: 5m
targetNamespace: production
sourceRef:
kind: GitRepository
name: my-app
path: "./apps/my-app/production"
prune: true # 削除されたリソースをクラスターからも削除
healthChecks:
- apiVersion: apps/v1
kind: Deployment
name: my-app
namespace: production
timeout: 5m
retryInterval: 2m
# Flux ImageAutomation(イメージタグを自動更新)
# CI後に自動でマニフェストのイメージタグを更新してGitにコミット
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: my-app
namespace: flux-system
spec:
image: registry.yourcompany.com/myorg/my-app
interval: 1m
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: my-app
namespace: flux-system
spec:
imageRepositoryRef:
name: my-app
policy:
semver:
range: ">=1.0.0" # セマンティックバージョンの最新を自動選択
---
apiVersion: image.toolkit.fluxcd.io/v1beta1
kind: ImageUpdateAutomation
metadata:
name: my-app
namespace: flux-system
spec:
interval: 1m
sourceRef:
kind: GitRepository
name: my-app
git:
checkout:
ref:
branch: main
commit:
author:
name: Flux Bot
email: flux@yourcompany.com
messageTemplate: "chore: update image to {{range .Updated.Images}}{{println .}}{{end}}"
push:
branch: main
update:
strategy: Setters # # {"$imagepolicy": "flux-system:my-app"} コメントでタグを特定
Rancher Fleet
Rancher(SUSE)が開発するマルチクラスター対応のGitOpsエンジンです。GitHubスター2k+。1つのコントロールプレーンから数百〜数千のKubernetesクラスターにGitOps同期でき、クラスターをラベルでグルーピングしてデプロイメントグループを管理できます。
# Fleet GitRepo(複数クラスターへの同期)
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: my-app
namespace: fleet-default
spec:
repo: https://github.com/myorg/k8s-manifests
branch: main
paths:
- apps/my-app
targets:
# クラスターをラベルで選択
- name: production-clusters
clusterSelector:
matchLabels:
env: production
region: asia-northeast
- name: staging-clusters
clusterSelector:
matchLabels:
env: staging
# stagingは追加の値を上書き
helm:
values:
replicas: 1
resources:
limits:
memory: 512Mi
機能比較表
| 比較項目 | ArgoCD | Flux | Rancher Fleet |
|---|---|---|---|
| ライセンス | Apache-2.0 | Apache-2.0 | Apache-2.0 |
| CNCF | 卒業 | 卒業 | ❌ |
| Web UI | ✅ リッチ | ❌ なし | ✅ Rancher UI |
| マルチクラスター | ✅ | ✅ | ✅ 大規模向け |
| Helm対応 | ✅ | ✅ | ✅ |
| Kustomize対応 | ✅ | ✅ | ✅ |
| イメージ自動更新 | ArgoCD Image Updater | ✅ 内蔵 | ❌ |
| ドリフト検出 | ✅ | ✅ | ✅ |
| GitHub Stars | 17k+ | 14k+ | 2k+ |
CI/CDのGitOpsパイプラインの入口となるワークフロー自動化はopen-source-workflow-automation(/categories/low-code)を参照。コンテナイメージの管理はDevOpsカテゴリ/categories/devopsにまとめています。
FAQ
Q. ArgoCDとFluxはどちらを選ぶべきですか?
A. 選択基準は「チームの規模・UIの必要性・GitOps成熟度」で判断します。ArgoCD推奨のケース: ①チームがGitOpsに不慣れでダッシュボードによる可視化が必要②複数チームが同一クラスターを共有しプロジェクト単位でアクセス制御が必要③Applicationセットを使って複数環境(dev/stg/prod)を統一管理したい。Flux推奨のケース: ①CLI中心の操作でUIは不要②GitリポジトリのStructure(モノレポ/ポリレポ)に合わせた柔軟な設定が必要③イメージ自動更新(Flux Image Automation)をGitOpsパイプラインに組み込みたい。両者の差は小さく、Flux v2ではFlux UIもコミュニティがOSSで開発中です。まず使いやすさでArgoCDを試して、規模が大きくなったらFluxへ移行するチームも多いです。
Q. ArgoCD ApplicationSetを使って複数環境に同じアプリをデプロイする方法は?
A. ApplicationSetはArgoCD 2.x+の機能で、1つの定義から複数のApplicationを自動生成します。
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: my-app-environments
namespace: argocd
spec:
generators:
- list:
elements:
- env: development
cluster: https://dev-cluster.example.com
values: "{replicas: 1, imageTag: develop}"
- env: staging
cluster: https://stg-cluster.example.com
values: "{replicas: 2, imageTag: release-candidate}"
- env: production
cluster: https://prod-cluster.example.com
values: "{replicas: 5, imageTag: v1.2.3}"
template:
metadata:
name: "my-app-{{env}}"
spec:
project: default
source:
repoURL: https://github.com/myorg/k8s-manifests
targetRevision: main
path: "apps/my-app/overlays/{{env}}"
destination:
server: "{{cluster}}"
namespace: my-app
syncPolicy:
automated:
prune: true
selfHeal: true
これにより1つのApplicationSetから3つのApplicationが自動作成され、各クラスターにデプロイされます。
Q. Fluxを使ってGitへの直接プッシュなしにイメージタグを自動更新できますか?
A. Flux Image Automation(flux2-image-automation-controller)を使うと、レジストリの最新イメージタグをGitコミットとして自動で追記できます。仕組み: ①ImageRepositoryでレジストリを定期ポーリング②ImagePolicyで最新タグを選択(semver/regex/alpha/numeric)③ImageUpdateAutomationでマニフェスト内の特定コメント(# {"$imagepolicy": "flux-system:my-app"})をマッチしてタグを書き換え、Gitにコミット。例: image: registry.yourcompany.com/myorg/app:v1.2.3 # {"$imagepolicy": "flux-system:my-app"}のタグ部分が自動更新されます。このワークフローにより、CIがイメージをレジストリにプッシュするだけでFluxがGitコミット→Kubernetesデプロイまで自動完結します。
Q. 本番クラスターとステージングクラスターで異なる設定を使うベストプラクティスは?
A. Kustomize overlaysパターンが最も広く使われます。ディレクトリ構造: base/(共通定義)+ overlays/staging/(staging差分)+ overlays/production/(production差分)。base/deployment.yamlには共通設定(イメージ名・ポート・ヘルスチェック)を書き、overlays/production/kustomization.yamlでreplica数・リソース制限・環境変数・イメージタグを上書きします。Helmの場合: values.yaml(共通)とvalues-production.yaml(本番追加値)に分けてArgoCDのHelm設定でvalueFiles: [values.yaml, values-production.yaml]のように重ね合わせます。ArgoCD ApplicationSetのgenerator list(前述)と組み合わせると「1つの設定ファイルが全環境を管理」という最もシンプルな構成になります。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| GitOps入門・チームへの可視性重視 | ArgoCD |
| CLI中心・イメージ自動更新 | Flux |
| 大規模マルチクラスター(50+) | Rancher Fleet |
| AWSマネージド環境(EKS)との統合 | ArgoCD |