Estrategia de conciliación

Con la configuración declarativa, defines el estado deseado del sistema. El sistema funciona de forma constante para permanecer lo más cerca posible de este estado. Consulta Administración declarativa de objetos de Kubernetes con archivos de configuración para obtener más información.

Con Config Connector, puedes crear y actualizar recursos en cualquier orden, independientemente de las relaciones de dependencia. GKE mueve tu configuración declarada hacia la coherencia eventual con el estado deseado.

Por ejemplo, si creas un PubSubSubscription antes del PubSubTopic correspondiente, Config Connector espera hasta que se crea el tema antes de crear la suscripción asociada.

La duración de la instalación de Config Connector depende de la cantidad y los tipos de recursos que administra. Los cambios en un clúster de GKE suelen ejecutarse en segundos. Sin embargo, el tiempo para crear recursos deGoogle Cloud puede variar según el tipo de recurso. Por ejemplo, un solo PubSubTopic tarda segundos en crearse. Los recursos Google Cloudno alcanzan la coherencia hasta que se crean. Por ejemplo, cuando creas un SQLInstance y un SQLDatabase, el sistema es incoherente durante un período de minutos mientras se crea la base de datos.

GKE y Config Connector concilian cada recurso con cada actualización o después de un período de inestabilidad con un promedio basado en el intervalo predeterminado preconfigurado. Puedes encontrar el intervalo predeterminado en "Intervalo de conciliación promedio predeterminado de Config Connector en segundos" en la página de referencia de cada recurso. Para obtener vínculos a cada recurso, consulta la Descripción general de los recursos. Cuando hay un error en la conciliación, Config Connector vuelve a intentarlo con una retirada exponencial en la que la retirada máxima es de 2 minutos. Para los recursos administrados por controladores directos, puedes configurar este máximo con la anotación cnrm.cloud.google.com/backoff-max-delay-in-seconds. Puedes ver los errores en los eventos de un recurso determinado.

Configura el intervalo de conciliación

A partir de la versión 1.102 de Config Connector, puedes configurar el intervalo de conciliación promedio para los recursos que administra Config Connector con la anotación cnrm.cloud.google.com/reconcile-interval-in-seconds. El valor de la anotación reemplaza el valor predeterminado de "Config Connector Default Average Reconcile Interval In Seconds" de la página de referencia de recursos. El valor de la anotación debe ser un número entero no negativo que represente el tiempo en segundos. Si el valor se establece en 0, Config Connector deja de iniciar conciliaciones para el recurso una vez que alcanza el estado UpToDate. Esta anotación controla la conciliación periódica después de que el recurso alcanza el estado UpToDate. La anotación no afecta los intervalos de reintento cuando falla la conciliación. Para obtener más información, consulta Configura la retirada exponencial para los errores de conciliación.

Por ejemplo, si quieres que Config Connector concilie un recurso con menos frecuencia para evitar problemas de cuota de la API de Google Cloud subyacente, puedes establecer el valor del intervalo de conciliación promedio en 1 hora.

cnrm.cloud.google.com/reconcile-interval-in-seconds: "3600"

Si deseas que Config Connector concilie un recurso con más frecuencia para corregir las desviaciones antes, puedes establecer la anotación con un valor pequeño.

Puedes anotar todos los recursos de un tipo en particular que comparta el mismo tipo de versión de grupo (GVK) con la siguiente secuencia de comandos:

#!/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"

Reemplaza lo siguiente:

  • RESOURCE_KIND: Es el tipo de recurso que deseas anotar.
  • RESOURCE_NAMESPACE: Es el espacio de nombres que contiene los recursos que deseas anotar.
  • RECONCILE_INTERVAL: Es el intervalo de conciliación en segundos.

Puedes establecer el intervalo de conciliación en 0 para inhabilitar la corrección de desvío de un recurso, pero no se inhabilita la ejecución de acciones del recurso. Si realizas cambios en el recurso Spec, este se volverá a conciliar.

Establecer el intervalo de conciliación en 0 es irreversible. Esto significa que cambiar el valor de nuevo a un número distinto de cero no hace que Config Connector vuelva a conciliar el recurso.

Si quieres revertir el intervalo de conciliación 0, tienes las siguientes opciones:

  • Modifica la especificación del recurso con el valor del intervalo de conciliación para habilitar conciliaciones nuevas.
  • Abandona el recurso configurando la anotación cnrm.cloud.google.com/deletion-policy: "abandon" y vuelve a crearlo con un valor de intervalo de conciliación distinto de 0.

Configura la retirada exponencial para los errores de conciliación

Cuando un recurso no se concilia, Config Connector vuelve a intentar la conciliación con la retirada exponencial. La demora comienza en 250 milisegundos y se duplica después de cada intento fallido (por ejemplo, 500 milisegundos, luego 1 segundo, luego 2 segundos), hasta un máximo predeterminado de 2 minutos.

La anotación cnrm.cloud.google.com/reconcile-interval-in-seconds controla la corrección de desvío periódica después de que un recurso alcanza el estado UpToDate. En la versión 1.160.0 y posteriores de Config Connector, puedes usar la anotación cnrm.cloud.google.com/backoff-max-delay-in-seconds para controlar el comportamiento de reintento cuando falla la conciliación. Establece la anotación en uno de los siguientes valores:

  • Un número entero positivo ("1" o mayor): Establece el retraso máximo, en segundos, entre los reintentos. Por ejemplo, "600" limita el intervalo de reintentos a 10 minutos, y "3600" lo limita a 1 hora.
  • "0": Detiene los reintentos automáticos después de una conciliación fallida. El recurso permanece en un estado de error hasta que un cambio activa la conciliación, por ejemplo, una actualización de spec, metadata.labels, metadata.annotations o un recurso al que se hace referencia o Secret.

Por ejemplo, para limitar los intervalos de reintentos a 30 minutos y reducir el consumo de la cuota de la API Google Cloud en los recursos con errores, agrega la siguiente anotación:

metadata:
  annotations:
    cnrm.cloud.google.com/backoff-max-delay-in-seconds: "1800"

Para detener los reintentos automáticos de errores de conciliación hasta que actualices el recurso, agrega la siguiente anotación:

metadata:
  annotations:
    cnrm.cloud.google.com/backoff-max-delay-in-seconds: "0"

Los campos mutables, pero ilegibles, se activan solo sobre el cambio

Algunas APIs exponen campos que no se pueden leer, pero que son mutables (por ejemplo, la contraseña de un usuario de SQL). Debido a la incapacidad de ver si se modificaron estos campos, los campos mutables, pero no legibles, se actualizan solo cuando se modifica el recurso personalizado.

Los recursos no se vuelven a crear cuando se modifican los campos inmutables

Algunos campos de un recurso son inmutables y no se pueden conciliar sin borrar y, luego, volver a crear el recurso objetivo.

En estas situaciones, Config Connector emite un evento de Kubernetes "UpdatedFailed" para el recurso en lugar de realizar esta recreación. Luego, debes borrar y volver a crear el recurso.

Ejemplo de evento:

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]