Administra los conflictos con varios recursos de Config Connector


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

Config Connector administra o adquiere recursos cuando mapea 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, organiza los recursos con los proyectos de Google Cloud.

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

Las asignaciones tienen un límite de espacio de nombres. Para obtener una asignación de tiempo de espacio de nombres limitada, 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 consultar el ConfigMap namespace-id en el espacio de nombres cnrm-system.
  2. cnrm-lease-expiration: Un tiempo de vencimiento en el tiempo de inicio 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 globalmente único del espacio de nombres.
  • El valor de cnrm-lease-holder-id está vacío o no existe.
  • El valor de cnrm-lease-expiration está en el pasado.

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

Si Config Connector no puede obtener una asignación de tiempo en un recurso dado, la salida de kubectl describe en el recurso mostrará un estado de ManagementConflict.

Modifica 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: los conflictos de gestión se evitan a nivel de recurso cuando se guardan las etiquetas de asignación de tiempo apropiadas en el recurso como se describe en la sección anterior.
  • none: no se permiten conflictos de administración.

El valor predeterminado es none.

En el siguiente ejemplo, un manifiesto para ComputeNetwork predeterminado 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 los recursos que no admiten etiquetas. Incluso si cambias el valor de none a resource, no funcionará.

  • 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.