Estratégia de reconciliação


Com a configuração declarativa, você define o estado pretendido do sistema. O sistema trabalha constantemente para permanecer o mais próximo possível desse estado. Consulte Gerenciamento declarativo de objetos do Kubernetes usando arquivos de configuração para mais informações.

Com o Config Connector, crie e atualize recursos em qualquer ordem, independentemente dos relacionamentos de dependência. O GKE move as instâncias na configuração consistência posterior ao estado desejado.

Por exemplo, se você criar um PubSubSubscription antes do PubSubTopic correspondente, o Config Connector aguardará até que o tópico seja criado antes de criar a assinatura associada.

A duração da instalação do Config Connector continua inconsistente e depende do número e dos tipos de recursos que ele gerencia. As mudanças em um cluster do GKE geralmente são executadas em segundos. No entanto, o tempo para criar recursos do Google Cloud pode variar de acordo com o tipo de recurso. Para Por exemplo, uma única PubSubTopic leva segundos para ser criada. Os recursos do Google Cloud não atingem a consistência até que sejam criados. Por exemplo, quando criando uma SQLInstance e uma SQLDatabase, o sistema fica inconsistente para uma de minutos durante a criação do banco de dados.

O GKE e o Config Connector reconciliam cada recurso com cada ou após um período de instabilidade com uma média baseada no padrão pré-configurado intervalo. É possível encontrar o intervalo padrão em "Média padrão do Config Connector" Reconciliar intervalo em segundos" da página de referência de cada recurso. Para links de cada recurso, consulte a Visão geral dos recursos. Quando há um erro na reconciliação, o Config Connector faz uma nova tentativa com espera exponencial em que a espera máxima é de dois minutos. É possível consultar os erros no Eventos de um determinado recurso.

Como configurar o intervalo de reconciliação

A partir do Config Connector 1.102, é possível configurar o intervalo médio de reconciliação para recursos gerenciados pelo Config Connector com a anotação cnrm.cloud.google.com/reconcile-interval-in-seconds. O valor da anotação substitui o valor padrão de "Média padrão do conector de configuração" Reconciliar intervalo em segundos" da referência de recursos página. O valor da anotação precisa ser um número inteiro não negativo que representa o tempo em segundos. Se o valor for definido como 0, o Config Connector deixará de iniciar reconciliações para o recurso quando ele atingir o status UpToDate.

Por exemplo, se você quiser que o Config Connector reconcilie um recurso com menos frequência para evitar atingir o Google Cloud subjacente Problemas de cota da API, defina o valor médio do intervalo de reconciliação como 1 hora.

cnrm.cloud.google.com/reconcile-interval-in-seconds: "3600"

Se você quiser que o Config Connector concilie um recurso com mais frequência para corrigir desvios mais rapidamente, defina a anotação com um valor pequeno.

É possível anotar todos os recursos de um tipo específico que compartilham o mesmo tipo de versão do grupo (GVK) com o seguinte script:

#!/bin/bash

KIND=RESOURCE_KIND
NAMESPACE=RESOURCE_NAMESPACE
ANNOTATION_KEY="cnrm.cloud.google.com/reconcile-interval-in-seconds"
ANNOTATION_VALUE=RECONCILE_INTERVAL

kubectl annotate --overwrite --all ${KIND} ${ANNOTATION_KEY}=${ANNOTATION_VALUE} -n ${NAMESPACE}
echo "Annotation added to all ${KIND} RESOURCE"

Substitua:

  • RESOURCE_KIND: o tipo de recurso que você quer anotar.
  • RESOURCE_NAMESPACE: o namespace que contém os recursos que você quer anotar.
  • RECONCILE_INTERVAL: o intervalo de reconciliação em segundos.

É possível definir o intervalo de reconciliação como 0 para desativar a correção de deriva de um recurso, mas isso não desativa a acionamento do recurso. Se você fizer alterações no recurso Spec, ele será reconciliado novamente.

Definir o intervalo de reconciliação como 0 é irreversível. Isso significa que alterar o valor de volta para um número diferente de zero não faz com que o Config Connector reconcilie o recurso novamente.

Se quiser reverter o intervalo de reconciliação "0", você terá as seguintes opções:

  • Modifique a especificação do recurso com o valor do intervalo de reconciliação para ativar novas reconciliações.
  • Abandonar o recurso definindo a anotação cnrm.cloud.google.com/deletion-policy: "abandon" e recriá-lo com um valor de intervalo de reconciliação diferente de 0.

Campos mutáveis (mas ilegíveis) são acionados somente quando há alterações

Algumas APIs expõem campos que não são legíveis, mas são mutáveis (por exemplo, a senha de um usuário do SQL). Devido à impossibilidade de ver se esses campos foram campos modificados, mutáveis, mas ilegíveis, são atualizados somente quando o recurso for modificado.

Os recursos não são recriados ao modificar campos imutáveis

Alguns campos em um recurso são imutáveis e não podem ser reconciliadas sem serem excluídos e recriados em seguida.

Nessas situações, o Config Connector emite uma mensagem "UpdatedFailed" Evento do Kubernetes para o recurso em vez de executar essa recriação. Em seguida, exclua e recrie o recurso.

Evento de exemplo:

Warning  UpdateFailed  37m (x643 over 15d)    computeinstance-controller  Update call failed: the desired mutation for the following field(s) is invalid: [bootDisk.0.InitializeParams.0.Image networkInterface.0.NetworkIp]