Administra conflictos con varios recursos de Config Connector

En esta página, se describe cómo Config Connector maneja los conflictos. Pueden ocurrir conflictos cuando varios recursos administran el mismo recurso.

Config Connector administra o adquiere recursos mediante la asignación de la combinación del nombre del recurso de Kubernetes, la anotación del contenedor y, si corresponde, la región o la ubicación. En el caso más simple, organizas los recursos con proyectos de Google Cloud.

Google Cloud admite niveles adicionales de jerarquía más allá de los proyectos: carpetas, proyectos y organizaciones. Puedes mapear recursos a tus carpetas, proyectos y organizaciones con una anotación. Cuando creas un recurso sin una anotación mediante Config Connector, el recurso se crea en el proyecto que comparte el espacio de nombres del recurso.

Es posible, pero no se recomienda, crear dos recursos de Config Connector en diferentes espacios de nombres que administren el mismo recurso de Google Cloud. Config Connector solo administra el recurso de Google Cloud correspondiente si puede obtener una asignación de tiempo en el recurso de Google Cloud y la prevención de conflictos está habilitada.

Las asignaciones de permisos tienen permisos de espacio de nombres. Para obtener una asignación de tiempo con alcance de espacio de nombres, Config Connector agrega dos etiquetas al recurso:

  1. cnrm-lease-holder-id: El controlador de configuración genera un ID único para cada espacio de nombres que administra un recurso con la prevención de conflictos habilitada. Este ID único es el que se usa para configurar cnrm-lease-holder-id. Para ver la asignación del espacio de nombres al valor cnrm-lease-holder-id, puedes ver el ConfigMap namespace-id en el espacio de nombres cnrm-system.
  2. cnrm-lease-expiration: Una hora de vencimiento en tiempo Unix de época.

Config Connector puede actualizar estos valores si se cumple alguna de las siguientes condiciones:

  • El valor de cnrm-lease-holder-id coincide con el ID único global del espacio de nombres.
  • El valor de cnrm-lease-holder-id está vacío o no existe.
  • El valor de cnrm-lease-expiration ya pasó.

Cuando una instancia de Config Connector obtiene una asignación de tiempo en un recurso, el tiempo de vencimiento se establece en 40 minutos en el futuro. La misma instancia de Config Connector conserva la administración siempre que el recurso esté en el espacio de nombres. Config Connector extiende el tiempo de vencimiento 40 minutos cuando quedan menos de 20 minutos.

Si Config Connector no puede obtener una asignación de tiempo en un recurso determinado, el resultado de kubectl describe en el recurso muestra un estado de ManagementConflict.

Modificación de la prevención de conflictos

Puedes controlar la prevención de conflictos si agregas la anotación cnrm.cloud.google.com/management-conflict-prevention-policy al recurso con uno de los siguientes valores:

  • resource: Se evitan conflictos de administración a nivel de recurso si se guardan las etiquetas de asignación de tiempo adecuadas en el recurso como se describe en la sección anterior.
  • none: No se evitan los conflictos de administración.

El valor predeterminado es none.

En el siguiente ejemplo, un manifiesto para la ComputeNetwork predeterminada usa una política de administración de none, lo que significa que no se evitan los conflictos:

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

Limitaciones

La prevención de conflictos tiene las siguientes limitaciones:

  • La prevención de conflictos no funciona para recursos que no admiten etiquetas. Incluso si cambias el valor de none a resource, aún no funciona.

  • Si administras recursos con el campo resourceID, puedes crear varios recursos con el mismo nombre de recurso de Google Cloud, creados en el mismo espacio de nombres. Estos recursos crean conflictos que Config Connector no puede administrar.