Gestione dei conflitti con più risorse Config Connector
Questa pagina descrive come Config Connector gestisce i conflitti. I conflitti possono verificarsi quando la stessa risorsa è gestita da più risorse.
Config Connector gestisce o acquisisce le risorse mappando la combinazione del nome della risorsa Kubernetes, dell'annotazione del container e, se applicabile, della regione o della località. Nel caso più semplice, organizzi le risorse con Google Cloud progetti.
Google Cloud supporta livelli di gerarchia aggiuntivi oltre ai progetti: cartelle, progetti e organizzazioni. Puoi mappare le risorse alle tue cartelle, ai tuoi progetti e alle tue organizzazioni con un'annotazione. Quando crei una risorsa senza un'annotazione utilizzando Config Connector, la risorsa viene creata nel progetto che condivide lo spazio dei nomi della risorsa.
È possibile, ma non consigliabile, creare due risorse Config Connector in spazi dei nomi diversi che gestiscono la stessa Google Cloud risorsa. Config Connector gestisce la risorsa Google Cloud corrispondente solo se è in grado di ottenere un contratto di locazione per la risorsa Google Cloud e la prevenzione dei conflitti è abilitata.
I lease hanno ambito a livello di spazio dei nomi. Per ottenere un lease a livello di spazio dei nomi, Config Connector aggiunge due etichette alla risorsa:
cnrm-lease-holder-id
: Config Controller genera un ID univoco per ogni spazio dei nomi che gestisce una risorsa con la prevenzione dei conflitti abilitata. Questo ID unico viene utilizzato per impostarecnrm-lease-holder-id
. Per visualizzare la mappatura dello spazio dei nomi al valorecnrm-lease-holder-id
, puoi esaminare il ConfigMapnamespace-id
nello spazio dei nomicnrm-system
.cnrm-lease-expiration
: una data di scadenza in tempo Unix epoch.
Config Connector è in grado di aggiornare questi valori se una delle seguenti condizioni è vera:
- Il valore di
cnrm-lease-holder-id
corrisponde all'ID univoco a livello mondiale dello spazio dei nomi. - Il valore di
cnrm-lease-holder-id
è vuoto o non esistente. - Il valore di
cnrm-lease-expiration
è nel passato.
Quando un'istanza di Config Connector ottiene un lease per una risorsa, la data di scadenza viene impostata su 40 minuti nel futuro. La stessa istanza di Config Connector mantiene la gestione finché la risorsa è nello spazio dei nomi. Config Connector prolunga il tempo di scadenza di 40 minuti quando rimangono meno di 20 minuti.
Se Config Connector non è in grado di ottenere un lease per una determinata risorsa, l'output di kubectl describe
sulla risorsa elenca uno stato ManagementConflict
.
Modificare la prevenzione dei conflitti
Puoi controllare la prevenzione dei conflitti aggiungendo l'annotazione cnrm.cloud.google.com/management-conflict-prevention-policy
alla risorsa con uno dei seguenti valori:
resource
: i conflitti di gestione vengono evitati a livello di risorsa salvando le etichette di leasing appropriate nella risorsa come descritto nella sezione precedente.none
: i conflitti di gestione non vengono evitati.
Il valore predefinito è none
.
Nell'esempio seguente, un manifest per la rete Compute predefinita utilizza un
criterio di gestione di none
, il che significa che i conflitti non vengono evitati:
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
Limitazioni
La prevenzione dei conflitti presenta le seguenti limitazioni:
La prevenzione dei conflitti non funziona per le risorse che non supportano le etichette. Anche se modifichi il valore da
none
aresource
, il problema persiste.Se gestisci le risorse con il campo resourceID, puoi creare più risorse con lo stesso Google Cloud nome della risorsa, create nello stesso spazio dei nomi. Queste risorse creano conflitti che Config Connector non è in grado di gestire.