Konflikte mit mehreren Config Connector-Ressourcen verwalten

Auf dieser Seite wird beschrieben, wie Config Connector mit Konflikten umgeht. Konflikte können auftreten, wenn dieselbe Ressource von mehreren Ressourcen verwaltet wird.

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

Google Cloud unterstützt zusätzlich zu Projekten weitere Hierarchieebenen: Ordner, Projekte und Organisationen. Sie können Ihren Ordnern, Projekten und Organisationen Ressourcen mit einer Anmerkung zuordnen. Wenn Sie mit Config Connector eine Ressource ohne Annotation erstellen, wird die Ressource in dem Projekt erstellt, das den Namespace der Ressource verwendet.

Es ist möglich, aber nicht empfehlenswert, zwei Config Connector-Ressourcen in verschiedenen Namespaces zu erstellen, die dieselbe Google Cloud-Ressource verwalten. Config Connector verwaltet die entsprechende Google Cloud-Ressource nur, wenn sie eine Freigabe für die Google Cloud-Ressource abrufen kann und die Konfliktprävention aktiviert ist.

Leasing-Optionen sind Namespace-bezogen. Um eine Namespace-bezogene Freigabe zu erhalten, fügt Config Connector der Ressource zwei Labels hinzu:

  1. cnrm-lease-holder-id: Config Controller generiert für jeden Namespace eine eindeutige ID, die eine Ressource mit aktivierter Konfliktprävention verwaltet. Mit dieser eindeutigen ID wird cnrm-lease-holder-id festgelegt. Die Zuordnung des Namespace zum Wert cnrm-lease-holder-id können Sie in der ConfigMap namespace-id im Namespace cnrm-system sehen.
  2. cnrm-lease-expiration: Eine Ablaufzeit in Unixzeit.

Config Connector kann diese Werte aktualisieren, wenn einer der folgenden Punkte 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, ist 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 keine Freigabe für eine bestimmte Ressource abrufen kann, wird in der Ausgabe von kubectl describe für die Ressource der Status ManagementConflict angegeben.

Vorbeugung von Konflikten ändern

Sie können die Konfliktprävention steuern. Fügen Sie dazu der Ressource die Annotation cnrm.cloud.google.com/management-conflict-prevention-policy mit einem der folgenden Werte hinzu:

  • resource: Verwaltungskonflikte werden auf Ressourcenebene verhindert, indem die entsprechenden Leasing-Labels in der Ressource gespeichert werden, wie im vorherigen Abschnitt beschrieben.
  • none: Verwaltungskonflikte werden nicht verhindert.

Der Standardwert ist none.

Im folgenden Beispiel verwendet ein Manifest für das Standard-ComputeNetwork die Verwaltungsrichtlinie none, was 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

Bei der Konfliktprävention gelten folgende Einschränkungen:

  • Die Konfliktprävention funktioniert nicht für Ressourcen, die Labels nicht unterstützen. Auch wenn Sie den Wert von none in resource ändern, funktioniert dies nicht.

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