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 Declarative management of Kubernetes objects using configuration files (Administración declarativa de objetos de Kubernetes mediante 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 la 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. Por lo general, los cambios en un clúster de GKE se ejecutan en segundos. Sin embargo, el tiempo para crear recursos de Google Cloud puede variar según el tipo de recurso. Por ejemplo, una sola PubSubTopic toma segundos en crearse. Los recursos de Google Cloud no alcanzan la coherencia hasta que se crean. Por ejemplo, cuando se crea un SQLInstance y un SQLDatabase, el sistema no es coherente 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 Jitter con un promedio de 10 minutos de forma predeterminada. Cuando hay un error en la conciliación, Config Connector vuelve a intentar con la retirada exponencial, en la que la retirada máxima es de dos minutos. Puedes ver cualquier error en los eventos de un recurso determinado.

Cómo configurar el intervalo de conciliación

A partir del Config Connector 1.102, puedes configurar el intervalo de conciliación promedio para los recursos administrados por Config Connector con la anotación cnrm.cloud.google.com/reconcile-interval-in-seconds. 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.

Por ejemplo, si desea que Config Connector concilie un recurso con menos frecuencia para evitar alcanzar los problemas de cuotas de la API subyacentes de Google Cloud, puede establecer el valor del intervalo de conciliación promedio en 1 hora.

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

Si desea que Config Connector concilie un recurso con mayor frecuencia para corregir desviaciones más rápido, puede establecer la anotación con un valor pequeño.

Puedes anotar todos los recursos de un tipo determinado que comparta el mismo tipo de versión grupal (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.

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

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

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

Algunos campos de un recurso son inmutables y no se pueden conciliar sin eliminar, y, luego, vuelven a crear el recurso de destino.

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]