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

The sequence of events in the machine `Deleting` phase.

La phase de la machine Deleting se déroule dans l'ordre suivant :

  1. Une machine existante est destinée à être supprimée pour l'une des raisons suivantes :

    • Un utilisateur disposant des autorisations cluster-admin utilise la commande oc 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.
  2. La machine entre dans la phase Deleting, au cours de laquelle elle est marquée pour suppression mais reste présente dans l'API.
  3. 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 machine Drainable est fixée à False.

  4. Il n'y a pas de crochets de cycle de vie preDrain non résolus et la condition d'état de la machine Drainable est réglée sur True.
  5. 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 sur False et le contrôleur de machine tente de vidanger à nouveau le nœud.
    • Si la vidange réussit, Drained devient True.
  6. La condition d'état de la machine Drained est réglée sur True.
  7. 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 machine Terminable est fixée à False.

  8. Il n'y a pas de crochets de cycle de vie preTerminate non résolus et la condition d'état de la machine Terminable est réglée sur True.
  9. Le contrôleur de machine supprime l'instance du fournisseur d'infrastructure.
  10. 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
  ...

1
Le nom du crochet du cycle de vie de preDrain.
2
Le contrôleur de mise en œuvre du crochet qui gère le crochet du cycle de vie de preDrain.

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
  ...

1
Le nom du crochet du cycle de vie de preTerminate.
2
Le contrôleur implémentant le crochet qui gère le crochet du cycle de vie de preTerminate.
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 et WaitForStorageDetach.

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 :

  1. Une machine du plan de contrôle doit être supprimée.
  2. La machine du plan de contrôle entre dans la phase Deleting.
  3. Pour satisfaire le crochet de cycle de vie preDrain, l'opérateur etcd entreprend les actions suivantes :

    1. 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 pas ready jusqu'à ce qu'il reçoive la mise à jour complète de la base de données de la part du leader etcd.
    2. 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é.

  4. La condition d'état de la machine du plan de contrôle Drainable est réglée sur True.
  5. 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 sur False et le contrôleur de machine tente de vidanger à nouveau le nœud.
    • Si la vidange réussit, Drained devient True.
  6. La condition d'état de la machine du plan de contrôle Drained est réglée sur True.
  7. 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ôle Terminable devient True.
  8. Le contrôleur de machine supprime l'instance du fournisseur d'infrastructure.
  9. 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
  ...

1
Le nom du crochet du cycle de vie de preDrain.
2
Le contrôleur de mise en œuvre du crochet qui gère le crochet du cycle de vie de preDrain.
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.