Kustomization
Table des matières
1 - Concept
Qu'est-ce qu'une Kustomization Flux ?
Une Kustomization Flux applique des manifests Kubernetes depuis une source (GitRepository).
attention
Ne pas confondre avec kustomization.yaml de Kustomize. La Kustomization Flux est une CRD qui utilise le Kustomize Controller.
Workflow
- Le Source Controller télécharge le repo
- Le Kustomize Controller lit le path spécifié
- Il applique les manifests avec
kubectl apply - Il vérifie la santé des ressources
- Il boucle selon l'
interval
🔝 Retour à la table des matières
2 - Créer une Kustomization
YAML basique
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
targetNamespace: default
Via CLI
flux create kustomization my-app \
--source=GitRepository/my-repo \
--path="./apps/my-app" \
--prune=true \
--interval=5m \
--target-namespace=default
Avec Kustomize overlays
# Structure du repo
apps/my-app/
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ └── service.yaml
└── overlays/
├── dev/
│ └── kustomization.yaml
└── prod/
└── kustomization.yaml
# Flux Kustomization pour prod
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: my-app-prod
namespace: flux-system
spec:
interval: 5m
path: ./apps/my-app/overlays/prod
prune: true
sourceRef:
kind: GitRepository
name: my-repo
🔝 Retour à la table des matières
3 - Options avancées
Prune (suppression automatique)
spec:
prune: true # Supprime les ressources orphelines
Force (recréer si nécessaire)
spec:
force: true # Recréer au lieu de patcher
Substitution de variables
spec:
postBuild:
substitute:
ENVIRONMENT: production
REPLICAS: "5"
substituteFrom:
- kind: ConfigMap
name: cluster-config
- kind: Secret
name: cluster-secrets
# Dans le manifest
apiVersion: apps/v1
kind: Deployment
spec:
replicas: ${REPLICAS}
template:
spec:
containers:
- name: app
env:
- name: ENV
value: ${ENVIRONMENT}
Patches inline
spec:
patches:
- patch: |
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
target:
kind: Deployment
name: my-app
Images
spec:
images:
- name: nginx
newName: my-registry/nginx
newTag: v1.2.3
🔝 Retour à la table des matières
4 - Dépendances
dependsOn
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: app
namespace: flux-system
spec:
dependsOn:
- name: infrastructure # Déployer infra d'abord
- name: secrets
interval: 5m
path: ./apps/my-app
sourceRef:
kind: GitRepository
name: my-repo
Ordre de déploiement
# infrastructure.yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: infrastructure
spec:
path: ./infrastructure
...
---
# database.yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: database
spec:
dependsOn:
- name: infrastructure
path: ./apps/database
...
---
# backend.yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: backend
spec:
dependsOn:
- name: database
path: ./apps/backend
...
🔝 Retour à la table des matières
5 - Health Checks
healthChecks
spec:
healthChecks:
- apiVersion: apps/v1
kind: Deployment
name: my-app
namespace: default
timeout: 3m
wait
spec:
wait: true # Attendre que toutes les ressources soient prêtes
timeout: 5m
Retry
spec:
retryInterval: 1m # Réessayer si échec
🔝 Retour à la table des matières
6 - Exercices pratiques
Exercice 1 : Déployer podinfo
# 1. Créer la source
flux create source git podinfo \
--url=https://github.com/stefanprodan/podinfo \
--branch=master
# 2. Créer la Kustomization
flux create kustomization podinfo \
--source=GitRepository/podinfo \
--path="./kustomize" \
--prune=true \
--interval=5m \
--target-namespace=default
# 3. Vérifier
flux get kustomizations
kubectl get pods
Exercice 2 : YAML déclaratif
# podinfo.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 1m
url: https://github.com/stefanprodan/podinfo
ref:
branch: master
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 5m
path: ./kustomize
prune: true
sourceRef:
kind: GitRepository
name: podinfo
targetNamespace: default
Quiz
Q1. Que fait prune: true ?
Réponse
prune: true supprime automatiquement les ressources Kubernetes qui ne sont plus présentes dans Git. Si vous supprimez un fichier du repo, la ressource correspondante sera supprimée du cluster.
Q2. Comment garantir qu'une app est déployée après la database ?
Réponse
Utiliser dependsOn :
spec:
dependsOn:
- name: database
La Kustomization attend que database soit Healthy avant de déployer.
🔝 Retour à la table des matières
Points clés à retenir
- Kustomization Flux ≠ kustomization.yaml Kustomize
sourceRefpointe vers un GitRepositorypathindique le chemin dans le repoprune: truepour nettoyer les orphelinsdependsOnpour l'ordre de déploiement- Variables avec
postBuild.substitute