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

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

王林
王林avant
2024-02-11 08:57:08349parcourir

更新 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)
}
  • Et uniquement le statut de mise à jour :
if err = r.status().update(ctx, upcrd); err != nil {
    return reconcile.result{}, client.ignorenotfound(err)
}

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"`
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer