AI

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

機能比較表

比較項目ArgoCDFluxRancher Fleet
ライセンスApache-2.0Apache-2.0Apache-2.0
CNCF卒業卒業
Web UI✅ リッチ❌ なし✅ Rancher UI
マルチクラスター✅ 大規模向け
Helm対応
Kustomize対応
イメージ自動更新ArgoCD Image Updater✅ 内蔵
ドリフト検出
GitHub Stars17k+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

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。