Ignora campi non specificati


Questa pagina spiega il comportamento di compilazione predefinito dei campi spec e come modificare il comportamento predefinito da Merge a quello consigliato Absent. Questa pagina potrebbe non essere applicabile se utilizzi un CRD aggiunto nella versione 1.114.0 e successive perché questi CRD utilizzano solo il comportamento Absent. Per un elenco di CRD che supportano Merge, consulta la sezione CRD con supporto Merge di questa pagina.

spec campi che compilano i comportamenti

Quando Config Connector crea una risorsa, i campi non specificati nella specifica della risorsa Kubernetes potrebbero avere due diversi comportamenti predefiniti di compilazione: Absent e Merge.

Assente

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

Per i CRD aggiunti nella versione 1.114.0 e successive, il comportamento di compilazione predefinito è Absent. Inoltre, questo è l'unico comportamento supportato dai CRD. Il valore dell'annotazione cnrm.cloud.google.com/state-into-spec è absent in questi RP delle risorse.

Unisci

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

Per i CRD supportati in Config Connector versione 1.113.0 e precedenti, il comportamento di completamento predefinito è Merge. Per un elenco di CRD che supportano Merge, consulta la sezione CRD con supporto Merge di questa pagina. Il valore predefinito dell'annotazione cnrm.cloud.google.com/state-into-spec è merge in queste RP delle risorse. Puoi anche configurare il comportamento di compilazione su Absent seguendo le istruzioni riportate in Saltare il completamento del completamento dei campi non specificati nella specifica.

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

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

spec:
  foo: "foo"

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

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

A causa della complessità dell'interazione tra Config Connector e API Google Cloud, potresti voler modificare questo comportamento predefinito e saltare il completamento della specifica delle risorse Kubernetes con campi non specificati.

Salta il completamento del completamento dei campi non specificati nella specifica

Puoi saltare il completamento del completamento dei campi non specificati nelle specifiche per i CRD supportati in Config Connector versione 1.113.0 e precedenti in uno dei seguenti modi:

  • Configura l'override di stateIntoSpec a livello di cluster o di spazio dei nomi in modo che sia 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

Durante l'installazione di Config Connector o l'aggiornamento dell'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 RP di ConfigConnector o di ConfigConnectorContext.

spec:
  stateIntoSpec: Absent

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

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

  1. Utilizza direttamente 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 campo stateIntoSpec nella RP ConfigConnectorContext.
  3. Se la RP ConfigConnectorContext non esiste o il campo stateIntoSpec non è specificato, utilizza il valore corrispondente del campo stateIntoSpec nell'RP di ConfigConnector.
  4. Se la RP di ConfigConnector non esiste o il campo stateIntoSpec non è specificato, utilizza il comportamento predefinito basato sul CRD descritto in Comportamenti di completamento dei campi di spec.

Tieni presente che l'unico valore CRD compilato aggiunto nella versione 1.114.0 e successive è Absent indipendentemente dall'annotazione cnrm.cloud.google.com/state-into-spec o dai campi stateIntoSpec nella CR di ConfigConnector o ConfigConnectorContext.

Se hai già creato la risorsa, ma vuoi modificare il comportamento di completamento dei campi spec 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 la risorsa. Assicurati che la configurazione YAML utilizzata per l'acquisizione non abbia l'annotazione cnrm.cloud.google.com/state-into-spec.

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

Durante la creazione del file YAML, puoi specificare il valore dell'annotazione cnrm.cloud.google.com/state-into-spec come absent. In questo modo, i campi non specificati non vengono più inseriti 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. Ciò significa che Config Connector inserisce nella specifica tutti i campi non specificati. Questa annotazione è immutabile, il che significa che non puoi aggiornare il valore dell'annotazione di una risorsa Config Connector esistente.

Se hai già creato la risorsa, ma vuoi modificare il valore di questa annotazione per un comportamento di compilazione diverso, 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 non elimini 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 codice YAML della risorsa.

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

  5. Applica il file YAML aggiornato.

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

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 sarà:

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 impostare cnrm.cloud.google.com/state-into-spec: absent per ottenere il comportamento di completamento Absent per i campi spec. Ecco gli scenari più comuni che 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 campi atomici. Di conseguenza, per impostazione predefinita, la modifica apportata a un sottocampo nell'elenco all'esterno di Config Connector verrà annullata da Config Connector. Tuttavia, puoi utilizzare questa annotazione per consentire a Config Connector di annullare la gestione dei campi secondari nell'elenco. Per ulteriori informazioni, consulta Comportamento per i campi elenco nella specifica delle risorse.

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

Se utilizzi strumenti di gestione della configurazione come Config Sync o Argo CD, potresti notare un conflitto tra lo strumento di gestione della configurazione e Config Connector. Un esempio è l'errore KNV2005 descritto nella guida per la risoluzione dei problemi. La causa principale di questi tipi di problemi è perché:

  1. Config Connector completerà e mostrerà i valori predefiniti non specificati nell'elenco della specifica; spec.bars[0].br2 è un esempio.
  2. Sia gli strumenti di gestione della configurazione che Config Connector considerano i campi dell'elenco come atomici, pertanto l'elemento spec.bars[0].br2 aggiunto viene considerato come una deviazione dagli strumenti di gestione della configurazione e verrà rimosso per correggere il drift.

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

Risolvere i problemi di simmetria GET/PUT

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

I campi non specificati compilati da Config Connector nelle specifiche delle risorse Kubernetes sono il risultato di una richiesta GET. Ciò significa che nelle future riconciliazioni, Config Connector potrebbe inviare una richiesta PUT/PATCH all'API Google Cloud sottostante, con questi valori di campo non specificati appresi dalla richiesta GET. In genere questo non è un problema, ma è possibile che alcune API Google Cloud rifiutino la richiesta PUT/PATCH a causa di questi valori di campo non specificati. Nello stesso esempio, l'elemento spec.barz.bz2 compilato con il valore "bz2" può generare un errore del client HTTP 400 o altre risposte impreviste 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 controllare se gli errori durante la riconciliazione spariscono.

Stato di osservazione

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

Il campo status.observedState contiene lo stato attivo dei campi osservati selezionati della risorsa che Config Connector ha osservato nell'ultima riconciliazione riuscita. I campi osservati vengono selezionati se sono dipendenze di casi d'uso comuni e vengono calcolati come campi spec. Puoi trovare i campi osservati negli schemi CRD.

Se non riesci a trovare i campi osservati che ti interessano, verifica la presenza di un problema esistente o aprine uno nuovo negli strumenti di monitoraggio dei problemi pubblici.

Tipi con supporto Merge

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

  • 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 completamento di Merge a partire dalla versione corrispondente:

Nome tipo Versione
LoggingLogMetric 1,118,1