5.13. Configuration de l’élection des dirigeants


Au cours du cycle de vie d’un opérateur, il est possible qu’il puisse y avoir plus d’une instance en cours d’exécution à un moment donné, par exemple lors du déploiement d’une mise à niveau pour l’opérateur. Dans un tel scénario, il est nécessaire d’éviter toute dispute entre plusieurs instances de l’opérateur utilisant l’élection de leader. Cela garantit qu’une seule instance leader gère la réconciliation tandis que les autres instances sont inactives mais prêtes à prendre le relais lorsque le leader démissionne.

Il y a deux implémentations électorales différentes à choisir, chacune avec son propre compromis:

Leader pour la vie
La gousse de leader n’abandonne le leadership, en utilisant la collecte des ordures, lorsqu’elle est supprimée. Cette mise en œuvre exclut la possibilité que deux instances courent par erreur en tant que leaders, un état également connu sous le nom de cerveau divisé. Cependant, cette méthode peut être sujette à un retard dans l’élection d’un nouveau leader. Ainsi, lorsque la gousse de leader est sur un nœud sans réponse ou partitionné, vous pouvez spécifier node.kubernetes.io/unreachable et node.kubernetes.io/non-prêt tolérance sur la gousse de leader et utiliser la valeur de toléranceSeconds pour dicter combien de temps il faut pour que la gousse de leader soit supprimée du nœud et démissionne. Ces tolérances sont ajoutées à la pod par défaut lors de l’admission avec une tolérance de 5 minutes. Consultez la documentation Leader-for-life Go pour en savoir plus.
Leader avec location
Le groupe dirigeant renouvelle périodiquement le bail de leader et renonce au leadership lorsqu’il ne peut pas renouveler le bail. Cette implémentation permet une transition plus rapide vers un nouveau leader lorsque le leader existant est isolé, mais il y a une possibilité de diviser le cerveau dans certaines situations. Consultez la documentation Leader-with-lease Go pour plus d’informations.

Le SDK d’opérateur permet par défaut l’implémentation Leader-for-life. Consultez la documentation connexe Go pour les deux approches afin de tenir compte des compromis qui ont du sens pour votre cas d’utilisation.

Important

La version prise en charge par Red Hat de l’outil Operator SDK CLI, y compris les outils d’échafaudage et de test connexes pour les projets Opérateur, est dépréciée et devrait être supprimée dans une future version de Red Hat OpenShift Service sur AWS. Le Red Hat fournira des corrections de bogues et une prise en charge de cette fonctionnalité pendant le cycle de vie de la version actuelle, mais cette fonctionnalité ne recevra plus d’améliorations et sera supprimée du futur service Red Hat OpenShift sur les versions AWS.

La version prise en charge par Red Hat du SDK de l’opérateur n’est pas recommandée pour la création de nouveaux projets d’opérateur. Les auteurs d’opérateurs avec des projets d’opérateur existants peuvent utiliser la version de l’outil Operator SDK CLI publié avec Red Hat OpenShift Service sur AWS 4 pour maintenir leurs projets et créer des versions d’opérateur ciblant de nouvelles versions de Red Hat OpenShift Service sur AWS.

Les images de base suivantes pour les projets d’opérateur ne sont pas dépréciées. Les fonctionnalités d’exécution et les API de configuration de ces images de base sont toujours prises en charge pour les corrections de bogues et pour l’adressage des CVE.

  • L’image de base pour les projets d’opérateurs basés sur Ansible
  • L’image de base pour les projets d’opérateur basé sur Helm

Afin d’obtenir de l’information sur la version non prise en charge et gérée par la communauté du SDK de l’opérateur, voir Operator SDK (Operator Framework).

5.13.1. Exemples d’élection du chef d’opérateur

Les exemples suivants illustrent comment utiliser les deux options électorales de leader pour un opérateur, un leader à vie et un leader avec bail.

5.13.1.1. Élection de chef à vie

Avec la mise en œuvre des élections Leader-for-life, un appel à Leader.Become() bloque l’opérateur comme il se retries jusqu’à ce qu’il puisse devenir le leader en créant la carte de configuration nommée memcached-operator-lock:

import (
  ...
  "github.com/operator-framework/operator-sdk/pkg/leader"
)

func main() {
  ...
  err = leader.Become(context.TODO(), "memcached-operator-lock")
  if err != nil {
    log.Error(err, "Failed to retry for leader lock")
    os.Exit(1)
  }
  ...
}
Copy to Clipboard Toggle word wrap

Lorsque l’opérateur n’est pas en cours d’exécution à l’intérieur d’un cluster, Leader.Become() retourne simplement sans erreur pour sauter l’élection de leader car il ne peut pas détecter le nom de l’opérateur.

5.13.1.2. Élection du chef avec bail

La mise en œuvre de Leader-with-location peut être activée à l’aide des options de gestionnaire pour l’élection des leaders:

import (
  ...
  "sigs.k8s.io/controller-runtime/pkg/manager"
)

func main() {
  ...
  opts := manager.Options{
    ...
    LeaderElection: true,
    LeaderElectionID: "memcached-operator-lock"
  }
  mgr, err := manager.New(cfg, opts)
  ...
}
Copy to Clipboard Toggle word wrap

Lorsque l’opérateur n’est pas en cours d’exécution dans un cluster, le gestionnaire retourne une erreur au démarrage car il ne peut pas détecter l’espace de noms de l’opérateur pour créer la carte de configuration pour l’élection de leader. L’option LeaderElectionNamespace vous permet de remplacer cet espace de noms en définissant l’option LeaderElectionNamespace pour le gestionnaire.

Retour au début
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. Découvrez nos récentes mises à jour.

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

Theme

© 2025 Red Hat