Abgleichsstrategie


Bei der deklarativen Konfiguration definieren Sie den gewünschten Status des Systems. Das System versucht dann kontinuierlich, diesen Status so weit wie möglich zu gewährleisten. Weitere Informationen finden Sie unter Deklarative Verwaltung von Kubernetes-Objekten mithilfe von Konfigurationsdateien.

Mit Config Connector können Sie Ressourcen unabhängig von Abhängigkeitsbeziehungen in beliebiger Reihenfolge erstellen und aktualisieren. GKE verschiebt Ihre deklarierte Konfiguration in Richtung Eventual Consistency mit dem gewünschten Status.

Wenn Sie beispielsweise eine PubSubSubscription vor der entsprechenden PubSubTopic erstellen, wartet Config Connector, bis das Thema erstellt wurde, bevor Sie das zugehörige Abo erstellen.

Wie lange Ihre Config Connector-Installation inkonsistent bleibt, hängt von der Anzahl und der Art der verwalteten Ressourcen ab. Änderungen an einem GKE-Cluster werden in der Regel innerhalb von Sekunden ausgeführt. Die Erstellungszeit für Google Cloud-Ressourcen kann jedoch je nach Ressourcentyp variieren. Beispielsweise dauert das Erstellen einer einzelnen PubSubTopic in Sekunden. Google Cloud-Ressourcen erreichen die Konsistenz erst, wenn sie erstellt wurden. Wenn Sie beispielsweise SQLInstance und SQLDatabase erstellen, ist das System während der Erstellung der Datenbank für einen Zeitraum von Minuten inkonsistent.

GKE und Config Connector gleichen jede Ressource bei jeder Aktualisierung oder nach einem Jitter-Zeitraum mit einem Durchschnitt ab, der auf dem vorkonfigurierten Standardintervall basiert. Sie finden das Standardintervall auf der Referenzseite der jeweiligen Ressource unter „Durchschnittliches Standardabgleichsintervall in Sekunden des Config Connectors“. Links zu den einzelnen Ressourcen finden Sie in der Ressourcenübersicht. Wenn beim Abgleich ein Fehler auftritt, wiederholt Config Connector den Vorgang mit exponentiellem Backoff. Der maximale Backoff beträgt zwei Minuten. Sie können alle Fehler unter Ereignisse einer bestimmten Ressource ansehen.

Abgleichintervall konfigurieren

Ab Config Connector 1.102 können Sie das durchschnittliche Abgleichsintervall für Ressourcen, die von Config Connector verwaltet werden, mit der Annotation cnrm.cloud.google.com/reconcile-interval-in-seconds konfigurieren. Der Wert der Annotation überschreibt den Standardwert für "Config Connector Default Average Reconcile Interval in Seconds" von der Seite Ressourcenreferenz. Der Wert der Annotation muss eine nicht negative Ganzzahl sein, die für die Zeit in Sekunden steht. Wenn der Wert auf 0 gesetzt ist, startet Config Connector keine Abgleiche für die Ressource, sobald sie den Status UpToDate erreicht.

Wenn Sie beispielsweise möchten, dass Config Connector eine Ressource seltener abgleicht, um zu verhindern, dass die zugrunde liegenden API-Kontingentprobleme von Google Cloud auftreten, können Sie den durchschnittlichen Wert des Abgleichsintervalls auf eine Stunde festlegen.

cnrm.cloud.google.com/reconcile-interval-in-seconds: 3600

Wenn Sie möchten, dass Config Connector eine Ressource häufiger abgleicht, um Drifts schneller zu korrigieren, können Sie die Annotation mit einem kleinen Wert festlegen.

Sie können alle Ressourcen eines bestimmten Typs, die dieselbe Gruppenversionsart (Group Version Art, GVK) verwenden, mit dem folgenden Skript annotieren:

#!/bin/bash

KIND=RESOURCE_KIND
NAMESPACE=RESOURCE_NAMESPACE
ANNOTATION_KEY="cnrm.cloud.google.com/reconcile-interval-in-seconds"
ANNOTATION_VALUE=RECONCILE_INTERVAL

kubectl annotate --overwrite --all ${KIND} ${ANNOTATION_KEY}=${ANNOTATION_VALUE} -n ${NAMESPACE}
echo "Annotation added to all ${KIND} RESOURCE"

Ersetzen Sie Folgendes:

  • RESOURCE_KIND: Die Ressourcenart, die Sie annotieren möchten.
  • RESOURCE_NAMESPACE: Der Namespace, der die Ressourcen enthält, die Sie annotieren möchten.
  • RECONCILE_INTERVAL: das Abgleichintervall in Sekunden.

Sie können das Abgleichsintervall auf 0 festlegen, um die Driftkorrektur für eine Ressource zu deaktivieren. Die Ressourcenaktivierung wird jedoch nicht deaktiviert. Wenn Sie Änderungen an der Ressource Spec vornehmen, wird die Ressource wieder abgeglichen.

Das Abgleichsintervall kann nicht rückgängig gemacht werden. Das bedeutet, dass Config Connector die Ressource nicht noch einmal abgleicht, wenn Sie den Wert wieder in eine Zahl ungleich null ändern.

Wenn Sie das Abgleichintervall von 0 zurücksetzen möchten, haben Sie folgende Möglichkeiten:

  • Ändern Sie die Ressourcenspezifikation mit dem Wert des Abgleichsintervalls, um neue Abgleiche zu aktivieren.
  • Verwerfen Sie die Ressource, indem Sie die Annotation cnrm.cloud.google.com/deletion-policy: "abandon" festlegen, und erstellen Sie die Ressource mit einem anderen Wert für das Abgleichsintervall als 0 neu.

Änderbare, aber nicht lesbare Felder werden nur bei Änderungen berücksichtigt

Einige APIs stellen Felder bereit, die nicht lesbar, aber änderbar sind (z. B. das Passwort für einen SQL-Nutzer). Da nicht festgestellt werden kann, ob diese Felder geändert wurden, werden änderbare, aber nicht lesbare Felder nur aktualisiert, wenn die benutzerdefinierte Ressource geändert wird.

Ressourcen werden beim Ändern unveränderlicher Felder nicht neu erstellt

Einige Felder in einer Ressource sind unveränderlich und können nicht abgeglichen werden, ohne die Zielressource zu löschen und anschließend neu zu erstellen.

In diesen Situationen gibt Config Connector das Kubernetes-Ereignis „UpdatedFailed“ für die Ressource nicht aus, anstatt diese Neuerstellung durchzuführen. Anschließend müssen Sie die Ressource löschen und neu erstellen.

Beispielereignis:

Warning  UpdateFailed  37m (x643 over 15d)    computeinstance-controller  Update call failed: the desired mutation for the following field(s) is invalid: [bootDisk.0.InitializeParams.0.Image networkInterface.0.NetworkIp]