Gestione dei conflitti con più risorse Config Connector

Questa pagina descrive il modo in cui Config Connector gestisce i conflitti. Si possono verificare conflitti quando la stessa risorsa è gestita da più risorse.

Config Connector gestisce o acquisisce risorse mappando la combinazione di nome della risorsa Kubernetes, annotazione container e, se applicabile, area geografica o località. Nel caso più semplice, organizzi le risorse con i progetti di Google Cloud.

Google Cloud supporta livelli aggiuntivi di gerarchia oltre ai progetti: cartelle, progetti e organizzazioni. Puoi mappare le risorse a cartelle, progetti e organizzazioni con un'annotazione. Quando crei una risorsa senza 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 solo la risorsa Google Cloud corrispondente se è in grado di ottenere un lease sulla risorsa Google Cloud e la prevenzione dei conflitti è attivata.

I lease hanno come ambito lo spazio dei nomi. Per ottenere un lease con ambito 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 univoco è ciò che viene utilizzato per impostare l'elemento cnrm-lease-holder-id. Per visualizzare la mappatura dello spazio dei nomi al valore cnrm-lease-holder-id, puoi guardare il ConfigMap namespace-id nello spazio dei nomi cnrm-system.
  2. cnrm-lease-expiration: una data di scadenza espressa nel tempo Unix.

Config Connector può aggiornare questi valori se si verifica una delle seguenti condizioni:

  • Il valore di cnrm-lease-holder-id corrisponde all'ID univoco globale dello spazio dei nomi.
  • Il valore cnrm-lease-holder-id è vuoto o non esiste.
  • Il valore cnrm-lease-expiration è nel passato.

Quando un'istanza di Config Connector ottiene un lease di una risorsa, la durata di scadenza è impostata su 40 minuti nel futuro. La stessa istanza di Config Connector conserva la gestione finché la risorsa si trova nello spazio dei nomi. Config Connector estende la scadenza di 40 minuti quando rimangono meno di 20 minuti.

Se Config Connector non è in grado di ottenere un lease su una determinata risorsa, l'output di kubectl describe nella risorsa elenca uno stato ManagementConflict.

Modifica della 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 impediti a livello di risorsa, salvando le etichette di leasing appropriate nella risorsa, come descritto nella sezione precedente.
  • none: i conflitti di gestione non sono impedito.

Il valore predefinito è none.

Nell'esempio seguente, un manifest per ComputeNetwork predefinito utilizza un criterio di gestione none, il che significa che i conflitti non sono bloccati:

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 stai gestire 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 non è possibile gestire in Config Connector.