Heim  >  Artikel  >  Backend-Entwicklung  >  Aktualisieren Sie den Status des benutzerdefinierten Kubernetes-Controllers in Golang

Aktualisieren Sie den Status des benutzerdefinierten Kubernetes-Controllers in Golang

王林
王林nach vorne
2024-02-11 08:57:08349Durchsuche

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

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!

Frageninhalt

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:

  • Gesamte Ressource aktualisieren:
if err = r.client.update(ctx, upcrd); err != nil {
    return ctrl.result{}, client.ignorenotfound(err)
}
  • Und nur Update-Status:
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 :)

Lösung

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen