Gerir conflitos com vários recursos do Config Connector
Esta página descreve como o Config Connector processa conflitos. Podem ocorrer conflitos quando o mesmo recurso é gerido por vários recursos.
O Config Connector gere ou adquire recursos ao mapear a combinação do nome do recurso do Kubernetes, da anotação do contentor e, se aplicável, da região ou da localização. No caso mais simples, organiza os seus recursos com Google Cloud projetos.
Google Cloud suporta níveis adicionais de hierarquia além dos projetos: pastas, projetos e organizações. Pode mapear recursos para as suas pastas, projetos e organizações com uma anotação. Quando cria um recurso sem uma anotação através do Config Connector, o recurso é criado no projeto que partilha o espaço de nomes do recurso.
É possível, mas não recomendado, criar dois recursos do Config Connector em espaços de nomes diferentes que gerem o mesmo recurso Google Cloud . O Config Connector só gere o recurso Google Cloud correspondente se conseguir obter um contrato de arrendamento no recurso Google Cloud e a prevenção de conflitos estiver ativada.
As concessões têm âmbito do espaço de nomes. Para obter uma concessão com âmbito de espaço de nomes, o Config Connector adiciona duas etiquetas ao recurso:
cnrm-lease-holder-id
: o Config Controller gera um ID exclusivo para cada espaço de nomes que gere um recurso com a prevenção de conflitos ativada. Este ID único é o que é usado para definircnrm-lease-holder-id
. Para ver o mapeamento do espaço de nomes para o valorcnrm-lease-holder-id
, pode consultar onamespace-id
ConfigMap no espaço de nomescnrm-system
.cnrm-lease-expiration
: uma hora de validade no tempo de época Unix.
O Config Connector consegue atualizar estes valores se qualquer uma das seguintes condições for verdadeira:
- O valor de
cnrm-lease-holder-id
corresponde ao ID globalmente único do espaço de nomes. - O valor de
cnrm-lease-holder-id
está vazio ou não existe. - O valor de
cnrm-lease-expiration
está no passado.
Quando uma instância do Config Connector obtém uma concessão num recurso, a hora de expiração é definida para 40 minutos no futuro. A mesma instância do Config Connector mantém a gestão desde que o recurso esteja no espaço de nomes. O Config Connector prolonga o tempo de expiração em 40 minutos quando restam menos de 20 minutos.
Se o Config Connector não conseguir obter uma concessão num determinado recurso, o resultado de kubectl describe
no recurso apresenta o estado ManagementConflict
.
Modificar a prevenção de conflitos
Pode controlar a prevenção de conflitos adicionando a anotação cnrm.cloud.google.com/management-conflict-prevention-policy
ao recurso com um dos seguintes valores:
resource
: os conflitos de gestão são evitados ao nível do recurso guardando as etiquetas de concessão adequadas no recurso, conforme descrito na secção anterior.none
: os conflitos de gestão não são evitados.
O valor predefinido é none
.
No exemplo seguinte, um manifesto para a ComputeNetwork predefinida usa uma política de gestão de none
, o que significa que os conflitos não são evitados:
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
Limitações
A prevenção de conflitos tem as seguintes limitações:
A prevenção de conflitos não funciona para recursos que não suportam etiquetas. Mesmo que altere o valor de
none
pararesource
, continua a não funcionar.Se estiver a gerir recursos com o campo resourceID pode criar vários recursos com o mesmo Google Cloud nome do recurso, criados no mesmo espaço de nomes. Estes recursos criam conflitos que o Config Connector não consegue gerir.