Gérer les conflits avec plusieurs ressources Config Connector


Cette page décrit comment Config Connector gère les conflits. Des conflits peuvent survenir lorsque la même ressource est gérée par plusieurs ressources.

Config Connector gère ou acquiert des ressources en mappant une combinaison du nom de la ressource Kubernetes, de l'annotation du conteneur et, le cas échéant, de la région ou du site. Dans le scénario le plus simple, vous organisez vos ressources avec les projets Google Cloud.

Google Cloud accepte des niveaux de hiérarchie supplémentaires au-delà des projets : dossiers, projets et organisations. Vous pouvez mapper des ressources à vos dossiers, projets et organisations avec une annotation. Lorsque vous créez une ressource sans annotation à l'aide de Config Connector, celle-ci est créée dans le projet qui partage son espace de noms.

Il est possible, mais déconseillé, de créer deux ressources Config Connector dans des espaces de noms différents qui gèrent la même ressource Google Cloud. Config Connector ne gère la ressource Google Cloud correspondante que s'il parvient à obtenir un bail pour celle-ci et que la prévention des conflits est activée.

Les baux sont à l'échelle d'un espace de noms. Pour obtenir un bail à l'échelle d'un espace de noms, Config Connector ajoute deux libellés à la ressource :

  1. cnrm-lease-holder-id : Config Controller génère un ID unique pour chaque espace de noms qui gère une ressource avec la prévention des conflits activée. Cet ID unique est utilisé pour définir cnrm-lease-holder-id. Pour afficher le mappage de l'espace de noms avec la valeur cnrm-lease-holder-id, vous pouvez consulter le ConfigMap namespace-id dans l'espace de noms cnrm-system.
  2. cnrm-lease-expiration : délai d'expiration dans une époque Unix.

Config Connector peut mettre à jour ces valeurs si l'une des conditions suivantes est remplie :

  • La valeur cnrm-lease-holder-id correspond à l'ID unique de l'espace de noms.
  • La valeur cnrm-lease-holder-id est vide ou inexistante.
  • La valeur cnrm-lease-expiration est antérieure au moment actuel.

Lorsqu'une instance Config Connector obtient un bail pour une ressource, le délai d'expiration est défini sur 40 minutes dans le futur. La même instance Config Connector conserve la gestion tant que la ressource se trouve dans l'espace de noms. Config Connector prolonge le délai d'expiration de 40 minutes lorsqu'il reste moins de 20 minutes.

Si Config Connector ne parvient pas à obtenir un bail pour une ressource donnée, le résultat de kubectl describe pour la ressource affiche l'état ManagementConflict.

Modifier la prévention des conflits

Vous pouvez contrôler la prévention des conflits en ajoutant l'annotation cnrm.cloud.google.com/management-conflict-prevention-policy à la ressource avec l'une des valeurs suivantes :

  • resource : les conflits de gestion sont évités au niveau de la ressource en enregistrant les libellés de bail appropriés dans la ressource comme décrit dans la section précédente.
  • none : les conflits de gestion ne sont pas évités.

La valeur par défaut est none.

Dans l'exemple suivant, un fichier manifeste sur le réseau Compute par défaut utilise les règles de gestion none, ce qui signifie que les conflits ne sont pas évités :

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

Limites

La prévention des conflits présente les limites suivantes :

  • La prévention des conflits ne fonctionne pas pour les ressources qui ne sont pas compatibles avec les libellés. Même si vous remplacez la valeur none par resource, cela ne fonctionne toujours pas.

  • Si vous gérez des ressources avec le champ resourceID, vous pouvez créer plusieurs ressources portant le même nom de ressource Google Cloud, créées sous le même espace de noms. Ces ressources créent des conflits que Config Connector ne peut pas gérer.