Administra los conflictos con varias instancias de Config Connector

En esta página, se describe cómo Config Connector maneja casos en los que el mismo recurso puede ser administrado por múltiples instancias.

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 administrará 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. Un ID globalmente único para el espacio de nombres (cnrm-lease-holder-id), y
  2. Un tiempo de vencimiento (cnrm-lease-expiration) 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 describió antes.
  • none: no se permiten conflictos de administración.

El valor predeterminado depende de si un recurso de Config Connector admite etiquetas.

Si el recurso admite etiquetas, el valor predeterminado es resource. Si el recurso no admite etiquetas, el valor predeterminado será none.

En el siguiente ejemplo, un manifiesto para ComputeNetwork predeterminado usa una política de gestión de none.

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