Ignorer les champs non spécifiés


Cette page décrit le comportement de remplissage par défaut des champs spec et la manière dont pour remplacer le comportement par défaut Merge par le comportement recommandé Absent Cette page peut ne pas être applicable si vous utilisez un CRD ajouté dans versions 1.114.0 et ultérieures, car ces CRD n'utilisent que le comportement Absent. Pour Consultez les CRD avec Merge pour connaître la liste des objets CRD compatibles avec Merge. l'assistance technique de cette page.

Champs spec qui remplissent les comportements

Lorsque Config Connector crée une ressource, les champs ne sont pas spécifiés dans le La spécification des ressources Kubernetes peut présenter deux comportements de remplissage par défaut différents: Absent et Merge.

Manquante

Absent est le comportement recommandé. Config Connector n'insère non spécifiés dans la spécification.

Pour les CRD ajoutées dans la version 1.114.0 et plus tard, le comportement de remplissage par défaut est Absent. C'est aussi le seul afflux de compatible avec les CRD. La valeur du paramètre L'annotation cnrm.cloud.google.com/state-into-spec est absent dans cette ressource RS.

Fusionner

Merge n'est pas pris en charge dans les objets CRD ajoutés à partir de la version 1.114.0. La Les champs spec utilisent les valeurs de l'API après un rapprochement réussi sauf si elles ne sont pas lisibles. Pour en savoir plus, consultez la section Gérer les champs en externe.

Pour les objets CRD compatibles avec la version de Config Connector 1.113.0 et les versions antérieures, le comportement de remplissage par défaut est Merge. Pour obtenir la liste des objets CRD Compatibilité avec Merge, consultez les CRD compatibles avec Merge de cette page. La valeur par défaut du paramètre L'annotation cnrm.cloud.google.com/state-into-spec est merge dans cette ressource RS. Vous pouvez également configurer le comportement de remplissage sur Absent après la les instructions de la section Passer le remplissage des champs non spécifiés dans caractéristiques.

Par défaut, dans ces RS de ressources, les champs qui n'ont pas été spécifiés dans votre le fichier YAML d'origine apparaît toujours dans la spécification de la RS. Cela signifie que lorsque vous exécutez kubectl get <resource kind> <resource name> -oyaml, de nombreux champs dans la spécification ne figurent pas dans votre fichier YAML appliqué.

Par exemple, supposons que le schéma CRD vous permet de spécifier deux champs nommés foo et bar dans la spécification, alors que le fichier YAML appliqué ne contient que foo:

spec:
  foo: "foo"

Vous remarquerez qu'un autre champ nommé bar apparaît dans la RS si le code YAML est appliqué. avec succès et que la ressource est UpToDate:

spec:
  foo: "foo"
  bar: "bar"

En raison de la complexité des interactions entre Config Connector et API Google Cloud, vous pouvez modifier ce comportement par défaut Remplir la spécification de ressource Kubernetes avec des champs non spécifiés.

Ignorer le remplissage des champs non spécifiés dans la spécification

Vous pouvez ignorer le remplissage des champs non spécifiés dans la spécification pour les objets CRD compatibles avec Config Connector version 1.113.0 et plus tôt de l'une des manières suivantes:

  • Configurez le forçage stateIntoSpec au niveau du cluster ou de l'espace de noms pour qu'il soit Absent
  • Spécifiez la valeur de l'annotation cnrm.cloud.google.com/state-into-spec comme absent pour la ressource.

Configurer le forçage stateIntoSpec au niveau du cluster ou de l'espace de noms

Lors de l'installation ou de la mise à jour de Config Connector, vous pouvez configurer le remplacement stateIntoSpec au niveau du cluster ou de l'espace de noms sur Absent dans la RS ConfigConnector ou ConfigConnectorContext.

spec:
  stateIntoSpec: Absent

Cela fait de Absent le comportement de remplissage par défaut des champs spec pour toutes les nouvelles ressources créées dans le cluster ou dans l'espace de noms lorsque vous ne spécifiez pas l'annotation cnrm.cloud.google.com/state-into-spec dans la nouvelle ressource des fichiers YAML. Cela signifie que Config Connector ne remplira pas les champs non spécifiés les spécifications Kubernetes correspondantes.

Le champ stateIntoSpec ne contient pas de valeur par défaut. Config Connector Déterminez le comportement de remplissage des champs spec en fonction de la valeur de la cnrm.cloud.google.com/state-into-spec et suit la logique ci-dessous pour déterminer la valeur de l'annotation:

  1. Utiliser la valeur de l'annotation cnrm.cloud.google.com/state-into-spec directement s'il est spécifié et valide.
  2. Si l'annotation n'est pas spécifiée, utilisez la valeur correspondante de l'attribut Champ stateIntoSpec dans la RS pour ConfigConnectorContext.
  3. Si la RS ConfigConnectorContext n'existe pas ou si le champ stateIntoSpec n'est pas spécifiée, utilisez la valeur correspondante du champ stateIntoSpec dans la RS ConfigConnector.
  4. Si la RS ConfigConnector n'existe pas ou si le champ stateIntoSpec est non spécifié, utilisez le comportement par défaut basé sur l'objet CRD décrit dans la section spec. champs qui renseignent les comportements.

Notez que les seuls CRD à comportement de remplissage ajoutés dans les versions 1.114.0 et plus tard suivre est Absent, quel que soit le cnrm.cloud.google.com/state-into-spec ou les champs stateIntoSpec dans la RS ConfigConnector ou RS ConfigConnectorContext.

Si vous avez déjà créé la ressource, mais que vous souhaitez modifier les champs spec de remplissage à Absent, vous devez:

  1. Assurez-vous que le forçage stateIntoSpec au niveau du cluster ou de l'espace de noms doit être Absent dans la RS ConfigConnector ou dans la RS ConfigConnectorContext.

  2. Abandonner et acquérir ressource. Assurez-vous que la configuration YAML utilisée pour l'acquisition ne dispose pas du rôle Annotation cnrm.cloud.google.com/state-into-spec.

Spécifier l'annotation cnrm.cloud.google.com/state-into-spec au niveau de la ressource

Lors de la création de votre fichier YAML, vous pouvez spécifier la valeur du paramètre Annotation cnrm.cloud.google.com/state-into-spec en tant que absent. Cette action est ignorée Insérer des champs non spécifiés dans la spécification de ressource Kubernetes:

metadata:
  annotations:
    cnrm.cloud.google.com/state-into-spec: absent

Si elle n'est pas spécifiée, la valeur par défaut de cette annotation est merge, ce qui signifie Config Connector remplit tous les champs non spécifiés dans la spécification. Cette annotation est immuables, ce qui signifie que vous ne pouvez pas mettre à jour la valeur d'annotation Ressource Config Connector.

Si vous avez déjà créé la ressource, mais que vous souhaitez modifier la valeur pour un comportement de remplissage différent, procédez comme suit:

  1. Modifier et ajouter une annotation cnrm.cloud.google.com/deletion-policy: abandon à la ressource Kubernetes existante pour vous assurer que la suppression à l'étape suivante supprimer la ressource Google Cloud sous-jacente.

  2. Supprimez la ressource du cluster Kubernetes.

  3. Ajouter l'annotation cnrm.cloud.google.com/state-into-spec: absent au fichier YAML de la ressource.

  4. (Facultatif) Supprimez cnrm.cloud.google.com/deletion-policy: abandon du YAML.

  5. Appliquez le fichier YAML mis à jour.

Pour mieux expliquer la différence introduite par cette annotation, supposons qu'il y ait une spécification avec le schéma suivant:

foo1: string
foo2: string
bars:
- bar:
    br1: string
    br2: string
barz:
  bz1: string
  bz2: string

Supposons également que vous ayez spécifié la spécification dans votre fichier YAML comme suit:

spec:
  foo1: "foo1"
  bars:
  - br1: "1_br1"
  - br1: "2_br1"
  barz:
    bz1: "bz1"

La spécification indiquée par défaut dans la ressource Kubernetes créée peut être la suivante:

spec:
  foo1: "foo1"
  foo2: "foo2"
  bars:
  - br1: "1_br1"
    br2: "1_br2"
  - br1: "2_br1"
    br2: "2_br2"
  barz:
    bz1: "bz1"
    bz2: "bz2"

Si vous définissez cnrm.cloud.google.com/state-into-spec: absent, la spécification finale de la ressource Kubernetes créée sera:

spec:
  foo1: "foo1"
  bars:
  - br1: "1_br1"
  - br1: "2_br1"
  barz:
    bz1: "bz1"

Dans quel contexte utiliser cnrm.cloud.google.com/state-into-spec: absent ?

Dans la plupart des cas, vous voudrez définir cnrm.cloud.google.com/state-into-spec: absent pour obtenir le remplissage Absent pour les champs spec. Voici les scénarios les plus courants qui peuvent vous être utiles. du comportement de remplissage Absent.

Gérer les champs non spécifiés dans une liste en externe

Config Connector traite tous les champs de liste dans la spécification de ressources Kubernetes comme atomiques . Par défaut, la modification apportée à un sous-champ de la liste en dehors de Config Connector sera annulée par Config Connector. Cependant, vous Cette annotation permet à Config Connector d'annuler la gestion des sous-champs de la liste. Pour Pour en savoir plus, consultez la section Comportement des champs de liste dans les ressources caractéristiques.

Résoudre les conflits entre les outils de gestion des configurations et Config Connector

Si vous utilisez des outils de gestion de configuration tels que Config Sync ou Argo CD, vous remarquerez peut-être une incohérence entre la configuration et Config Connector. Par exemple, le kit KNV2005 aïe !" expliqué dans le guide de dépannage. La cause racine de ces types de problèmes est car:

  1. Config Connector insère les valeurs non spécifiées par défaut dans la liste des spec.bars[0].br2, en est un exemple.
  2. Les outils de gestion de la configuration et Config Connector traitent les champs de liste comme atomique, le spec.bars[0].br2 ajouté est donc traité comme une dérive par et sera supprimé pour corriger le drift.

Pour résoudre ces problèmes, vous pouvez définir cnrm.cloud.google.com/state-into-spec: absent afin que Config Connector n'ajoute aucun champ non spécifié spec.bars[0].br2 dans la spécification.

Résoudre les problèmes de symétrie GET/PUT

La symétrie GET/PUT fait référence à un principe de conception dans l'API REST. Plus précisément, il signifie qu'une réponse GET envoyée à la même URL sous la forme d'une requête PUT, est une réponse HTTP 200 OK sans modification de l'état ressource REST.

Champs non spécifiés renseignés par Config Connector dans la ressource Kubernetes sont le résultat d'une demande GET. Cela signifie qu'à l'avenir, rapprochements, Config Connector peut envoyer une requête PUT/PATCH au l'API Google Cloud, avec ces valeurs de champ non spécifiées apprises à partir de la requête GET requête. Ce n'est généralement pas un problème, mais il est possible que certains Les API Google Cloud refuseront la requête PUT/PATCH pour ces raisons valeurs de champ non spécifiées. Dans le même exemple, la valeur spec.barz.bz2 renseignée avec la valeur "bz2" peut entraîner une erreur client HTTP 400 ou d'autres erreurs si l'implémentation de l'API ne respecte pas le principe de symétrie GET/PUT.

Pour éviter ce type de problème, vous pouvez tester cnrm.cloud.google.com/state-into-spec: absent et vérifiez si les erreurs se produisent le rapprochement disparaît.

État observé

Si vous devez définir cnrm.cloud.google.com/state-into-spec: absent, mais que votre dépend des valeurs renseignées dans des champs non spécifiés, vérifiez si ces champs existent sous status.observedState dans le schéma CRD. Si c'est le cas représentées sous status.observedState, vous pouvez alors définir cnrm.cloud.google.com/state-into-spec: absent et toujours accéder aux valeurs de les champs non spécifiés après un rapprochement réussi.

Le champ status.observedState contient l'état actuel de l'élément sélectionné. de la ressource observés par Config Connector au cours des un rapprochement réussi. Les champs observés sont sélectionnés dépendances de cas d'utilisation courants et sont les champs spec calculés. Vous trouverez les champs observés dans les schémas CRD.

Si vous ne trouvez pas les champs observés qui vous intéressent, recherchez un problème ou signaler un nouveau problème dans le numéro public coachs électroniques pour en savoir plus.

Genres compatibles avec Merge

Voici tous les genres Config Connector qui acceptent le remplissage de Merge comportement:

  • AccessContextManagerAccessLevel
  • AccessContextManagerAccessPolicy
  • AccessContextManagerServicePerimeter
  • AlloyDBBackup
  • AlloyDBCluster
  • AlloyDBInstance
  • AlloyDBUser
  • ApigeeEnvironment
  • ApigeeOrganization
  • ArtifactRegistryRepository
  • BigQueryDataset
  • BigQueryJob
  • BigQueryTable
  • BigtableAppProfile
  • BigtableGCPolicy
  • BigtableInstance
  • BigtableTable
  • BillingBudgetsBudget
  • BinaryAuthorizationAttestor
  • BinaryAuthorizationPolicy
  • CertificateManagerCertificate
  • CertificateManagerCertificateMap
  • CertificateManagerCertificateMapEntry
  • CertificateManagerDNSAuthorization
  • CloudBuildTrigger
  • CloudFunctionsFunction
  • CloudIdentityGroup
  • CloudIdentityMembership
  • Tâche Cloud Scheduler
  • ComputeAddress
  • ComputeBackendBucket
  • ComputeBackendService
  • ComputeDisk
  • ComputeExternalVPNGateway
  • ComputeFirewall
  • ComputeFirewallPolicy
  • ComputeFirewallPolicyAssociation
  • ComputeFirewallPolicyRule
  • ComputeForwardingRule
  • ComputeHTTPHealthCheck
  • ComputeHTTPSHealthCheck
  • ComputeHealthCheck
  • ComputeImage
  • ComputeInstance
  • ComputeInstanceGroup
  • ComputeInstanceGroupManager
  • ComputeInstanceTemplate
  • ComputeInterconnectAttachment
  • ComputeNetwork
  • ComputeNetworkEndpointGroup
  • ComputeNetworkFirewallPolicy
  • ComputeNetworkPeering
  • ComputeNodeGroup
  • ComputeNodeTemplate
  • ComputePacketMirroring
  • ComputeProjectMetadata
  • ComputeRegionNetworkEndpointGroup
  • ComputeReservation
  • ComputeResourcePolicy
  • ComputeRoute
  • ComputeRouter
  • ComputeRouterInterface
  • ComputeRouterNAT
  • ComputeRouterPeer
  • ComputeSSLCertificate
  • ComputeSSLPolicy
  • ComputeSecurityPolicy
  • ComputeServiceAttachment
  • ComputeSharedVPCHostProject
  • ComputeSharedVPCServiceProject
  • ComputeSnapshot
  • ComputeSubnetwork
  • ComputeTargetGRPCProxy
  • ComputeTargetHTTPProxy
  • ComputeTargetHTTPSProxy
  • ComputeTargetInstance
  • ComputeTargetPool
  • ComputeTargetSSLProxy
  • ComputeTargetTCPProxy
  • ComputeTargetVPNGateway
  • ComputeURLMap
  • ComputeVPNGateway
  • ComputeVPNTunnel
  • ConfigControllerInstance
  • ContainerAnalysisNote
  • ContainerAttachedCluster
  • ContainerCluster
  • ContainerNodePool
  • DLPDeidentifyTemplate
  • DLPInspectTemplate
  • DLPJobTrigger
  • DLPStoredInfoType
  • DNSManagedZone
  • DNSPolicy
  • DNSRecordSet
  • DataFusionInstance
  • DataflowFlexTemplateJob
  • DataflowJob
  • DataprocAutoscalingPolicy
  • DataprocCluster
  • DataprocWorkflowTemplate
  • EdgeContainerCluster
  • EdgeContainerNodePool
  • EdgeContainerVpnConnection
  • EdgeNetworkNetwork
  • EdgeNetworkSubnet
  • EventarcTrigger
  • FilestoreBackup
  • FilestoreInstance
  • FirestoreIndex
  • Dossier
  • GKEHubFeature
  • GKEHubFeatureMembership
  • GKEHubMembership
  • IAMAccessBoundaryPolicy
  • IAMAuditConfig
  • IAMCustomRole
  • IAMPartialPolicy
  • IAMPolicy
  • IAMPolicyMember
  • IAMServiceAccount
  • IAMServiceAccountKey
  • IAMWorkforcePool
  • IAMWorkforcePoolProvider
  • IAMWorkloadIdentityPool
  • IAMWorkloadIdentityPoolProvider
  • IAPBrand
  • IAPIdentityAwareProxyClient
  • IdentityPlatformConfig
  • IdentityPlatformOAuthIDPConfig
  • IdentityPlatformTenant
  • IdentityPlatformTenantOAuthIDPConfig
  • KMSCryptoKey
  • KMSKeyRing
  • LoggingLogBucket
  • LoggingLogExclusion
  • LoggingLogSink
  • LoggingLogView
  • MemcacheInstance
  • MonitoringAlertPolicy
  • MonitoringDashboard
  • MonitoringGroup
  • MonitoringMetricDescriptor
  • MonitoringMonitoredProject
  • MonitoringNotificationChannel
  • MonitoringService
  • MonitoringServiceLevelObjective
  • MonitoringUptimeCheckConfig
  • NetworkConnectivityHub
  • NetworkConnectivitySpoke
  • NetworkSecurityAuthorizationPolicy
  • NetworkSecurityClientTLSPolicy
  • NetworkSecurityServerTLSPolicy
  • NetworkServicesEndpointPolicy
  • NetworkServicesGRPCRoute
  • NetworkServicesGateway
  • NetworkServicesHTTPRoute
  • NetworkServicesMesh
  • NetworkServicesTCPRoute
  • NetworkServicesTLSRoute
  • OSConfigGuestPolicy
  • OSConfigOSPolicyAssignment
  • PrivateCACAPool
  • PrivateCACertificate
  • PrivateCACertificateAuthority
  • PrivateCACertificateTemplate
  • Projet
  • PubSubLiteReservation
  • PubSubSchema
  • PubSubSubscription
  • PubSubTopic
  • RecaptchaEnterpriseKey
  • RedisInstance
  • ResourceManagerLien
  • ResourceManagerPolicy
  • RunJob
  • RunService
  • SQLDatabase
  • SQLInstance
  • SQLSSLCert
  • SQLUser
  • SecretManagerSecret
  • SecretManagerSecretVersion
  • Service
  • ServiceDirectoryEndpoint
  • ServiceDirectoryNamespace
  • ServiceDirectoryService
  • ServiceIdentity
  • ServiceNetworkingConnection
  • SourceRepoRepository
  • SpannerDatabase
  • SpannerInstance
  • StorageBucket
  • StorageBucketAccessControl
  • StorageDefaultObjectAccessControl
  • StorageNotification
  • StorageTransferJob
  • VPCAccessConnector

Les genres suivants ne sont pas compatibles avec le comportement de remplissage Merge à partir de la version correspondante:

Kind Name (Nom du genre) Version
LoggingLogMetric 1.118.1