Gestionar conflictos con varios recursos de Config Connector


En esta página se describe cómo gestiona los conflictos Config Connector. Los conflictos pueden producirse cuando varios recursos gestionan el mismo recurso.

Config Connector gestiona o adquiere recursos asignando la combinación del nombre del recurso de Kubernetes, la anotación del contenedor y, si procede, la región o la ubicación. En el caso más sencillo, puedes organizar tus recursos con Google Cloud proyectos.

Google Cloud admite niveles de jerarquía adicionales más allá de los proyectos: carpetas, proyectos y organizaciones. Puedes asignar 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 recomendable, crear dos recursos de Config Connector en espacios de nombres diferentes que gestionen el mismo recurso de Google Cloud . Config Connector solo gestiona el Google Cloud recurso Google Cloud correspondiente si puede obtener una concesión del recurso y la prevención de conflictos está habilitada.

Los arrendamientos tienen un ámbito de espacio de nombres. Para obtener un arrendamiento centrado en un espacio de nombres, Config Connector añade dos etiquetas al recurso:

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

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 es una fecha pasada.

Cuando una instancia de Config Connector obtiene un arrendamiento de un recurso, el tiempo de vencimiento se establece en 40 minutos en el futuro. La misma instancia de Config Connector conserva la gestión mientras el recurso esté en el espacio de nombres. Config Connector amplía el tiempo de vencimiento en 40 minutos cuando quedan menos de 20 minutos.

Si Config Connector no puede obtener un arrendamiento de un recurso determinado, la salida de kubectl describe en el recurso muestra el estado ManagementConflict.

Modificar la prevención de conflictos

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

  • resource: los conflictos de gestión se evitan a nivel de recursos guardando las etiquetas de arrendamiento adecuadas en el recurso, tal como se describe en la sección anterior.
  • none: no se evitan los conflictos de gestión.

El valor predeterminado es none.

En el siguiente ejemplo, un manifiesto de ComputeNetwork predeterminado usa una política de gestión 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 con los recursos que no admiten etiquetas. Aunque cambies el valor de none a resource, sigue sin funcionar.

  • Si estás gestionando recursos con el campo resourceID, puedes crear varios recursos con el mismo Google Cloud nombre de recurso Google Cloud en el mismo espacio de nombres. Estos recursos crean conflictos que Config Connector no puede gestionar.