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 a 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. As mudanças em um cluster do GKE
geralmente são executadas em segundos. No entanto, o tempo para criar recursos doGoogle Cloud pode variar de acordo com o tipo de recurso. Por
exemplo, uma única PubSubTopic leva segundos para ser criada. Os recursos do Google Cloud
não alcançam consistência até serem criados. Por exemplo, ao
criar um SQLInstance e um 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 com cada
atualização ou após um período de instabilidade com uma média baseada no intervalo padrão
pré-configurado. O intervalo padrão está em "Intervalo médio de reconciliação padrão do Config Connector em segundos" na página de referência de cada recurso.
Para links de cada recurso, consulte a Visão geral de recursos.
Quando há um
erro na reconciliação, o Config Connector tenta novamente com espera exponencial, em que
a espera máxima é de 2 minutos. Para recursos gerenciados por
controladores diretos, é possível configurar
esse máximo usando a
anotação cnrm.cloud.google.com/backoff-max-delay-in-seconds. É possível ver os erros nos
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 "Intervalo médio de reconciliação padrão do Config Connector em segundos" da página de referência de recursos.
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 vai parar de iniciar reconciliações para o recurso quando ele atingir o status UpToDate. Essa anotação controla a reconciliação periódica depois que o recurso atinge o status UpToDate. A anotação não afeta os intervalos de nova tentativa quando a reconciliação falha. Para mais informações, consulte Como configurar a espera exponencial para erros de reconciliação.
Por exemplo, se você quiser que o Config Connector reconcilie um recurso com menos frequência para evitar problemas de Google Cloud 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 reconcilie 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 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 do deslocamento de um recurso, mas isso não desativa a atuação do recurso. 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 mudar 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, use 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.
Como configurar a espera exponencial para erros de reconciliação
Quando um recurso não é reconciliado, o Config Connector tenta novamente usando a espera exponencial. O atraso começa em 250 milissegundos e dobra após cada tentativa com falha (por exemplo, 500 milissegundos, depois 1 segundo, depois 2 segundos), até um máximo padrão de 2 minutos.
A anotação cnrm.cloud.google.com/reconcile-interval-in-seconds controla a correção periódica do deslocamento depois que um recurso atinge o status UpToDate. No Config Connector versão 1.160.0 e mais recentes, é possível usar a anotação cnrm.cloud.google.com/backoff-max-delay-in-seconds para controlar o comportamento de nova tentativa quando a reconciliação falha. Defina a anotação como um dos seguintes valores:
- Um número inteiro positivo (
"1"ou maior): define o atraso máximo, em segundos, entre as novas tentativas. Por exemplo,"600"limita o intervalo de repetição a 10 minutos, e"3600"limita a 1 hora. "0": interrompe as novas tentativas automáticas após uma reconciliação com falha. O recurso permanece em um estado de falha até que uma mudança acione a reconciliação, por exemplo, uma atualização paraspec,metadata.labels,metadata.annotations, um recurso referenciado ouSecret.
Por exemplo, para limitar os intervalos de repetição em 30 minutos e reduzir o Google Cloud consumo de cota da API em recursos com falha, adicione a seguinte anotação:
metadata:
annotations:
cnrm.cloud.google.com/backoff-max-delay-in-seconds: "1800"
Para interromper as novas tentativas automáticas em erros de reconciliação até que você atualize o recurso, adicione a seguinte anotação:
metadata:
annotations:
cnrm.cloud.google.com/backoff-max-delay-in-seconds: "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 ver se esses campos foram modificados, os campos mutáveis, mas ilegíveis, são atualizados apenas 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 reconciliados sem excluir e recriar o recurso de destino.
Nessas situações, o Config Connector emite um evento "UpdatedFailed" do Kubernetes para o recurso em vez de realizar 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]