Maison > développement back-end > Golang > Mettre à jour l'état du contrôleur Kubernetes personnalisé dans Golang

Mettre à jour l'état du contrôleur Kubernetes personnalisé dans Golang

王林
Libérer: 2024-02-11 08:57:08
avant
419 Les gens l'ont consulté

更新 golang 中自定义 Kubernetes 控制器的状态

l'éditeur php Youzi vous propose le dernier partage de technologie : cet article explique comment personnaliser la mise à jour de l'état du contrôleur Kubernetes dans Golang. En tant que moteur d'orchestration de conteneurs open source, Kubernetes est devenu un choix populaire pour le développement d'applications cloud natives. Le contrôleur est l'un des composants principaux de Kubernetes et est utilisé pour gérer l'état de l'application. Comprendre comment personnaliser les mises à jour de l'état du contrôleur aidera les développeurs à mieux comprendre la flexibilité et l'évolutivité de Kubernetes. Dans cet article, nous présenterons les concepts associés et fournirons des exemples de code détaillés pour aider les lecteurs à démarrer rapidement. Restez à l'écoute!

Contenu de la question

Je construis un opérateur go kubernetes. J'utilise kubebuilder pour le créer. Je souhaite stocker certains détails internes dans l'état crd. J'ai essayé :

  • Mettre à jour l'intégralité de la ressource :
if err = r.client.update(ctx, upcrd); err != nil {
    return ctrl.result{}, client.ignorenotfound(err)
}
Copier après la connexion
  • Et uniquement le statut de mise à jour :
if err = r.status().update(ctx, upcrd); err != nil {
    return reconcile.result{}, client.ignorenotfound(err)
}
Copier après la connexion

La structure de l'État est définie comme suit :

type HAAuditStatus struct {
    ChaosStrategyCron  cron.EntryID       `json:"chaosStrategyCron,omitempty"`
    TestStatus         TestStatus         `json:"testStatus,omitempty"`
    MetricStatus       MetricStatus       `json:"metricStatus,omitempty"`
    RoundRobinStrategy RoundRobinStrategy `json:"roundRobinStrategy,omitempty"`
    FixedStrategy      FixedStrategy      `json:"fixedStrategy,omitempty"`
    NextChaosDateTime  int64              `json:"nextChaosDateTime,omitempty"`
    Created            bool               `json:"created,default=false"`
}
Copier après la connexion

Aucune erreur n'est générée et les champs de spécification modifiés sont effectivement conservés, mais le champ d'état ne l'est pas et sa valeur reste à sa valeur par défaut lors de l'étape de réconciliation suivante. J'ai regardé d'autres questions sur github ou stackoverflow et toutes les suggestions qui ont été formulées ont résolu mon problème, mais je n'arrive pas à comprendre quel était le problème. Pour mieux comprendre, vous pouvez vous référer au référentiel où se trouve l'opérateur.

Toutes les suggestions sont les bienvenues :)

Solution

J'ai peut-être trouvé la raison pour laquelle le statut n'est pas mis à jour.

Avant de mettre à jour le statut, j'ai également mis à jour le champ canonique (pour fournir des commentaires à l'utilisateur sur la ressource créée).

Le problème est dû à une mise à jour des spécifications déclenchant une nouvelle réconciliation, et cette directive mise à jour (qui inclut les mises à jour de statut) n'est pas exécutée.

Je me rends compte qu'utiliser des spécifications pour fournir des commentaires aux utilisateurs n'est pas approprié et que les événements sont mieux adaptés à cette fin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal