À partir de la version 1.26, GKE sur AWS active automatiquement l'arrêt en douceur des nœuds. Cette fonctionnalité permet de gérer l'arrêt en douceur des pods lors de l'arrêt des nœuds. L'arrêt en douceur permet aux pods d'enregistrer leur état et de libérer des ressources avant l'arrêt du nœud. Cette méthode d'arrêt des pods réduit le risque de perte de données. Cela minimise également le risque d'interruption des autres pods et des services qui dépendent des pods à arrêter ou interagissent avec eux, ce qui améliore la résilience de vos clusters.
Fonctionnement
Un événement tel qu'une maintenance planifiée, un scaling de nœud ou un problème matériel déclenche l'arrêt d'un nœud. Le composant kubelet
détecte l'événement et lance le processus d'arrêt en douceur des nœuds en demandant à systemd
de retarder l'arrêt du système pendant une durée spécifiée. Ce délai donne au nœud le temps de drainer et d'évincer les pods qui s'y exécutent.
L'objectif de l'arrêt en douceur du nœud est d'arrêter en douceur les pods non système et les pods système critiques avant l'arrêt du nœud. Les paramètres par défaut suivants sont utilisés :
ShutdownGracePeriod
: 30 secondesShutdownGracePeriodCriticalPods
: 15 secondes
Ces paramètres donnent aux pods non système 15 secondes pour s'arrêter en douceur avant d'être arrêtés de force. Les pods système critiques ont 15 secondes pour s'arrêter après l'arrêt des pods non-système. Toutefois, comme la fonctionnalité opère au mieux de ses possibilités, il est possible qu'un nœud ne puisse pas s'arrêter en douceur dans la période de 30 secondes désignée.
Déclencheurs et limites
Les événements qui déclenchent l'arrêt en douceur des nœuds incluent les événements planifiés tels que les suivants :
- Arrêts commandés par l'utilisateur
- Arrêt d'instances
- Maintenance planifiée
- Réduction de la capacité d'un cluster
Dans ces scénarios, kubelet
détecte l'événement d'arrêt du nœud et lance le processus d'arrêt en douceur du nœud.
En revanche, l'arrêt en douceur du nœud ne peut pas être activé lorsque la commande d'arrêt ne déclenche pas le mécanisme de verrouillage de l'inhibiteur systemd
sur lequel le composant kubelet
repose. Voici quelques exemples de ce type de situation :
- Déconnexions réseau
- Dysfonctionnements matériels
- Ressources insuffisantes (mémoire ou processeur, par exemple)
- Coupures de courant inattendues
Dans ces cas, le nœud peut s'arrêter brusquement, ce qui peut entraîner des perturbations ou une perte de données.