Gerenciar campos externamente
Quando o Config Connector cria um recurso em Google Cloud, os campos não especificados no campo spec assumem valores da API, a menos que não sejam legíveis, como campos que não estão disponíveis com uma solicitação GET HTTP.
Nesse caso, o campo é considerado gerenciado externamente porque o Kubernetes não é a fonte da verdade para esse valor.
Comportamento com a aplicação do lado do servidor
Se a aplicação do lado do servidor estiver ativada para o recurso, os valores dos campos gerenciados externamente no objeto serão atualizados continuamente para corresponder ao Google Cloud recurso subjacente.
Se um campo na seção spec da configuração aplicada tiver um valor, ele não será gerenciado externamente.
Se o campo for removido, ele será gerenciado externamente.
Comportamento sem a aplicação no lado do servidor
Se a aplicação no lado do servidor não estiver ativada e o recurso usar o Merge comportamento de preenchimento, o Config Connector vai preencher os campos não especificados no campo spec
do recurso com o valor lido da Google Cloud API e aplicar esses valores preenchidos
inicialmente.
Por exemplo, suponha que você aplique uma configuração de recurso sem definir um valor para o campo field2 na seção spec:
spec:
field1: "value-1"
Se o valor do campo field2 for "api-value-1" na Google Cloud
API, o recurso no
servidor de API
será preenchido com esse valor:
# object in the api-server
spec:
field1: "value-1"
field2: "api-value-1" # populated by first reconciliation
Se o Google Cloud recurso for modificado diretamente para que o field2
campo seja "api-value-2", o Config Connector vai reverter o Google Cloud
recurso para o valor que foi preenchido inicialmente no campo spec do recurso
("api-value-1"):
# object in the api-server
spec:
field1: "value-1"
# still the originally populated value; overrides the external value
field2: "api-value-1"
Comportamento para campos de lista na especificação de recursos
Devido a uma limitação técnica no Config Connector, os campos de lista na configuração de recursos não podem ser gerenciados externamente por padrão quando o recurso usa o comportamento de preenchimento Merge. Devido a essa limitação, o Config Connector assume a propriedade dos campos de lista no campo spec do recurso, mesmo quando você não especifica o campo na configuração original do recurso.
Ao aplicar um campo spec de recurso, o Config Connector lê o valor dos
campos de lista da Google Cloud API e trata esse valor inicial como
a fonte da verdade e o estado de destino. Se o valor nesse campo de lista mudar fora do Config Connector, ele vai tentar reverter a mudança, o que pode não ser intencional.
Para contornar essa limitação e permitir que os campos de lista sejam gerenciados externamente, use a
cnrm.cloud.google.com/state-into-spec: absent anotação para ignorar
campos não especificados.
O valor dessa anotação é definido como absent por padrão para recursos recém-criados no Config Connector versão 1.123.1 e mais recentes. Para saber se o recurso
oferece suporte à anotação, consulte a página de referência do recurso correspondente.
Para configurar esse comportamento, adicione a seguinte anotação ao manifesto de recursos:
metadata:
annotations:
cnrm.cloud.google.com/state-into-spec: absent
Quando você define o valor da anotação state-into-spec como absent, o Config Connector ignora os campos de lista que não estão especificados na configuração de recursos para que possam ser gerenciados externamente.
Advertências
Os campos gerenciados pelo Config Connector e atualizados automaticamente por serviços externos podem acionar atualizações infinitas ou erros de reconciliação na API subjacente. Esses problemas podem ocorrer quando a API subjacente Google Cloud
tem escalonamento automático ou campos atualizados automaticamente e o recurso usa a
cnrm.cloud.google.com/state-into-spec: merge anotação sem a aplicação do lado do servidor.
Por exemplo, se um recurso SQLInstance usar a
cnrm.cloud.google.com/state-into-spec: merge anotação, o Config Connector
vai preencher o campo inicial da instância spec.maintenanceVersion no campo
do recurso do Kubernetes spec. Quando o Cloud SQL realizar uma
atualização de manutenção automática na instância subjacente, o Config Connector
vai tentar reverter a instância para o valor spec.maintenanceVersion mais antigo
armazenado no campo spec. Como o Cloud SQL rejeita downgrades da versão de manutenção, a reconciliação falha repetidamente com um erro UpdateFailed.
Para permitir que serviços externos gerenciem campos atualizados automaticamente, faça o seguinte:
- Omita o campo atualizado automaticamente do arquivo de configuração YAML ao aplicá-lo.
- Configure o recurso para ignorar campos não especificados fazendo uma destas ações:
- Defina a anotação
cnrm.cloud.google.com/state-into-spec: absentno recurso ou migre o recurso atual do comportamentoMergepara o comportamentoAbsent. - Ative a aplicação no lado do servidor para o recurso.
- Defina a anotação