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 sua configuração declarada em direção à consistência posterior com o 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. Alterações em uma instância do GKE
cluster costumam ser executados em segundos. No entanto, o tempo de criação
Os recursos do Google Cloud podem variar de acordo com o tipo de recurso. Por
exemplo, um único PubSubTopic
leva alguns segundos para ser criado. Google Cloud
os recursos não alcançam consistência até serem 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. O intervalo padrão pode ser encontrado em "Intervalo de reconciliação médio padrão do conector de configuração em segundos" na 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 de reconciliação médio 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 "Intervalo médio de reconciliação padrão do Config Connector em segundos" na página referência de recurso.
O valor da anotação precisa ser um número inteiro não negativo que represente 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 deslocamento de um recurso, mas isso não desativa a ativação dele. Se você fizer mudanças 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 você quiser reverter o intervalo de reconciliação 0, terá 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, o senha para um usuário do SQL). Devido à impossibilidade de saber se esses campos foram modificados, os campos mutáveis (mas ilegíveis) são atualizados somente quando o recurso personalizado é 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 fazer 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]