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:

  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 univoco viene utilizzato per impostare cnrm-lease-holder-id. Per visualizzare il mapping dello spazio dei nomi al valore cnrm-lease-holder-id, puoi esaminare l'oggetto ConfigMap namespace-id nello spazio dei nomi cnrm-system.
  2. 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 a resource, 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.