オープンソースGitOps比較:ArgoCD vs FluxCD で Kubernetes をGitで管理する
オープンソースラボ編集部 ・ 2026年6月13日
オープンソースGitOps比較:ArgoCD vs FluxCD で Kubernetes をGitで管理する
「Gitが真実の源(Source of Truth)」としてKubernetesクラスターの状態を管理するGitOpsは、現代のクラウドネイティブ開発の標準プラクティスです。ArgoCD・FluxCDはオープンソースのGitOpsコントローラーとして最も広く採用されています。
GitOpsとは何か
従来のCDアプローチとGitOpsの違い:
従来のCD:
CI/CD → kubectlコマンド → クラスター更新(Push型)
GitOps:
Git(マニフェスト)→ GitOpsコントローラー → クラスター自動同期(Pull型)
GitOpsの利点:
- 監査証跡: 誰がいつ何を変更したかがGithistoryに残る
- 自動ドリフト検知: 実際の状態とGitの差分を検知して自動修復
- ロールバック:
git revertでインフラを過去の状態に戻せる - セキュリティ: クラスターへの直接アクセス権が不要(Pull型)
主要ツールの概要
ArgoCD
Kubernetes向けのGitOps CDツールです。美しいUIダッシュボード・アプリケーション依存関係のグラフ表示・リアルタイムの同期状態確認が特徴です。
# ArgoCDのインストール
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# CLIのインストール(macOS)
brew install argocd
# 初期パスワードの取得
argocd admin initial-password -n argocd
# ポートフォワードでUIにアクセス
kubectl port-forward svc/argocd-server -n argocd 8080:443
# ArgoCD Application リソース
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/my-org/my-app-configs
targetRevision: HEAD
path: kubernetes/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true # Gitから削除されたリソースを自動削除
selfHeal: true # クラスターのドリフトを自動修正
syncOptions:
- CreateNamespace=true
# ArgoCDでアプリを手動同期
argocd app sync my-app
# 同期状態の確認
argocd app get my-app
# Helmチャートのデプロイ
argocd app create my-helm-app --repo https://github.com/my-org/helm-configs --helm-chart my-chart --helm-set image.tag=v1.2.3 --dest-namespace my-namespace --dest-server https://kubernetes.default.svc
FluxCD
CNCF(Cloud Native Computing Foundation)のプロジェクトとして開発されるGitOpsツールキットです。ArgoCDよりも軽量でGit-nativeな設計で、Helm・Kustomize・Bucket(S3)をサポートします。
# FluxCDのインストール(GitHubリポジトリをbootstrap)
brew install fluxcd/tap/flux
# GitHubリポジトリにFluxをbootstrap
flux bootstrap github --owner=my-org --repository=fleet-infra --branch=main --path=./clusters/my-cluster --personal
# 同期状態の確認
flux get all
flux get kustomizations
# GitRepository ソース定義
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-app
namespace: flux-system
spec:
interval: 1m
url: https://github.com/my-org/my-app-configs
ref:
branch: main
secretRef:
name: github-token
---
# Kustomization(適用する設定)
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: my-app
namespace: flux-system
spec:
interval: 10m
retryInterval: 2m
timeout: 5m
sourceRef:
kind: GitRepository
name: my-app
path: ./kubernetes/production
prune: true
wait: true
healthChecks:
- apiVersion: apps/v1
kind: Deployment
name: my-app
namespace: production
機能比較表
| 比較項目 | ArgoCD | FluxCD |
|---|---|---|
| WebUI・ダッシュボード | ✅ 高機能 | ❌(外部Grafana) |
| Git同期 | ✅ | ✅ |
| Helm対応 | ✅ | ✅ |
| Kustomize対応 | ✅ | ✅ |
| マルチクラスター | ✅ | ✅ |
| OCI Artifact対応 | ✅ | ✅ |
| イメージ自動更新 | ✅ | ✅ Image Automation |
| RBAC・SSO | ✅ | ✅ |
| 通知・Webhook | ✅ | ✅ |
| 設定量 | 少ない | 多い |
| CNCFステータス | Incubating | Graduated |
| エンタープライズサポート | Akuity | Weaveworks |
| ライセンス | Apache 2.0 | Apache 2.0 |
| GitHub Stars | 18k+ | 14k+ |
ArgoCDでのカナリアデプロイ(Argo Rollouts)
# Argo Rolloutsでカナリアリリース
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app
spec:
replicas: 5
strategy:
canary:
steps:
- setWeight: 20 # 最初に20%のトラフィックを新バージョンへ
- pause: {duration: 10m}
- setWeight: 50
- pause: {duration: 10m}
- setWeight: 100
canaryMetadata:
labels:
deployment: canary
template:
spec:
containers:
- name: my-app
image: my-app:{{.Values.image.tag}}
GitOps・DevOpsツールはDevOpsカテゴリ(/categories/devops)で一覧でき、セキュリティ関連のIaC管理ツールはセキュリティカテゴリ(/categories/security)でも探せます。
FAQ
Q. ArgoCDとFluxCDはどちらを選ぶべきですか?
A. UIを重視する・チームにKubernetes初心者がいる・デプロイを視覚的に確認したい場合はArgoCDが適しています。シンプルで軽量な設計を好む・Prometheusで監視・CLI中心のワークフローに慣れている場合はFluxCDが向いています。両者は機能的に拮抗しており、どちらを選んでも大きな問題はありません。
Q. GitOpsでHelmチャートを管理する場合の推奨パターンは?
A. 推奨パターンは「App of Apps」です。一つのArgoCDアプリケーションが他の複数のアプリケーションを管理するパターンで、全アプリケーションの依存関係・デプロイ順序をGitで宣言的に管理できます。FluxCDではKustomizationの依存関係(dependsOn)で同様のパターンを実現します。
Q. ArgoCD / FluxCDでシークレット(Secret)はどう管理しますか?
A. KubernetesシークレットをGitに直接コミットするのは危険です。一般的な解決策: Sealed Secrets(公開鍵で暗号化してGitに保存)・External Secrets Operator(AWS Secrets Manager・HashiCorp Vaultからシークレットを注入)・SOPS(Age/PGPで暗号化)。ArgoCDもFluxCDもこれらと統合できます。
Q. マルチクラスター・マルチテナントの設定はどうすればいいですか?
A. ArgoCDはApplicationSetリソースで複数クラスター・複数環境へのデプロイを宣言的に管理できます。FluxCDは clusters/ ディレクトリを環境(dev/staging/prod)ごとに分けるパターンが一般的です。Kustomizeのoverlay機能で環境差分(image tag・レプリカ数・リソース制限)を管理します。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| UIで視覚的にデプロイ管理 | ArgoCD |
| 軽量・CLI中心のGitOps | FluxCD |
| カナリアデプロイ | Argo Rollouts |
| マルチクラスター管理 | ArgoCD / FluxCD どちらでも |