Administra campos de forma externa
Cuando Config Connector crea un recurso Google Cloud, los campos que no se especifican en el campo spec adoptan valores de la API, a menos que no se puedan leer, como los campos que no están disponibles con una solicitud HTTP GET.
En este caso, el campo se considera administrado de forma externa porque Kubernetes no es la fuente de información para este valor.
Comportamiento con la aplicación del servidor
Si la aplicación del servidor está habilitada para el recurso, los valores de los campos administrados de forma externa en el objeto se actualizan de forma continua para que coincidan con el recurso subyacente Google Cloud.
Si un campo en la sección spec de la configuración aplicada tiene un valor, el campo no se administra de forma externa.
Si se quita el campo, se administra de forma externa.
Comportamiento sin la aplicación del servidor
Si la aplicación del servidor no está habilitada y el recurso usa el comportamiento de propagación Merge, Config Connector propaga los campos no especificados en el campo spec
del recurso con el valor leído de la Google Cloud API y aplica esos valores propagados
inicialmente.
Por ejemplo, supongamos que aplicas una configuración de recursos sin establecer un valor para el campo field2 en la sección spec:
spec:
field1: "value-1"
Si el valor del campo field2 es "api-value-1" en la Google Cloud
API, el recurso en el
servidor de la API
se propaga con ese valor:
# object in the api-server
spec:
field1: "value-1"
field2: "api-value-1" # populated by first reconciliation
Si el Google Cloud recurso se modifica directamente de modo que el field2
campo ahora sea "api-value-2", Config Connector revierte el Google Cloud
recurso al valor que se propagó inicialmente en el campo spec del 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"
Comportamiento de los campos de lista en la especificación de recursos
Debido a una limitación técnica en Config Connector, los campos de lista en la configuración de recursos no se pueden administrar de forma externa de forma predeterminada cuando el recurso usa el comportamiento de propagación Merge. Debido a esta limitación, Config Connector toma la propiedad de los campos de lista en el campo spec del recurso, incluso cuando no especificas el campo en la configuración de recursos original.
Cuando aplicas un campo spec de recursos, Config Connector lee el valor de
los campos de lista de la Google Cloud API y trata este valor inicial como
la fuente de información y el estado de destino. Si el valor de ese campo de lista cambia fuera de Config Connector, Config Connector intenta revertir el cambio, lo que podría no ser lo previsto.
Para evitar esta limitación y permitir que los campos de lista se administren de forma externa, usa la
cnrm.cloud.google.com/state-into-spec: absent anotación para ignorar
campos no especificados.
El valor de esta anotación se establece en absent de forma predeterminada para los recursos recién creados en Config Connector versión 1.123.1 y posteriores. Para ver si tu recurso
admite la anotación, consulta la página de referencia de recursos
correspondiente.
Para configurar este comportamiento, agrega la siguiente anotación al manifiesto de recursos:
metadata:
annotations:
cnrm.cloud.google.com/state-into-spec: absent
Cuando estableces el valor de la anotación state-into-spec en absent, Config Connector ignora los campos de lista que no se especifican en la configuración de recursos para que se puedan administrar de forma externa.
Advertencias
Los campos que administra Config Connector y que actualizan automáticamente los servicios externos pueden activar actualizaciones infinitas o errores de conciliación en la API subyacente. Estos problemas pueden ocurrir cuando la Google Cloud
API subyacente tiene ajuste de escala automático o campos actualizados automáticamente, y tu recurso usa la
cnrm.cloud.google.com/state-into-spec: merge anotación sin la aplicación del servidor.
Por ejemplo, si un recurso SQLInstance usa la
cnrm.cloud.google.com/state-into-spec: merge anotación, Config Connector
propaga el campo inicial spec.maintenanceVersion de la instancia en el campo spec del recurso de Kubernetes. Cuando Cloud SQL realiza más tarde una
actualización de mantenimiento automática en la instancia subyacente, Config Connector
intenta revertir la instancia al valor spec.maintenanceVersion anterior
almacenado en el campo spec. Debido a que Cloud SQL rechaza las disminuciones de versión de mantenimiento, la conciliación falla de forma repetida con un error UpdateFailed.
Para permitir que los servicios externos administren los campos actualizados automáticamente, haz lo siguiente:
- Omite el campo actualizado automáticamente de tu archivo de configuración YAML cuando lo apliques.
- Configura el recurso para ignorar los campos no especificados de una de las siguientes maneras:
- Establece la anotación
cnrm.cloud.google.com/state-into-spec: absenten el recurso o migra el recurso existente del comportamientoMergeal comportamientoAbsent. - Habilita la aplicación del servidor para el recurso.
- Establece la anotación