Healthchecks et scaling
Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.
Un healthcheck dit à la plateforme quand un conteneur est prêt à recevoir du trafic et quand
il faut le redémarrer. replicas, strategy et autoscale règlent combien d'exemplaires tournent et
comment ils sont remplacés lors d'une mise à jour.
Prérequis
- Un service de kind
deployment(ces champs ne s'appliquent qu'à lui). - Pas de
volumessur le service pourreplicas > 1ouautoscale(Stockage).
Étapes
1. Ajouter une sonde et des réplicas
apiVersion: deploy.stackngo.io/v1alpha1
kind: App
metadata:
name: api
spec:
services:
api:
image: registry.gitlab.com/acme/api:1.2.0
ports: ["8080"]
healthcheck:
http: /healthz # GET /healthz sur le premier port
interval: 15s
timeout: 5s
retries: 3
startPeriod: 30s # laisse 30 s à l'application pour démarrer
replicas: 2
strategy: { type: rolling, maxSurge: 1, maxUnavailable: 0 }
autoscale: { max: 6, cpu: 70 }
ingress: { port: 8080 }
sng apply api.yml
2. Suivre une mise à jour
sng app patch api --image registry.gitlab.com/acme/api:1.3.0
sng app describe api
App : api
Statut : en cours
Message : api : 1/2 à jour, 2 disponibles
SERVICE KIND IMAGE PHASE URL DETAIL
api deployment registry.gitlab.com/acme/api:1.3.0 Progressing https://api-api.<tenant>.dev.stackngo.app/ RollingOut 1/2 à jour, 2 disponibles
Avec maxUnavailable: 0, il y a toujours 2 exemplaires disponibles pendant le remplacement.
Vérification
sng app describe api revient à Statut : prête, Reconciled 2/2 prêts. Pendant une montée
en charge, le nombre d'exemplaires affiché dépasse replicas jusqu'à autoscale.max.
healthcheck
Exactement un des trois tests, plus des réglages communs :
| Champ | Défaut | Rôle |
|---|---|---|
http: /chemin | — | requête GET ; sain si la réponse est 2xx ou 3xx |
port | premier port TCP de ports | port du test http |
tcp: 5432 | — | sain si la connexion TCP s'ouvre |
cmd: ["pg_isready"] | — | commande exécutée dans le conteneur ; sain si elle sort avec le code 0 |
interval | 10s | délai entre deux tests (arrondi à la seconde, 1 s à 1 h) |
timeout | 5s | durée maximale d'un test |
retries | 3 | échecs consécutifs avant de déclarer le conteneur malade (1 à 30) |
startPeriod | aucun | délai avant le premier test de vivacité, pour les démarrages lents |
La même sonde sert deux fois :
- disponibilité : un exemplaire qui échoue ne reçoit plus de trafic, sans être redémarré ;
- vivacité : après
retrieséchecs, le conteneur est redémarré.startPeriodne s'applique qu'à ce test.
Sans healthcheck, un exemplaire est considéré prêt dès que son conteneur a démarré.
http pour une API ou un site, tcp pour une base ou un cache sans endpoint HTTP, cmd quand
l'image fournit un outil (pg_isready, redis-cli ping). Les healthcheck compose
CMD / CMD-SHELL se traduisent en cmd.
replicas et strategy
| Champ | Défaut | Rôle |
|---|---|---|
replicas | 1 | nombre d'exemplaires (0 à 100) ; 0 arrête le service sans le supprimer |
strategy.type | rolling | rolling : remplacement progressif ; recreate : arrêt complet puis redémarrage |
strategy.maxSurge | 1 | exemplaires en plus pendant la mise à jour (nombre ou 25%) ; rolling seulement |
strategy.maxUnavailable | 0 | exemplaires indisponibles tolérés pendant la mise à jour ; rolling seulement |
maxSurge: 0 et maxUnavailable: 0 ensemble sont refusés (la mise à jour ne pourrait pas
avancer). Un service avec volumes est toujours en recreate.
sng app scale api 3 change replicas sans toucher au reste ; il est refusé si le service a
un autoscale (modifiez autoscale.max) ou un volume avec un nombre supérieur à 1.
autoscale
replicas: 2
autoscale: { max: 6, cpu: 70 }
| Champ | Défaut | Rôle |
|---|---|---|
max | — | nombre maximal d'exemplaires (1 à 100), ≥ replicas |
cpu | 80 | utilisation cible, en % de la réservation CPU de la size |
Le minimum est replicas (1 si absent ou 0). Le nombre d'exemplaires monte quand l'utilisation CPU
moyenne dépasse la cible, redescend ensuite. La cible se mesure par rapport à la réservation
de la taille : un service xs (500m réservés) à 70 % déclenche vers 350m de CPU utilisé.
Avec autoscale, le nombre d'exemplaires n'est plus piloté par le manifeste ; replicas ne sert plus
qu'à fixer le plancher.
Pour aller plus loin
- Un déploiement qui n'aboutit pas (exemplaires qui ne deviennent jamais prêts) finit en
Failed, raisonRolloutFailed. Les causes habituelles : image qui démarre en root, sonde sur un mauvais port ou chemin, Secret manquant.sng app logs apidonne la réponse. - Il n'existe pas de commande de retour arrière pour un service : réappliquez l'ancienne image.
- Une mise à jour progressive crée temporairement
replicas + maxSurgeexemplaires : avec une offre serrée, c'est ce pic qui peut déclencherQuotaExceeded(Tailles et ressources).