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:
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 wirdcnrm-lease-holder-id
festgelegt. Die Zuordnung des Namespace zum Wertcnrm-lease-holder-id
können Sie in der ConfigMapnamespace-id
im Namespacecnrm-system
sehen.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
inresource
ä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.