Estrategia de conciliación
Con la configuración declarativa, defines el estado deseado del sistema. El sistema trabaja constantemente para mantenerse lo más cerca posible de este estado. Para obtener más información, consulta el artículo sobre la gestión declarativa de objetos de Kubernetes mediante archivos de configuración.
Con Config Connector, puedes crear y actualizar recursos en cualquier orden, independientemente de las relaciones de dependencia. GKE mueve la configuración declarada hacia la coherencia final con el estado deseado.
Por ejemplo, si creas un PubSubSubscription
antes del PubSubTopic
correspondiente, Config Connector espera a que se cree el tema antes de crear la suscripción asociada.
El tiempo que tu instalación de Config Connector permanece incoherente depende del número y los tipos de recursos que gestione. Los cambios en un clúster de GKE suelen ejecutarse en segundos. Sin embargo, el tiempo necesario para crear recursosGoogle Cloud puede variar en función del tipo de recurso. Por ejemplo, se tarda unos segundos en crear un solo PubSubTopic
. Google Cloud
Los recursos no alcanzan la coherencia hasta que se crean. Por ejemplo, al crear un SQLInstance
y un SQLDatabase
, el sistema no es coherente durante unos minutos mientras se crea la base de datos.
GKE y Config Connector reconcilian cada recurso con cada actualización o después de un periodo de fluctuación con una media basada en el intervalo predeterminado preconfigurado. Puedes encontrar el intervalo predeterminado en "Config Connector Default Average Reconcile Interval In Seconds" (Intervalo de conciliación medio predeterminado de Config Connector) en la página de referencia de cada recurso. Para ver enlaces a cada recurso, consulta la descripción general de los recursos. Si se produce un error al reconciliar, Config Connector vuelve a intentarlo con un tiempo de espera exponencial, cuyo valor máximo es de dos minutos. Puede ver los errores en la sección Eventos de un recurso concreto.
Configurar el intervalo de conciliación
A partir de Config Connector 1.102, puedes configurar el intervalo de conciliación medio de los recursos gestionados por Config Connector con la anotación cnrm.cloud.google.com/reconcile-interval-in-seconds
. El valor de la anotación sobrescribe el valor predeterminado "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 es 0, Config Connector dejará de iniciar reconciliaciones para el recurso una vez que alcance el estado UpToDate.
Por ejemplo, si quieres que Config Connector concilie un recurso con menos frecuencia para evitar problemas con la Google Cloud cuota de la API subyacente, puedes definir el valor del intervalo de conciliación medio en 1 hora.
cnrm.cloud.google.com/reconcile-interval-in-seconds: "3600"
Si quiere que Config Connector concilie un recurso con más frecuencia para corregir las desviaciones antes, puede definir la anotación con un valor pequeño.
Puede anotar todos los recursos de un tipo concreto que compartan el mismo Group Version Kind (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"
Haz los cambios siguientes:
RESOURCE_KIND
: el tipo de recurso que quieres anotar.RESOURCE_NAMESPACE
: el espacio de nombres que contiene los recursos que quieres anotar.RECONCILE_INTERVAL
: el intervalo de conciliación en segundos.
Puede definir el intervalo de conciliación en 0 para inhabilitar la corrección de la deriva de un recurso, pero no se inhabilita la activación del recurso. Si haces cambios en el recurso Spec
, se volverá a conciliar.
Definir el intervalo de conciliación en 0 es irreversible. Esto significa que, si vuelve a cambiar el valor a un número distinto de cero, Config Connector no volverá a reconciliar el recurso.
Si quieres volver al 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 nuevas conciliaciones.
- Abandona el recurso definiendo la anotación
cnrm.cloud.google.com/deletion-policy: "abandon"
y vuelve a crear el recurso con un valor de intervalo de conciliación distinto de 0.
Los campos mutables, pero ilegibles, solo se activan cuando cambian
Algunas APIs exponen campos que no se pueden leer, pero que son mutables (por ejemplo, la contraseña de un usuario de SQL). Como no se puede saber si estos campos se han modificado, los campos mutables pero ilegibles solo se actualizan cuando se modifica el recurso personalizado.
Los recursos no se vuelven a crear al modificar campos inmutables
Algunos campos de un recurso son inmutables y no se pueden reconciliar sin eliminar y volver a crear el recurso de destino.
En estas situaciones, Config Connector emite un evento de Kubernetes "UpdatedFailed" para el recurso en lugar de volver a crearlo. Después, debes eliminar 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]