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: