Gérer les champs en externe
Lorsque Config Connector crée une ressource sur Google Cloud, les champs non
spécifiés dans le champ spec prennent des valeurs de l'API, sauf s'ils ne sont pas
lisibles, par exemple les champs qui ne sont pas disponibles avec une requête HTTP GET.
Dans ce cas, le champ est considéré comme géré en externe , car Kubernetes n'est pas la source de référence pour cette valeur.
Comportement avec application côté serveur
Si l'application côté serveur est activée pour la ressource, les valeurs des champs gérés en externe dans l' objet sont mises à jour en continu pour correspondre à la ressource sous-jacente Google Cloud.
Si un champ de la section spec de la configuration appliquée a une valeur, il n'est pas géré en externe.
Si le champ est supprimé, il est géré en externe.
Comportement sans application côté serveur
Si l'application côté serveur n'est pas activée et que la ressource utilise le comportement de remplissage Merge, Config Connector remplit les champs non spécifiés dans le champ spec
de la ressource avec la valeur lue à partir de l'API Google Cloud et applique ces valeurs
initialement renseignées.
Supposons, par exemple, que vous appliquiez une configuration de ressource sans définir de valeur pour le champ field2 dans la section spec :
spec:
field1: "value-1"
Si la valeur du champ field2 est "api-value-1" dans l' Google Cloud
API, la ressource du
serveur d'API
est renseignée avec cette valeur :
# object in the api-server
spec:
field1: "value-1"
field2: "api-value-1" # populated by first reconciliation
Si la Google Cloud ressource est modifiée directement de sorte que le field2
champ soit désormais "api-value-2", Config Connector rétablit la Google Cloud
ressource à la valeur initialement renseignée dans le champ spec de la ressource
("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"
Comportement pour les champs de liste dans la spécification de la ressource
En raison d'une limitation technique dans Config Connector, les champs de liste de la configuration de votre ressource ne peuvent pas être gérés en externe par défaut lorsque la ressource utilise le comportement de remplissage Merge. En raison de cette limitation, Config Connector devient propriétaire des champs de liste dans le champ spec de la ressource, même si vous ne spécifiez pas le champ dans la configuration de votre ressource d'origine.
Lorsque vous appliquez un champ spec de ressource, Config Connector lit la valeur des
champs de liste à partir de l' Google Cloud API et traite cette valeur initiale comme
source de référence et état cible. Si la valeur de ce champ de liste change en dehors de Config Connector, Config Connector tente d'annuler la modification, ce qui n'est peut-être pas souhaité.
Pour contourner cette limitation et permettre la gestion externe des champs de liste, utilisez l'
cnrm.cloud.google.com/state-into-spec: absent annotation pour ignorer
les champs non spécifiés.
La valeur de cette annotation est définie sur absent par défaut pour les ressources nouvellement créées dans Config Connector version 1.123.1 et ultérieures. Pour vérifier si votre ressource
est compatible avec l'annotation, consultez la page de référence de la ressource
correspondante.
Pour configurer ce comportement, ajoutez l'annotation suivante au fichier manifeste de votre ressource :
metadata:
annotations:
cnrm.cloud.google.com/state-into-spec: absent
Lorsque vous définissez la valeur de l'annotation state-into-spec sur absent, Config Connector ignore les champs de liste qui ne sont pas spécifiés dans la configuration de votre ressource afin qu'ils puissent être gérés en externe.
Mises en garde
Les champs gérés par Config Connector et mis à jour automatiquement par des services externes peuvent déclencher des mises à jour sans fin ou des erreurs de rapprochement sur l'API sous-jacente. Ces problèmes peuvent se produire lorsque l'API sous-jacente Google Cloud
comporte des champs d'autoscaling ou mis à jour automatiquement, et que votre ressource utilise l'
cnrm.cloud.google.com/state-into-spec: merge annotation sans application côté serveur.
Par exemple, si une ressource SQLInstance utilise l'
cnrm.cloud.google.com/state-into-spec: merge annotation, Config Connector
renseigne le champ initial de l'instance spec.maintenanceVersion dans le champ
de la ressource Kubernetes spec. Lorsque Cloud SQL effectue ultérieurement une
mise à jour de maintenance automatique sur l'instance sous-jacente, Config Connector
tente de rétablir l'ancienne valeur spec.maintenanceVersion stockée dans le champ spec. Étant donné que Cloud SQL refuse les rétrogradations de version de maintenance, le rapprochement échoue à plusieurs reprises avec une erreur UpdateFailed.
Pour permettre aux services externes de gérer les champs mis à jour automatiquement, procédez comme suit :
- Omettez le champ mis à jour automatiquement de votre fichier de configuration YAML lorsque vous l'appliquez.
- Configurez la ressource pour qu'elle ignore les champs non spécifiés en procédant de l'une des manières suivantes :
- Définissez l'annotation
cnrm.cloud.google.com/state-into-spec: absentsur la ressource ou migrez la ressource existante du comportementMergevers le comportementAbsent. - Activez l'application côté serveur pour la ressource.
- Définissez l'annotation