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: