5.2. Crochets de cycle de vie pour la phase de suppression de la machine
Les crochets du cycle de vie d'une machine sont des points du cycle de vie de réconciliation d'une machine où le processus normal du cycle de vie peut être interrompu. Dans la phase de la machine Deleting
, ces interruptions permettent aux composants de modifier le processus de suppression de la machine.
5.2.1. Terminologie et définitions
Pour comprendre le comportement des crochets de cycle de vie pour la phase de suppression de la machine, vous devez comprendre les concepts suivants :
- Rapprochement
- La réconciliation est le processus par lequel un contrôleur tente de faire correspondre l'état réel du cluster et des objets qu'il comprend aux exigences d'une spécification d'objet.
- Contrôleur de machine
Le contrôleur de machine gère le cycle de vie de réconciliation d'une machine. Pour les machines sur des plateformes cloud, le contrôleur de machine est la combinaison d'un contrôleur OpenShift Container Platform et d'un actionneur spécifique à la plateforme du fournisseur cloud.
Dans le cadre de la suppression d'une machine, le contrôleur de machine effectue les actions suivantes :
- Drainer le nœud qui est soutenu par la machine.
- Supprimer l'instance de machine du fournisseur de services en nuage.
-
Supprimer l'objet
Node
.
- Crochet de cycle de vie
Un point défini dans le cycle de vie de réconciliation d'un objet où le processus normal du cycle de vie peut être interrompu. Les composants peuvent utiliser un crochet de cycle de vie pour injecter des changements dans le processus afin d'obtenir un résultat souhaité.
Il y a deux crochets de cycle de vie dans la phase de la machine
Deleting
:
-
preDrain
doivent être résolus avant que le nœud soutenu par la machine puisse être vidé. -
preTerminate
doivent être résolus avant que l'instance puisse être retirée du fournisseur d'infrastructure.
- Contrôleur de mise en œuvre des crochets
Un contrôleur, autre que le contrôleur de la machine, qui peut interagir avec un crochet de cycle de vie. Un contrôleur qui met en œuvre un crochet peut effectuer une ou plusieurs des actions suivantes :
- Ajouter un crochet de cycle de vie.
- Répondre à un crochet du cycle de vie.
- Supprimer un crochet de cycle de vie.
Chaque crochet du cycle de vie a un seul contrôleur qui met en œuvre le crochet, mais un contrôleur qui met en œuvre le crochet peut gérer un ou plusieurs crochets.
5.2.2. Ordre de traitement de l'effacement des machines
Dans OpenShift Container Platform 4.12, il y a deux crochets de cycle de vie pour la phase de suppression de la machine : preDrain
et preTerminate
. Lorsque tous les crochets pour un point de cycle de vie donné sont supprimés, la réconciliation se poursuit normalement.
Figure 5.1. Flux de suppression des machines
La phase de la machine Deleting
se déroule dans l'ordre suivant :
Une machine existante est destinée à être supprimée pour l'une des raisons suivantes :
-
Un utilisateur disposant des autorisations
cluster-admin
utilise la commandeoc delete machine
. -
La machine reçoit une annotation
machine.openshift.io/delete-machine
. - L'ensemble de machines qui gère la machine la marque pour suppression afin de réduire le nombre de répliques dans le cadre de la réconciliation.
- L'autoscaler de cluster identifie un nœud qui n'est pas nécessaire pour répondre aux besoins de déploiement du cluster.
- Un contrôle de l'état d'une machine est configuré pour remplacer une machine qui n'est pas en bon état.
-
Un utilisateur disposant des autorisations
-
La machine entre dans la phase
Deleting
, au cours de laquelle elle est marquée pour suppression mais reste présente dans l'API. S'il existe un crochet de cycle de vie
preDrain
, le contrôleur qui le gère effectue l'action spécifiée.Jusqu'à ce que tous les crochets du cycle de vie
preDrain
soient satisfaits, la condition d'état de la machineDrainable
est fixée àFalse
.-
Il n'y a pas de crochets de cycle de vie
preDrain
non résolus et la condition d'état de la machineDrainable
est réglée surTrue
. Le contrôleur de machine tente de drainer le nœud qui est soutenu par la machine.
-
Si la vidange échoue,
Drained
est défini surFalse
et le contrôleur de machine tente de vidanger à nouveau le nœud. -
Si la vidange réussit,
Drained
devientTrue
.
-
Si la vidange échoue,
-
La condition d'état de la machine
Drained
est réglée surTrue
. S'il existe un crochet de cycle de vie
preTerminate
, le contrôleur qui le gère effectue l'action spécifiée.Jusqu'à ce que tous les crochets du cycle de vie
preTerminate
soient satisfaits, la condition d'état de la machineTerminable
est fixée àFalse
.-
Il n'y a pas de crochets de cycle de vie
preTerminate
non résolus et la condition d'état de la machineTerminable
est réglée surTrue
. - Le contrôleur de machine supprime l'instance du fournisseur d'infrastructure.
-
Le contrôleur de machine supprime l'objet
Node
.
5.2.3. Configuration du crochet du cycle de vie de la suppression
Les extraits YAML suivants illustrent le format et l'emplacement des configurations de crochets de cycle de vie de suppression dans un jeu de machines :
Extrait YAML d'un crochet de cycle de vie preDrain
apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: ... spec: lifecycleHooks: preDrain: - name: <hook-name> 1 owner: <hook-owner> 2 ...
Extrait YAML d'un crochet de cycle de vie preTerminate
apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: ... spec: lifecycleHooks: preTerminate: - name: <hook-name> 1 owner: <hook-owner> 2 ...
Exemple de configuration d'un crochet de cycle de vie
L'exemple suivant montre la mise en œuvre de plusieurs crochets de cycle de vie fictifs qui interrompent le processus de suppression de la machine :
Exemple de configuration pour les crochets de cycle de vie
apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: ... spec: lifecycleHooks: preDrain: 1 - name: MigrateImportantApp owner: my-app-migration-controller preTerminate: 2 - name: BackupFileSystem owner: my-backup-controller - name: CloudProviderSpecialCase owner: my-custom-storage-detach-controller 3 - name: WaitForStorageDetach owner: my-custom-storage-detach-controller ...
- 1
- Une strophe de crochet de cycle de vie
preDrain
qui contient un seul crochet de cycle de vie. - 2
- Une strophe de crochet de cycle de vie
preTerminate
qui contient trois crochets de cycle de vie. - 3
- Un contrôleur de mise en œuvre de crochets qui gère deux crochets de cycle de vie
preTerminate
:CloudProviderSpecialCase
etWaitForStorageDetach
.
5.2.4. Exemples de crochets de cycle de vie de suppression de machine pour les développeurs d'opérateurs
Les opérateurs peuvent utiliser les crochets de cycle de vie pour la phase de suppression des machines afin de modifier le processus de suppression des machines. Les exemples suivants montrent comment un opérateur peut utiliser cette fonctionnalité :
Exemples de cas d'utilisation de preDrain
lifecycle hooks
- Remplacer les machines de manière proactive
-
Un opérateur peut utiliser un crochet de cycle de vie
preDrain
pour s'assurer qu'une machine de remplacement est créée et jointe avec succès au cluster avant de supprimer l'instance d'une machine supprimée. Cela peut atténuer l'impact des perturbations pendant le remplacement de la machine ou des instances de remplacement qui ne s'initialisent pas rapidement. - Mise en œuvre d'une logique de vidange personnalisée
Un opérateur peut utiliser un crochet de cycle de vie
preDrain
pour remplacer la logique de vidange du contrôleur de machine par un contrôleur de vidange différent. En remplaçant la logique de vidange, l'opérateur aura plus de flexibilité et de contrôle sur le cycle de vie des charges de travail sur chaque nœud.Par exemple, les bibliothèques de vidange du contrôleur de machine ne prennent pas en charge la commande, mais un fournisseur de vidange personnalisé pourrait fournir cette fonctionnalité. En utilisant un fournisseur de vidange personnalisé, un opérateur peut donner la priorité au déplacement des applications critiques avant de vidanger le nœud afin de minimiser les interruptions de service dans les cas où la capacité du cluster est limitée.
Exemples de cas d'utilisation de preTerminate
lifecycle hooks
- Vérification du détachement du stockage
-
Un opérateur peut utiliser un crochet de cycle de vie
preTerminate
pour s'assurer que le stockage attaché à une machine est détaché avant que la machine ne soit retirée du fournisseur d'infrastructure. - Améliorer la fiabilité des journaux
Après la vidange d'un nœud, le démon de l'exportateur de journaux a besoin d'un certain temps pour synchroniser les journaux avec le système de journalisation centralisé.
Un opérateur de journalisation peut utiliser un crochet de cycle de vie
preTerminate
pour ajouter un délai entre la vidange du nœud et la suppression de la machine du fournisseur d'infrastructure. Ce délai donne à l'opérateur le temps de s'assurer que les principales charges de travail sont supprimées et qu'elles n'alimentent plus l'historique des journaux. Lorsqu'aucune nouvelle donnée n'est ajoutée à l'historique des journaux, l'exportateur de journaux peut rattraper le processus de synchronisation, garantissant ainsi que tous les journaux d'application sont capturés.
5.2.5. Protection du quorum à l'aide de crochets de cycle de vie de la machine
Pour les clusters OpenShift Container Platform qui utilisent l'opérateur API Machine, l'opérateur etcd utilise des crochets de cycle de vie pour la phase de suppression de la machine afin de mettre en œuvre un mécanisme de protection du quorum.
En utilisant un crochet de cycle de vie preDrain
, l'opérateur etcd peut contrôler quand les pods sur une machine de plan de contrôle sont vidés et supprimés. Pour protéger le quorum etcd, l'opérateur etcd empêche la suppression d'un membre etcd jusqu'à ce qu'il migre ce membre sur un nouveau nœud dans le cluster.
Ce mécanisme permet à l'opérateur etcd de contrôler précisément les membres du quorum etcd et à l'opérateur Machine API de créer et de supprimer en toute sécurité des machines du plan de contrôle sans connaissance opérationnelle spécifique du cluster etcd.
5.2.5.1. Suppression du plan de contrôle avec ordre de traitement de la protection du quorum
Lorsqu'une machine de plan de contrôle est remplacée dans une grappe qui utilise un ensemble de machines de plan de contrôle, la grappe a temporairement quatre machines de plan de contrôle. Lorsque le quatrième nœud de plan de contrôle rejoint la grappe, l'opérateur etcd démarre un nouveau membre etcd sur le nœud de remplacement. Lorsque l'opérateur etcd observe que l'ancienne machine de plan de contrôle est marquée pour suppression, il arrête le membre etcd sur l'ancien nœud et promeut le membre etcd de remplacement pour qu'il rejoigne le quorum de la grappe.
La phase de la machine du plan de contrôle Deleting
se déroule dans l'ordre suivant :
- Une machine du plan de contrôle doit être supprimée.
-
La machine du plan de contrôle entre dans la phase
Deleting
. Pour satisfaire le crochet de cycle de vie
preDrain
, l'opérateur etcd entreprend les actions suivantes :-
L'opérateur etcd attend qu'une quatrième machine de plan de contrôle soit ajoutée au cluster en tant que membre etcd. Ce nouveau membre etcd a l'état
Running
mais pasready
jusqu'à ce qu'il reçoive la mise à jour complète de la base de données de la part du leader etcd. - Lorsque le nouveau membre etcd reçoit la mise à jour complète de la base de données, l'opérateur etcd promeut le nouveau membre etcd en tant que membre votant et supprime l'ancien membre etcd du cluster.
Une fois cette transition terminée, l'ancien pod etcd et ses données peuvent être supprimés en toute sécurité, et le crochet de cycle de vie
preDrain
est donc supprimé.-
L'opérateur etcd attend qu'une quatrième machine de plan de contrôle soit ajoutée au cluster en tant que membre etcd. Ce nouveau membre etcd a l'état
-
La condition d'état de la machine du plan de contrôle
Drainable
est réglée surTrue
. Le contrôleur de machine tente de drainer le nœud qui est soutenu par la machine du plan de contrôle.
-
Si la vidange échoue,
Drained
est défini surFalse
et le contrôleur de machine tente de vidanger à nouveau le nœud. -
Si la vidange réussit,
Drained
devientTrue
.
-
Si la vidange échoue,
-
La condition d'état de la machine du plan de contrôle
Drained
est réglée surTrue
. -
Si aucun autre opérateur n'a ajouté un crochet de cycle de vie
preTerminate
, la condition d'état de la machine du plan de contrôleTerminable
devientTrue
. - Le contrôleur de machine supprime l'instance du fournisseur d'infrastructure.
-
Le contrôleur de machine supprime l'objet
Node
.
Extrait YAML démontrant la protection du quorum etcd preDrain
lifecycle hook
apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: ... spec: lifecycleHooks: preDrain: - name: EtcdQuorumOperator 1 owner: clusteroperator/etcd 2 ...