1. Le principe #
Le canary sans intervention humaine.
Fonctionnement #
Flagger est un opérateur Kubernetes de progressive delivery. À partir d'un Deployment, il crée une version primary (stable) et une version canary, puis pilote un TraefikService pondéré. À chaque nouvelle image, il augmente progressivement la part de trafic du canary tant que les métriques restent bonnes, puis le promeut ; sinon il revient en arrière.
2. Installation et ressource Canary #
Flagger avec le provider Traefik.
Installation #
helm repo add flagger https://flagger.app
helm upgrade --install flagger flagger/flagger -n traefik \
--set meshProvider=traefik \
--set metricsServer=http://prometheus.monitoring:9090Canary #
apiVersion: flagger.app/v1beta1
kind: Canary
metadata: { name: app, namespace: app }
spec:
provider: traefik
targetRef: { apiVersion: apps/v1, kind: Deployment, name: app }
service: { port: 80, targetPort: 8080 }
analysis:
interval: 1m
threshold: 5 # 5 analyses en échec = retour arrière
maxWeight: 50
stepWeight: 10
metrics:
- name: request-success-rate
thresholdRange: { min: 99 }
interval: 1m
- name: request-duration
thresholdRange: { max: 500 } # millisecondes
interval: 1m
webhooks:
- name: tests-de-fumee
type: pre-rollout
url: http://flagger-loadtester.app/
metadata: { cmd: "curl -sf http://app-canary.app/healthz" }3. Suivre et déclencher #
Au quotidien.
Commandes #
kubectl -n app set image deploy/app app=registre/app:2.1.0 # déclenche une analyse
kubectl -n app get canary app -w # Progressing, Succeeded, Failed
kubectl -n app describe canary app # événements : poids, métriques, décisions
kubectl -n app get traefikservice- Générez du trafic pendant l'analyse (loadtester) : sans requêtes, les métriques sont vides et l'analyse échoue.
- Choisissez des seuils alignés sur vos SLO.
- Envoyez les événements de Flagger dans le canal de l'équipe (alerting Slack ou Teams).
Bonne Pratique : Commencez sur un service peu critique et observez plusieurs déploiements avant de généraliser.
