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!
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é :
if err = r.client.update(ctx, upcrd); err != nil { return ctrl.result{}, client.ignorenotfound(err) }
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 :)
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!