GitOps & CI/CD

Fleet

GitOps multi-cluster Rancher/SUSE - gestion de flottes de clusters K8s depuis Git, Helm/Kustomize/manifests, GitRepo CRD, standalone ou intégré Rancher. Apache 2.0.

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

ComposantValeur
CRD principaleGitRepo (dépôt Git + cibles)
Autres CRDsBundle, BundleDeployment, Cluster, ClusterGroup
TemplatesManifests bruts, Helm, Kustomize, Fleet bundles
ModesSingle-cluster, multi-cluster
Namespacescattle-fleet-system (controller), fleet-local (single), fleet-default (multi)

Prérequis

RessourceValeur
Kubernetes1.23+
Helm3.x (pour l'installation standalone)
Accès GitHTTPS 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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic