GitOps tools
Table of Contents
1 - Overview of tools
CNCF tools
Quick comparison
| Tool | Type | CNCF | UI | Popularity |
|---|---|---|---|---|
| Argo CD | Application | Graduated | ✅ Native | ⭐⭐⭐⭐⭐ |
| Flux | Toolkit | Graduated | ❌ (Weave UI) | ⭐⭐⭐⭐ |
| Jenkins X | CI/CD + GitOps | Incubating | ✅ | ⭐⭐⭐ |
| Fleet | Multi-cluster | - | ✅ | ⭐⭐⭐ |
🔝 Back to table of contents
2 - Argo CD
Overview
- Developed by Intuit then donated to the CNCF
- Native and powerful web UI
- Supports Helm, Kustomize, Jsonnet, YAML
- CNCF Graduated (maximum maturity)
Installation
# Créer le namespace
kubectl create namespace argocd
# Installer ArgoCD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# Récupérer le mot de passe admin
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
# Accéder à l'UI
kubectl port-forward svc/argocd-server -n argocd 8080:443
# https://localhost:8080
Create an Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/org/gitops-repo.git
targetRevision: HEAD
path: apps/my-app
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
Argo CD CLI
# Login
argocd login localhost:8080
# Lister les applications
argocd app list
# Sync manuel
argocd app sync my-app
# Voir l'état
argocd app get my-app
# Historique
argocd app history my-app
# Rollback
argocd app rollback my-app 1
Web interface
| Feature | Description |
|---|---|
| Application View | View of K8s resources |
| Sync Status | Synchronization state |
| Health Status | Pod health |
| Diff View | Git vs Cluster differences |
| Resource Tree | Dependency tree |
🔝 Back to table of contents
3 - Flux
Overview
- Developed by Weaveworks
- Modular toolkit (separate components)
- No native UI (Weave GitOps UI available)
- CNCF Graduated
Flux components
| Component | Role |
|---|---|
| Source Controller | Fetches sources (Git, Helm, S3) |
| Kustomize Controller | Applies Kustomize manifests |
| Helm Controller | Manages Helm releases |
| Notification Controller | Alerts to Slack, Teams |
| Image Automation | Automatic image updates |
Installation
# Installer Flux CLI
curl -s https://fluxcd.io/install.sh | sudo bash
# Bootstrap avec GitHub
flux bootstrap github \
--owner=my-org \
--repository=gitops-repo \
--path=clusters/my-cluster \
--personal
GitRepository and Kustomization
# Définir la source Git
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-repo
namespace: flux-system
spec:
interval: 1m
url: https://github.com/org/gitops-repo
ref:
branch: main
---
# Appliquer les manifests
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: my-app
namespace: flux-system
spec:
interval: 5m
path: ./apps/my-app
prune: true
sourceRef:
kind: GitRepository
name: my-repo
Flux CLI
# État du système
flux check
# Lister les sources
flux get sources git
# Lister les kustomizations
flux get kustomizations
# Réconcilier manuellement
flux reconcile kustomization my-app
# Suspendre/Reprendre
flux suspend kustomization my-app
flux resume kustomization my-app
🔝 Back to table of contents
4 - Argo CD vs Flux comparison
Comparison table
| Criterion | Argo CD | Flux |
|---|---|---|
| Native UI | ✅ Excellent | ❌ (Weave GitOps) |
| Architecture | Monolithic | Modular toolkit |
| Learning curve | Easy | Medium |
| Multi-tenancy | Projects, RBAC | Namespaces |
| Image Automation | Via extension | ✅ Native |
| Notifications | Webhook | ✅ Dedicated controller |
| CNCF Status | Graduated | Graduated |
| GitHub Stars | ~15k | ~5k |
When to choose Argo CD?
- ✅ Need for a powerful UI
- ✅ Team new to GitOps
- ✅ Preference for an all-in-one solution
- ✅ Centralized multi-cluster
When to choose Flux?
- ✅ Preference for CLI/native GitOps
- ✅ Need for native image automation
- ✅ Modular architecture desired
- ✅ Tight integration with GitHub/GitLab
They can coexist
# ArgoCD pour les applications
# Flux pour l'infrastructure
# Ou différents clusters
# Cluster A: ArgoCD
# Cluster B: Flux
🔝 Back to table of contents
5 - Other tools
Fleet (Rancher)
# Idéal pour multi-cluster à grande échelle
# Gère des centaines de clusters edge
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: my-app
spec:
repo: https://github.com/org/gitops-repo
paths:
- apps/my-app
targets:
- clusterSelector:
matchLabels:
env: production
Jenkins X
# CI/CD + GitOps intégré
# Génère automatiquement les pipelines
jx create quickstart
Spinnaker
- Mature multi-cloud CD tool
- Visual pipelines
- Less "GitOps native"
Summary
| Tool | Use case |
|---|---|
| Argo CD | General GitOps, UI matters |
| Flux | CLI-first GitOps, image automation |
| Fleet | Large-scale multi-cluster |
| Jenkins X | CI/CD + GitOps all-in-one |
🔝 Back to table of contents
6 - Hands-on exercises
Quiz
Q1. Which GitOps tool has a native UI?
Answer
Argo CD has a very complete native web interface. Flux requires Weave GitOps UI separately.
Q2. Which tool has native image automation?
Answer
Flux with its Image Automation Controller can detect new images and automatically update the Git manifests.
Exercise: Tool selection
Your team is evaluating Argo CD and Flux. Criteria:
- UI matters for developers
- 5 clusters to manage
- Team of 20 people
Recommendation
Argo CD would be recommended because:
- Native UI matters for developers
- Centralized multi-cluster management
- Easier learning curve for a team of 20 people
- Adoption will be faster
🔝 Back to table of contents
Key takeaways
- Argo CD: Excellent UI, all-in-one, easy to adopt
- Flux: Modular toolkit, CLI-first, native image automation
- Both are CNCF Graduated (maturity)
- Choose based on needs: UI vs CLI, monolithic vs modular
- They can coexist in different contexts