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. Para mais informações, consulte Gerenciamento declarativo de objetos do Kubernetes usando arquivos de configuração.

Com o Config Connector, crie e atualize recursos em qualquer ordem, independentemente dos relacionamentos de dependência. O GKE move sua configuração declarada em direção à consistência posterior com o estado pretendido.

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 alterações em um cluster do GKE normalmente são executadas em segundos. No entanto, o tempo de criação dos recursos do Google Cloud pode variar de acordo com o tipo de recurso. Por exemplo, um único PubSubTopic leva segundos para ser criado. Os recursos do Google Cloud não alcançam consistência até serem criados. Por exemplo, ao criar uma SQLInstance e uma SQLDatabase, o sistema fica inconsistente por um período de minutos enquanto o banco de dados é criado.

O GKE e o Config Connector reconciliam cada recurso a cada atualização ou após um período de instabilidade com uma média baseada no intervalo padrão pré-configurado. É possível encontrar o intervalo padrão em "Média padrão do Config Connector reconciliando intervalo em segundos" na página de referência de cada recurso. Para acessar links de cada recurso, consulte a Visão geral do recurso. Quando há um erro na reconciliação, o Config Connector tenta novamente com a espera exponencial, em que a espera máxima é de dois minutos. É possível ver os erros nos Eventos de 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 de reconciliação do intervalo do Config Connector em segundos" da página Referência de recursos. O valor da anotação deve 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 problemas de cotas da API do Google Cloud, defina o valor médio do intervalo de reconciliação como uma hora.

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

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

É possível anotar todos os recursos de um tipo específico que compartilha o mesmo tipo de versão de grupo (GVK, na sigla em inglês) 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 desvio para um recurso, mas isso não desativa a atuação 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.

Para reverter o intervalo de reconciliação de 0, você tem as seguintes opções:

  • Modifique a especificação do recurso com o valor do intervalo de reconciliação para ativar novas reconciliações.
  • Abandone o recurso definindo a anotação cnrm.cloud.google.com/deletion-policy: "abandon" e recrie o recurso 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). Como não é possível conferir se esses campos foram modificados, os campos mutáveis, mas ilegíveis, serão atualizados somente quando o recurso personalizado 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 um evento "UpdatedFailed" do Kubernetes para o recurso em vez de executar a recriação. Em seguida, será preciso excluir e recriar 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]