Ignora campi non specificati


Questa pagina spiega il comportamento di compilazione predefinito dei campi spec e come per modificare il comportamento predefinito da Merge a quello consigliato Absent. Questa pagina potrebbe non essere applicabile se utilizzi una CRD aggiunta in versione 1.114.0 e successive perché questi CRD utilizzano solo il comportamento Absent. Per un elenco di CRD che supportano Merge; consulta le CRD con Merge assistenza di questa pagina.

spec campi che compilano i comportamenti

Quando Config Connector crea una risorsa, i campi lasciati non specificati nella Le specifiche delle risorse Kubernetes possono avere due diversi comportamenti predefiniti di compilazione: Absent e Merge.

Assente

Absent è il comportamento consigliato. Config Connector non compilerà campi non specificati nella specifica.

Per i CRD aggiunti nella versione 1.114.0 e in seguito, il comportamento di compilazione predefinito è Absent. Questo è anche l'unico campo comportamento supportato dai CRD. Il valore del parametro L'annotazione cnrm.cloud.google.com/state-into-spec è absent in questa risorsa RP.

Unisci

Merge è un comportamento non supportato nei CRD aggiunti in 1.114.0 e versioni successive. La Dopo una riconciliazione riuscita, i campi spec assumono valori dell'API a meno che non siano leggibili. Ulteriori dettagli sono disponibili in Gestire i campi all'esterno.

Per i CRD supportati nella versione Config Connector 1,113,0 e prima, il comportamento di compilazione predefinito è Merge. Per un elenco di CRD supporta Merge, consulta la pagina relativa all'assistenza di Merge di questa pagina. Il valore predefinito L'annotazione cnrm.cloud.google.com/state-into-spec è merge in questa risorsa RP. Puoi anche configurare il comportamento di compilazione in modo che sia Absent seguendo le istruzioni in Saltare il completamento dei campi non specificati in del modello.

Per impostazione predefinita, in queste RP delle risorse, i campi che non sono stati specificati il codice YAML originale appare sempre nella specifica RP. Ciò significa che quando esegui kubectl get <resource kind> <resource name> -oyaml, molti campi nella specifica non sono presenti nel tuo YAML applicato.

Ad esempio, supponiamo che lo schema CRD consenta di specificare due campi denominati foo e bar nella specifica, mentre per il file YAML applicato è stato specificato solo foo:

spec:
  foo: "foo"

Se il codice YAML viene applicato, nella RP viene visualizzato un altro campo denominato bar correttamente e la risorsa UpToDate:

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

A causa della complessità dell'interazione tra Config Connector e API Google Cloud, ti consigliamo di modificare questo comportamento predefinito e saltare la specifica della risorsa Kubernetes con campi non specificati.

Salta il completamento del completamento dei campi non specificati nella specifica

Puoi saltare il completamento dei campi non specificati nelle specifiche per i CRD supportati in Config Connector Versione 1.113.0 e in precedenza, in uno dei seguenti modi:

  • Configura l'override di stateIntoSpec a livello di cluster o di spazio dei nomi in modo che Absent.
  • Specifica il valore dell'annotazione cnrm.cloud.google.com/state-into-spec come absent per la risorsa.

Configura l'override di stateIntoSpec a livello di cluster o di spazio dei nomi

Quando installi Config Connector o aggiorni l'installazione di Config Connector, puoi configurare l'override di stateIntoSpec a livello di cluster o di spazio dei nomi in modo che sia Absent nella CR ConfigConnector o ConfigConnectorContext.

spec:
  stateIntoSpec: Absent

In questo modo Absent è il campo spec predefinito che inserisce il comportamento per qualsiasi nuovo risorse create nel cluster o nello spazio dei nomi se non specifichi l'annotazione cnrm.cloud.google.com/state-into-spec nella nuova risorsa YAML. Significa che Config Connector ignorerà il popolamento dei campi non specificati in le specifiche della risorsa Kubernetes.

Il campo stateIntoSpec non ha un valore predefinito. Config Connector determina il comportamento dei campi spec in base al valore dell'attributo cnrm.cloud.google.com/state-into-spec e segue la logica di seguito per determinare il valore dell'annotazione:

  1. Utilizza il valore dell'annotazione cnrm.cloud.google.com/state-into-spec se specificato e valido.
  2. Se l'annotazione non è specificata, utilizza il valore corrispondente del parametro stateIntoSpec nella RP ConfigConnectorContext.
  3. Se la RP ConfigConnectorContext non esiste o il campo stateIntoSpec non è specificato, utilizza il valore corrispondente del campo stateIntoSpec in la RP ConfigConnector.
  4. Se la RP ConfigConnector non esiste o il campo stateIntoSpec è non specificato, utilizza il comportamento predefinito basato sulla CRD descritta in spec campi che compilano i comportamenti.

Tieni presente che l'unico comportamento CRD compilato aggiunto nella versione 1.114.0 e più tardi seguire è Absent indipendentemente da cnrm.cloud.google.com/state-into-spec o nei campi stateIntoSpec della RP ConfigConnector RP ConfigConnectorContext.

Se hai già creato la risorsa, ma vuoi modificare i campi spec popolando il comportamento in Absent, devi:

  1. Assicurati che l'override di stateIntoSpec a livello di cluster o di spazio dei nomi sia Absent nella RP ConfigConnector o ConfigConnectorContext.

  2. Abbandona e acquisisci i risorsa. Assicurati che la configurazione YAML utilizzata per l'acquisizione non abbia il Annotazione cnrm.cloud.google.com/state-into-spec.

Specifica l'annotazione cnrm.cloud.google.com/state-into-spec a livello di risorsa

Quando crei il file YAML, puoi specificare il valore del Annotazione cnrm.cloud.google.com/state-into-spec come absent. Ignora compilazione di campi non specificati nella specifica delle risorse Kubernetes:

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

Se non specificato, questa annotazione ha un valore predefinito di merge, il che significa Config Connector compila tutti i campi non specificati nella specifica. Questa annotazione è immutabile, il che significa che non puoi aggiornare il valore dell'annotazione di un Risorsa Config Connector.

Se hai già creato la risorsa, ma vuoi modificare il valore per un diverso comportamento di compilazione, devi seguire questi passaggi:

  1. Modifica e aggiungi l'annotazione cnrm.cloud.google.com/deletion-policy: abandon alla risorsa Kubernetes esistente per assicurarti che l'eliminazione nel passaggio successivo eliminare la risorsa Google Cloud sottostante.

  2. Elimina la risorsa dal cluster Kubernetes.

  3. Aggiungi l'annotazione cnrm.cloud.google.com/state-into-spec: absent nel file YAML della risorsa.

  4. (Facoltativo) Rimuovi cnrm.cloud.google.com/deletion-policy: abandon dal YAML.

  5. Applica il file YAML aggiornato.

Per spiegare ulteriormente la differenza introdotta da questa annotazione, supponiamo che: una specifica con il seguente schema:

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

Supponiamo anche che tu abbia specificato le specifiche nel tuo YAML come:

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

Per impostazione predefinita, la specifica compilata nella risorsa Kubernetes creata potrebbe essere:

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

Se imposti cnrm.cloud.google.com/state-into-spec: absent, la specifica finale nella risorsa Kubernetes creata:

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

Quando utilizzare cnrm.cloud.google.com/state-into-spec: absent

Nella maggior parte dei casi è consigliabile cnrm.cloud.google.com/state-into-spec: absent per compilare Absent per i campi spec. Ecco gli scenari più comuni che ne trarranno vantaggio dal comportamento di completamento di Absent.

Gestire esternamente i campi non specificati in un elenco

Config Connector tratta tutti i campi dell'elenco nelle specifiche delle risorse Kubernetes come atomici campi. Di conseguenza, per impostazione predefinita, la modifica apportata a un sottocampo nell'elenco al di fuori di Config Connector verrà ripristinato da Config Connector. Tuttavia, puoi utilizzare questa annotazione per consentire a Config Connector di annullare la gestione dei campi secondari nell'elenco. Per Per saperne di più, consulta Comportamento per i campi elenco nella risorsa del modello.

Risolvi i conflitti tra gli strumenti di gestione della configurazione e Config Connector

Se utilizzi strumenti di gestione delle configurazioni come Config Sync o Argo CD, potresti notare un conflitto tra la configurazione e Config Connector. Un esempio è KNV2005 errore come spiegato nella guida alla risoluzione dei problemi. La causa principale di questi tipi di problemi è perché:

  1. Config Connector completerà e i valori non specificati predefiniti nell'elenco della la specifica spec.bars[0].br2 è un esempio.
  2. Sia gli strumenti di gestione della configurazione che Config Connector considerano i campi dell'elenco come atomico, pertanto il valore spec.bars[0].br2 aggiunto viene considerato una deviazione in base alla configurazione strumenti di gestione dei contenuti e verrà rimosso per correggere drift.

Per risolvere questi problemi, puoi impostare cnrm.cloud.google.com/state-into-spec: absent in modo che Config Connector non aggiunga un campo non specificato spec.bars[0].br2 nelle specifiche.

Risolvere i problemi di simmetria GET/PUT

La simmetria GET/PUT fa riferimento a un principio di progettazione nell'API REST. In particolare, significa che quando una risposta GET viene inviata come richiesta PUT allo stesso URL, il risultato è una risposta HTTP 200 OK senza alcuna modifica allo stato del Risorsa REST.

I campi non specificati compilati da Config Connector nella risorsa Kubernetes sono il risultato di una richiesta GET. Ciò significa che in futuro riconciliazioni, Config Connector può inviare una richiesta PUT/PATCH all'istanza sottostante API Google Cloud, con questi valori dei campi non specificati appresi da GET richiesta. In genere questo non è un problema, ma è possibile che Le API Google Cloud rifiuteranno la richiesta PUT/PATCH per questo motivo valori del campo non specificati. Nello stesso esempio, il campo spec.barz.bz2 compilato con valore "bz2" potrebbe generare un errore del client HTTP 400 o altri errori imprevisti se l'implementazione dell'API viola il principio di simmetria GET/PUT.

Per evitare questa categoria di problemi, puoi sperimentare l'impostazione cnrm.cloud.google.com/state-into-spec: absent e controlla se gli errori durante la riconciliazione verrà rimossa.

Stato di osservazione

Se devi impostare cnrm.cloud.google.com/state-into-spec: absent, ma dipende dai valori compilati dei campi non specificati, controlla se questi esistono campi in status.observedState nello schema CRD. Se rappresentato in status.observedState, puoi impostare cnrm.cloud.google.com/state-into-spec: absent e accedere comunque ai valori di ai campi non specificati dopo una riconciliazione riuscita.

Il campo status.observedState contiene lo stato attivo dell'elemento selezionato, campi osservati della risorsa che Config Connector ha osservato negli ultimi una riconciliazione di successo. I campi osservati vengono selezionati se delle dipendenze di casi d'uso comuni e vengono calcolati i campi spec. Puoi visualizzare dei campi osservati negli schemi CRD.

Se non riesci a trovare i campi osservati che stai cercando, verifica la presenza di un problema esistente o apri un nuovo problema nel problema pubblico tracker .

Tipi con supporto Merge

Di seguito sono riportati tutti i tipi di Config Connector che supportano il completamento di Merge comportamento:

  • 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
  • CloudSchedulerJob
  • 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
  • Cartella
  • 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
  • Progetto
  • PubSubLiteReservation
  • PubSubSchema
  • PubSubSubscription
  • PubSubTopic
  • RecaptchaEnterpriseKey
  • RedisInstance
  • ResourceManagerLien
  • ResourceManagerPolicy
  • RunJob
  • RunService
  • SQLDatabase
  • SQLInstance
  • SQLSSLCert
  • SQLUser
  • SecretManagerSecret
  • SecretManagerSecretVersion
  • Servizio
  • ServiceDirectoryEndpoint
  • ServiceDirectoryNamespace
  • ServiceDirectoryService
  • ServiceIdentity
  • ServiceNetworkingConnection
  • SourceRepoRepository
  • SpannerDatabase
  • SpannerInstance
  • StorageBucket
  • StorageBucketAccessControl
  • StorageDefaultObjectAccessControl
  • StorageNotification
  • StorageTransferJob
  • VPCAccessConnector

I seguenti tipi non supportano il comportamento di compilazione Merge a partire da la versione corrispondente:

Nome tipo Versione
LoggingLogMetric 1,118,1