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 di nome della risorsa Kubernetes, annotazione del container e, se applicabile, regione o località. Nel caso più semplice, organizzi le risorse con i progetti di Google Cloud.
Google Cloud supporta livelli gerarchici aggiuntivi oltre ai progetti: cartelle, progetti e organizzazioni. Puoi mappare le risorse alle tue cartelle, progetti e 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 consigliato, creare due risorse Config Connector in spazi dei nomi diversi che gestiscono la stessa risorsa Google Cloud . Config Connector gestisce la risorsa Google Cloud corrispondente solo se è in grado di ottenere un lease sulla risorsa Google Cloud e la prevenzione dei conflitti è abilitata.
I lease sono limitati allo spazio dei nomi. Per ottenere un lease con ambito 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 univoco viene utilizzato per impostarecnrm-lease-holder-id
. Per visualizzare il mapping dello spazio dei nomi al valorecnrm-lease-holder-id
, puoi esaminare l'oggetto ConfigMapnamespace-id
nello spazio dei nomicnrm-system
.cnrm-lease-expiration
: una scadenza espressa come 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 globale dello spazio dei nomi. - Il valore di
cnrm-lease-holder-id
è vuoto o inesistente. - Il valore di
cnrm-lease-expiration
è nel passato.
Quando un'istanza di Config Connector ottiene un lease per una risorsa, l'ora di scadenza è impostata su 40 minuti nel futuro. La stessa istanza di Config Connector mantiene la gestione finché la risorsa si trova nello spazio dei nomi. Config Connector estende il tempo di scadenza di 40 minuti quando ne rimangono meno di 20.
Se Config Connector non è in grado di ottenere un lease per una determinata risorsa, l'output
di
kubectl describe
nella risorsa elenca lo 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 lease appropriate nella risorsa, come descritto nella sezione precedente.none
: i conflitti di gestione non vengono impediti.
Il valore predefinito è none
.
Nell'esempio seguente, un manifest per ComputeNetwork predefinito utilizza una
policy di gestione none
, il che significa che i conflitti non vengono impediti:
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 nome di risorsa Google Cloud , create nello stesso spazio dei nomi. Queste risorse creano conflitti che Config Connector non può gestire.