Middle+
Quels facteurs permettent une terminaison correcte du nœud en fonction de la priorité du pod?
sobes.tech IA
Réponse de l'IA
La fermeture correcte d'un nœud est assurée par les facteurs suivants :
- Timeouts :
terminationGracePeriodSeconds: Définit le temps pendant lequel le nœud tentera de fermer correctement les pods avant de les détruire de force. Par défaut, 30 secondes.pod.spec.terminationGracePeriodSeconds: Peut redéfinir le timeout pour un pod spécifique.
# Exemple de manifeste de pod avec un timeout de fermeture augmenté apiVersion: v1 kind: Pod metadata: name: my-pod-with-grace-period spec: containers: - name: my-container image: my-image terminationGracePeriodSeconds: 60 # Timeout augmenté - Signaux :
- Kubernetes envoie le signal
SIGTERMaux conteneurs du pod. - L'application dans le conteneur doit pouvoir capturer
SIGTERMet le gérer correctement (par exemple, fermer les connexions en cours, sauvegarder l'état). - Si l'application ne se termine pas après
SIGTERMdansterminationGracePeriodSeconds, unSIGKILLest envoyé.
- Kubernetes envoie le signal
- Priorité du pod (
priorityClassName) :- En cas de contention (par exemple, en cas de manque de ressources ou d'éviction du nœud), les pods de priorité inférieure sont terminés en premier.
- Cela garantit que les pods critiques (haute priorité) fonctionnent plus longtemps et ont plus de chances de se fermer correctement si le nœud devient inaccessible.
# Exemple de manifeste de pod avec une classe de priorité apiVersion: v1 kind: Pod metadata: name: my-priority-pod spec: containers: - name: my-container image: my-image priorityClassName: high-priority # Utilisation de la classe de priorité - Hooks PreStop :
- Scripts ou appels supplémentaires exécutés dans le conteneur juste avant l'envoi de
SIGTERM. - Peuvent être utilisés pour effectuer des synchronisations, désabonnements de services ou autres tâches nécessaires à une fermeture correcte.
# Exemple de hook PreStop apiVersion: v1 kind: Pod metadata: name: my-pod-with-prestop spec: containers: - name: my-container image: my-image lifecycle: preStop: exec: command: ["/bin/sh", "-c", "echo 'Stopping container...' && sleep 5 && exit 0"] # Commande d'exemple - Scripts ou appels supplémentaires exécutés dans le conteneur juste avant l'envoi de
- Gestion des points de terminaison (Endpoints) :
- Kubernetes supprime l'IP du pod de l'objet Endpoints du Service au début de la fermeture, pour que le nouveau trafic ne soit pas dirigé vers le pod en cours de fermeture.
- Cela permet aux connexions existantes de se terminer pendant la période de grâce.
Dans l'ensemble, ces mécanismes permettent à Kubernetes de gérer le processus de fermeture des pods sur le nœud, en tenant compte de leur priorité, leur offrant une chance de se fermer correctement et évitant la destruction forcée lorsque cela est possible.