Fleet est une solution GitOps multi-cluster développée par Rancher (SUSE). Elle permet de déployer et synchroniser des applications sur des flottes de clusters Kubernetes depuis un dépôt Git unique. Fleet fonctionne en deux modes : intégré dans Rancher Manager (pour les clusters managés par Rancher) ou standalone (sans Rancher, via Helm). La ressource centrale est GitRepo : elle pointe vers un dépôt Git, Fleet se charge de déployer les manifests (bruts, Helm, Kustomize ou bundle Fleet) sur les clusters cibles, filtrés par labels.
Informations essentielles
Origine : Rancher / SUSE · Licence : Apache 2.0 · Architectures : x86_64, ARM64
Liens : Documentation · GitHub · Releases
Support : Maintenu activement par SUSE/Rancher. Intégré par défaut dans Rancher Manager.
Stack par défaut
| Composant | Valeur |
|---|---|
| CRD principale | GitRepo (dépôt Git + cibles) |
| Autres CRDs | Bundle, BundleDeployment, Cluster, ClusterGroup |
| Templates | Manifests bruts, Helm, Kustomize, Fleet bundles |
| Modes | Single-cluster, multi-cluster |
| Namespaces | cattle-fleet-system (controller), fleet-local (single), fleet-default (multi) |
Prérequis
| Ressource | Valeur |
|---|---|
| Kubernetes | 1.23+ |
| Helm | 3.x (pour l'installation standalone) |
| Accès Git | HTTPS ou SSH vers le dépôt |
Installation standalone (sans Rancher)
helm repo add fleet https://rancher.github.io/fleet-helm-charts/
helm repo update
# Installer les CRDs Fleet
helm install fleet-crd fleet/fleet-crd \
--namespace cattle-fleet-system \
--create-namespace
# Installer le contrôleur Fleet
helm install fleet fleet/fleet \
--namespace cattle-fleet-system
# Vérifier
kubectl get pods -n cattle-fleet-system
# fleet-controller Running
# gitjob Running
Déployer depuis Git - GitRepo simple
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: my-app
namespace: fleet-local # fleet-local = cluster local uniquement
spec:
repo: https://github.com/org/my-app-config.git
branch: main
paths:
- /manifests/production # Dossier dans le repo à déployer
targets:
- name: local
clusterSelector: {} # Tous les clusters matchant (vide = tous)
kubectl apply -f gitrepo.yaml
# Vérifier la synchronisation
kubectl get gitrepo -n fleet-local
kubectl get bundle -n fleet-local
Multi-cluster avec labels
Enregistrer des clusters cibles
Fleet déploie sur les clusters selon leurs labels. Dans Rancher Manager, les clusters sont déjà enregistrés. En standalone, chaque cluster downstream installe un agent Fleet.
# Sur le cluster management (pour enregistrer un cluster distant en standalone)
kubectl apply -f - <<EOF
apiVersion: fleet.cattle.io/v1alpha1
kind: Cluster
metadata:
name: production
namespace: fleet-default
labels:
env: production
region: eu-west
spec:
caBundle: "" # CA du cluster distant
EOF
GitRepo ciblant des clusters par labels
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: my-app
namespace: fleet-default
spec:
repo: https://github.com/org/my-app-config.git
branch: main
paths:
- /base
targets:
- name: production
clusterSelector:
matchLabels:
env: production
- name: staging
clusterSelector:
matchLabels:
env: staging
Structure d'un dépôt Fleet
Fleet supporte plusieurs formats dans le même dépôt :
my-app-config/
├── manifests/ # Manifests Kubernetes bruts
│ ├── deployment.yaml
│ └── service.yaml
├── helm-app/ # Chart Helm
│ ├── fleet.yaml # Config Fleet (valeurs, namespace cible)
│ └── Chart.yaml
└── kustomize-app/ # Kustomize
├── kustomization.yaml
└── deployment.yaml
fleet.yaml pour configurer un chart Helm :
# fleet.yaml (dans le dossier du chart Helm)
defaultNamespace: my-app
helm:
releaseName: my-app
chart: ./ # Chart local ou repo distant
values:
replicaCount: 2
image:
tag: latest
ClusterGroup - regrouper des clusters
apiVersion: fleet.cattle.io/v1alpha1
kind: ClusterGroup
metadata:
name: eu-clusters
namespace: fleet-default
spec:
selector:
matchLabels:
region: eu-west
Mise à jour
helm repo update
helm upgrade fleet-crd fleet/fleet-crd --namespace cattle-fleet-system
helm upgrade fleet fleet/fleet --namespace cattle-fleet-system --reuse-values
Troubleshooting
# État des GitRepo
kubectl get gitrepo -A
# État des Bundle (déploiements créés par Fleet)
kubectl get bundle -A
# Détails d'une synchronisation échouée
kubectl describe gitrepo my-app -n fleet-local
# Logs du contrôleur Fleet
kubectl logs -n cattle-fleet-system -l app=fleet-controller --tail=50
# Logs de gitjob (clonage Git)
kubectl logs -n cattle-fleet-system -l app=gitjob --tail=50
# Forcer une resynchronisation
kubectl annotate gitrepo my-app -n fleet-local \
fleet.cattle.io/force-resync=$(date +%s)
Commandes utiles
kubectl get gitrepo -A # Tous les GitRepo
kubectl get bundle -A # Tous les bundles
kubectl get bundledeployment -A # État des déploiements par cluster
kubectl describe gitrepo <nom> -n <ns> # Détails et erreurs
kubectl get cluster -n fleet-default # Clusters enregistrés
kubectl get clustergroup -n fleet-default # Groupes de clusters
Ressources
- Documentation officielle : https://fleet.rancher.io/
- GitHub : https://github.com/rancher/fleet
- Releases : https://github.com/rancher/fleet/releases
- Exemples : https://github.com/rancher/fleet-examples