php-Editor Youzi bietet Ihnen den neuesten Technologieaustausch: In diesem Artikel wird erläutert, wie Sie die Statusaktualisierung des Kubernetes-Controllers in Golang anpassen. Als Open-Source-Container-Orchestrierungs-Engine ist Kubernetes zu einer beliebten Wahl für die cloudnative Anwendungsentwicklung geworden. Der Controller ist eine der Kernkomponenten in Kubernetes und dient der Verwaltung des Anwendungszustands. Wenn Entwickler verstehen, wie sie Controller-Statusaktualisierungen anpassen können, können sie die Flexibilität und Skalierbarkeit von Kubernetes besser verstehen. In diesem Artikel stellen wir verwandte Konzepte vor und stellen detaillierte Codebeispiele bereit, um den Lesern den schnellen Einstieg zu erleichtern. Bleiben Sie dran!
Ich baue einen Go-Kubernetes-Betreiber auf. Ich verwende Kubebuilder, um es zu erstellen. Ich möchte einige interne Details im CRD-Status speichern. Ich habe es versucht:
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) }
Die Staatsstruktur ist wie folgt definiert:
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"` }
Es werden keine Fehler ausgegeben und die geänderten Spezifikationsfelder bleiben tatsächlich erhalten, das Statusfeld jedoch nicht und sein Wert bleibt im nächsten Abgleichsschritt auf dem Standardwert. Ich habe mir andere Fragen zu Github oder Stackoverflow angesehen und alle Vorschläge haben mein Problem gelöst, aber ich kann nicht herausfinden, was das Problem war. Um ein besseres Verständnis zu erhalten, können Sie auf das Repository zurückgreifen, in dem sich der Operator befindet.
Alle Vorschläge sind sehr willkommen :)
Möglicherweise habe ich den Grund gefunden, warum der Status nicht aktualisiert wird.
Bevor ich den Status aktualisiert habe, habe ich auch das kanonische Feld aktualisiert (um dem Benutzer Feedback zur erstellten Ressource zu geben).
Das Problem ist darauf zurückzuführen, dass eine Spezifikationsaktualisierung einen neuen Abgleich auslöst und diese aktualisierte Anweisung (einschließlich Statusaktualisierungen) nicht ausgeführt wird.
Mir ist klar, dass die Verwendung von Spezifikationen zur Bereitstellung von Feedback für Benutzer nicht angemessen ist und Veranstaltungen für diesen Zweck besser geeignet sind.
Das obige ist der detaillierte Inhalt vonAktualisieren Sie den Status des benutzerdefinierten Kubernetes-Controllers in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!