Stratégie de rapprochement


Avec la configuration déclarative, vous définissez l'état souhaité du système. Le système fonctionne alors en permanence pour demeurer le plus proche possible de cet état. Consultez la section Gestion déclarative des objets Kubernetes à l'aide des fichiers de configuration pour en savoir plus.

À l'aide de Config Connector, vous pouvez créer et mettre à jour des ressources dans n'importe quel ordre, quelles que soient les relations de dépendance. GKE déplace votre configuration déclarée vers la cohérence à terme avec l'état souhaité.

Par exemple, si vous créez un PubSubSubscription avant le PubSubTopic correspondant, Config Connector attend que le sujet soit créé avant de créer l'abonnement associé.

La durée de votre installation de Config Connector varie selon le nombre et les types de ressources qu'elle gère. Les modifications apportées à un cluster GKE sont généralement exécutées en quelques secondes. Cependant, le temps nécessaire à la création de ressources Google Cloud peut varier en fonction de leur type. Par exemple, la création d'un seul PubSubTopic prend quelques secondes. Les ressources Google Cloud n'atteignent pas la cohérence tant qu'elles n'ont pas été créées. Par exemple, lors de la création d'une SQLInstance et d'une SQLDatabase, le système est incohérent pendant une période de quelques minutes lors de la création de la base de données.

GKE et Config Connector rapprochent chaque ressource à chaque mise à jour ou après une période de gigue avec une moyenne basée sur l'intervalle par défaut préconfiguré. Vous pouvez trouver l'intervalle par défaut dans"Config Connector Default Average Reconcile Interval in seconds" (Intervalle de rapprochement moyen par défaut du connecteur de configuration en secondes) sur la page de référence de chaque ressource. Pour obtenir des liens vers chaque ressource, consultez Présentation des ressources. En cas d'erreur de rapprochement, Config Connector réessaie avec un intervalle exponentiel entre les tentatives, où l'intervalle maximal est de deux minutes. Vous pouvez afficher toutes les erreurs dans la section Événements d'une ressource donnée.

Configurer l'intervalle de rapprochement

À partir de la version 1.102 de Config Connector, vous pouvez configurer l'intervalle de rapprochement moyen pour les ressources gérées par Config Connector avec l'annotation cnrm.cloud.google.com/reconcile-interval-in-seconds. La valeur de l'annotation remplace la valeur par défaut "Config Connector Default Average Reconcile Interval in seconds" (Intervalle de rapprochement moyen par défaut du connecteur de configuration en secondes) de la page de référence de ressource. La valeur de l'annotation doit être un nombre entier non négatif représentant la durée en secondes. Si la valeur est définie sur 0, Config Connector cesse de lancer les rapprochements pour la ressource une fois que l'état UpToDate est atteint.

Par exemple, si vous souhaitez que Config Connector rapproche une ressource moins fréquemment pour éviter de rencontrer des problèmes de quota d'API Google Cloud sous-jacents, vous pouvez définir la valeur moyenne de l'intervalle de rapprochement sur une heure.

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

Si vous souhaitez que Config Connector rapproche une ressource plus fréquemment pour corriger les dérives plus rapidement, vous pouvez définir l'annotation avec une petite valeur.

Vous pouvez annoter toutes les ressources d'un type particulier qui partagent le même genre de version de groupe (GVK, Group Version Kind) avec le script suivant:

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

Remplacez les éléments suivants :

  • RESOURCE_KIND: genre de la ressource que vous souhaitez annoter.
  • RESOURCE_NAMESPACE: espace de noms contenant les ressources que vous souhaitez annoter.
  • RECONCILE_INTERVAL: intervalle de rapprochement en secondes.

Vous pouvez définir l'intervalle de rapprochement sur 0 pour désactiver la correction de la dérive pour une ressource, mais cela ne désactive pas l'activation de la ressource. Si vous modifiez la ressource Spec, elle sera de nouveau rapprochée.

La définition de l'intervalle de rapprochement sur 0 est une opération irréversible. Cela signifie que si vous redéfinissez la valeur sur une valeur non nulle, Config Connector ne rapprochera pas à nouveau la ressource.

Si vous souhaitez annuler l'intervalle de rapprochement de 0, vous disposez des options suivantes:

  • Modifiez les spécifications de la ressource avec la valeur de l'intervalle de rapprochement pour permettre de nouveaux rapprochements.
  • Abandonnez la ressource en définissant l'annotation cnrm.cloud.google.com/deletion-policy: "abandon", puis recréez-la avec une valeur d'intervalle de rapprochement autre que 0.

Les champs modifiables, mais illisibles, ne sont activés qu'en cas de modification

Certaines API exposent des champs qui ne sont pas lisibles, mais qui sont modifiables (par exemple, le mot de passe d'un utilisateur SQL). Étant donné qu'il est impossible de voir si ces champs ont été modifiés, les champs modifiables, mais illisibles, ne sont mis à jour que lorsque la ressource personnalisée est modifiée.

Les ressources ne sont pas recréées lors de la modification de champs immuables

Certains champs d'une ressource sont immuables et ne peuvent pas être rapprochés sans supprimer, puis recréer la ressource cible.

Dans ces situations, Config Connector émet un événement Kubernetes "UpdatedFailed" pour la ressource au lieu d'effectuer cette recréation. Vous devez ensuite supprimer et recréer la ressource.

Exemple d'événement :

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]