Konflikte mit mehreren Config Connector-Ressourcen verwalten

Auf dieser Seite wird gezeigt, wie Config Connector Konflikte behandelt. Konflikte können auftreten, wenn dieselbe Ressource von mehreren Ressourcen verwaltet wird.

Config Connector verwaltet oder erwirbt Ressourcen, indem die Kombination aus Kubernetes Ressourcenname, Containerannotation und gegebenenfalls Region oder Standort zugeordnet wird. Im einfachsten Fall organisieren Sie Ihre Ressourcen mit Google Cloud-Projekten.

Google Cloud unterstützt neben den Projekten weitere Hierarchieebenen: Ordner, Projekte und Organisationen. Sie können Ihren Ordnern, Projekten und Organisationen mit einer Annotation zuordnen. Wenn Sie mit Config Connector eine Ressource ohne Annotation erstellen, wird die Ressource in dem Projekt angelegt, das den Namespace der Ressource teilt.

Es ist möglich, zwei Config Connector-Ressourcen in unterschiedlichen Namespaces zu erstellen, die die gleiche Google Cloud-Ressource verwalten. Dies wird aber nicht empfohlen. Config Connector verwaltet die entsprechende Google Cloud-Ressource nur, wenn sie eine Freigabe für die Google Cloud-Ressource abrufen kann und die Vermeidung von Konflikten aktiviert ist.

Freigaben sind Namespace-bezogen. Zum Abrufen einer Namespace-bezogenen Freigabe fügt der Config Connector der Ressource zwei Labels hinzu:

  1. Eine global eindeutige ID für den Namespace (cnrm-lease-holder-id))
  2. Eine Ablaufzeit (cnrm-lease-expiration) in Unixzeit.

Config Connector kann diese Werte aktualisieren, wenn eine der folgenden Bedingungen zutrifft:

  • Der Wert von cnrm-lease-holder-id entspricht der global eindeutigen ID des Namespace.
  • Der Wert von cnrm-lease-holder-id ist leer oder nicht vorhanden.
  • Der Wert von cnrm-lease-expiration liegt in der Vergangenheit.

Wenn eine Config Connector-Instanz eine Freigabe für eine Ressource erhält, wird die Ablaufzeit auf 40 Minuten in der Zukunft festgelegt. Dieselbe Instanz von Config Connector behält die Verwaltung bei, solange sich die Ressource im Namespace befindet. Config Connector verlängert die Ablaufzeit um 40 Minuten, wenn weniger als 20 Minuten verbleiben.

Wenn Config Connector für eine bestimmte Ressource keine Freigabe abrufen kann, wird in der Ausgabe von kubectl describe für die Ressource der Status ManagementConflict angezeigt.

Konfliktvermeidung ändern

Sie können die Verhinderung von Konflikten steuern, indem Sie der Ressource die Annotation cnrm.cloud.google.com/management-conflict-prevention-policy mit einem der folgenden Werte hinzufügen:

  • resource: Verwaltungkonflikte werden auf Ressourcenebene verhindert. Dazu werden die entsprechenden Freigabelabels in der Ressource gespeichert, wie im vorherigen Abschnitt beschrieben.
  • none: Verwaltungskonflikte werden nicht verhindert.

Der Standardwert hängt davon ab, ob eine Config Connector-Ressource Labels unterstützt. Wenn die Ressource Labels unterstützt, ist der Standardwert resource. Wenn die Ressource keine Labels unterstützt, ist der Standardwert none.

Im folgenden Beispiel verwendet ein Manifest für das Compute-Standardnetzwerk die Verwaltungsrichtlinie none. Das bedeutet, dass Konflikte nicht verhindert werden:

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeNetwork
metadata:
 annotations:
   cnrm.cloud.google.com/management-conflict-prevention-policy: "none"
   cnrm.cloud.google.com/project-id: "PROJECT-ID"
   cnrm.cloud.google.com/deletion-policy: "abandon"
 name: default
spec:
 description: Default network for the project

Beschränkungen

Konfliktdeprävention unterliegt den folgenden Einschränkungen:

  • Die Konfliktvorlösung funktioniert nicht für Ressourcen, die keine Labels unterstützen. Auch wenn Sie den Wert von none in resource ändern, funktioniert er weiterhin.

  • Wenn Sie Ressourcen mit dem Feld "resourceID" verwalten, können Sie mehrere Ressourcen mit demselben Google Cloud-Ressourcennamen erstellen, der unter demselben Namespace erstellt wurde. Diese Ressourcen verursachen Konflikte, die Config Connector nicht verwalten kann.