Administra 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 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 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 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 tienen un límite de espacio de nombres. Para obtener una asignación de alcance con espacio de nombres, Config Connector agrega dos etiquetas al recurso:

  1. Un ID global único para el espacio de nombres (cnrm-lease-holder-id))
  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, siempre que 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 determinado, el resultado de kubectl describe en el recurso enumera 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: Se evitan los conflictos de administración a nivel de recursos si se guardan las etiquetas de asignación adecuadas en el recurso como se describe en la sección anterior.
  • 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 la red predeterminada de ComputeNetwork 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, no funcionará.

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