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:

  1. 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 impostare cnrm-lease-holder-id. Per visualizzare la mappatura dello spazio dei nomi al valore cnrm-lease-holder-id, puoi esaminare il ConfigMap namespace-id nello spazio dei nomi cnrm-system.
  2. 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 a resource, 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.