Ignora i 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 una CRD aggiunta nella versione 1.114.0 e successive perché queste CRD utilizzano solo il comportamento Absent. Per un elenco dei CRD che supportano Merge, consulta la sezione CRD con supporto di Merge di questa pagina.

spec comportamenti di compilazione dei campi

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

Assente

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

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

Unisci

Merge è un comportamento non supportato nelle CRD aggiunte nella versione 1.114.0 e successive. I campi spec assumono valori dall'API dopo una riconciliazione riuscita, a meno che non siano leggibili. Per maggiori dettagli, consulta Gestire i campi esternamente.

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

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

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

spec:
  foo: "foo"

Se il file YAML viene applicato correttamente e la risorsa è UpToDate, nella CR viene visualizzato un altro campo denominato bar:

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

A causa della complessità dell'interazione tra Config Connector e le APIGoogle Cloud , potresti voler modificare questo comportamento predefinito e saltare il popolamento della specifica della risorsa Kubernetes con campi non specificati.

Salta il riempimento dei campi non specificati nella specifica

Puoi saltare il riempimento dei campi non specificati nella specifica per le CRD supportate in Config Connector versione 1.113.0 e precedenti in uno dei seguenti modi:

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

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

spec:
  stateIntoSpec: Absent

In questo modo, Absent diventa il comportamento predefinito di compilazione dei campi spec per qualsiasi nuova risorsa creata nel cluster o nello spazio dei nomi quando non specifichi l'annotazione cnrm.cloud.google.com/state-into-spec nei nuovi file YAML delle risorse. Ciò significa che Config Connector non inserirà i campi non specificati nella specifica della risorsa Kubernetes per queste risorse.

Il campo stateIntoSpec non ha un valore predefinito. Config Connector determinerà il comportamento di compilazione dei campi spec in base al valore dell'annotazione cnrm.cloud.google.com/state-into-spec e seguirà 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 nel CR ConfigConnectorContext.
  3. Se la CR ConfigConnectorContext non esiste o il campo stateIntoSpec non è specificato, utilizza il valore corrispondente del campo stateIntoSpec nella CR ConfigConnector.
  4. Se la CR ConfigConnector non esiste o il campo stateIntoSpec non è specificato, utilizza il comportamento predefinito in base alla CRD descritta in spec comportamenti di compilazione dei campi.

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

Se hai già creato la risorsa, ma vuoi modificare il comportamento di compilazione dei campi spec in Absent, devi:

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

  2. Abbandona e acquisisci la risorsa. Assicurati che la configurazione YAML utilizzata per l'acquisizione non contenga l'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 dell'annotazione cnrm.cloud.google.com/state-into-spec come absent. In questo modo non vengono compilati i campi non specificati nella specifica della risorsa Kubernetes:

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

Se non specificata, questa annotazione ha un valore predefinito di merge, il che significa che Config Connector compila tutti i campi non specificati in spec. 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 file YAML della risorsa.

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

  5. Applica il file YAML aggiornato.

Per spiegare meglio 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 inoltre di aver specificato la specifica nel file YAML come segue:

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 invece 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 utilizzarlo cnrm.cloud.google.com/state-into-spec: absent

Nella maggior parte dei casi, ti consigliamo di impostare cnrm.cloud.google.com/state-into-spec: absent per ottenere il comportamento di compilazione per i campi spec.Absent Di seguito sono riportati gli scenari più comuni che trarranno vantaggio dal comportamento di compilazione di Absent.

Gestire esternamente i campi non specificati in un elenco

Config Connector considera tutti i campi elenco nella specifica della risorsa Kubernetes come campi atomici. Di conseguenza, per impostazione predefinita, la modifica apportata a un campo secondario nell'elenco al di fuori di Config Connector verrà ripristinata da Config Connector. Tuttavia, puoi utilizzare questa annotazione per consentire a Config Connector di annullare la gestione dei campi secondari nell'elenco. Per maggiori informazioni, vedi Comportamento dei campi elenco nella specifica della risorsa.

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 spiegato nella guida alla risoluzione dei problemi. La causa principale di questi tipi di problemi è perché:

  1. Config Connector compilerà e imposterà come predefiniti i valori non specificati nell'elenco nella specifica. spec.bars[0].br2 è un esempio.
  2. Sia gli strumenti di gestione della configurazione sia Config Connector trattano i campi elenco come atomici, pertanto il spec.bars[0].br2 aggiunto viene trattato 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 si riferisce a un principio di progettazione dell'API REST. Nello specifico, significa che quando una risposta GET viene inviata come richiesta PUT allo stesso URL, il risultato previsto è una risposta HTTP 200 OK senza modifiche allo stato della risorsa REST sottostante.

I campi non specificati compilati da Config Connector nella specifica della risorsa Kubernetes sono il risultato di una richiesta GET. Ciò significa che nei futuri riconciliamenti, 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 non è un problema, ma è possibile che alcune APIGoogle Cloud rifiutino la richiesta PUT/PATCH a causa di questi valori di campo non specificati. Nello stesso esempio, il campo spec.barz.bz2 con il valore "bz2" potrebbe generare un errore client HTTP 400 o altre risposte impreviste se l'implementazione dell'API viola il principio di simmetria GET/PUT.

Per evitare questo tipo di problemi, puoi provare a impostare cnrm.cloud.google.com/state-into-spec: absent e verificare se gli errori durante la riconciliazione scompaiono.

Stato osservato

Se devi impostare cnrm.cloud.google.com/state-into-spec: absent, ma la tua soluzione dipende dai valori compilati di 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 accedere comunque ai valori dei campi non specificati dopo una riconciliazione riuscita.

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

Se non riesci a trovare i campi osservati che ti interessano, verifica se esiste un problema o apri un nuovo problema negli Issue Tracker pubblici .

Tipi con supporto Merge

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

  • AccessContextManagerAccessLevel
  • AccessContextManagerAccessPolicy
  • AccessContextManagerServicePerimeter
  • AlloyDBBackup
  • AlloyDBCluster
  • AlloyDBUser
  • ApigeeEnvironment
  • ApigeeOrganization
  • ArtifactRegistryRepository
  • BigQueryDataset
  • BigQueryJob
  • BigQueryTable
  • BigtableAppProfile
  • BigtableGCPolicy
  • BigtableInstance
  • BigtableTable
  • BillingBudgetsBudget
  • BinaryAuthorizationAttestor
  • BinaryAuthorizationPolicy
  • CertificateManagerCertificate
  • CertificateManagerCertificateMap
  • CertificateManagerCertificateMapEntry
  • CloudBuildTrigger
  • CloudFunctionsFunction
  • CloudIdentityGroup
  • CloudIdentityMembership
  • CloudSchedulerJob
  • ComputeAddress
  • ComputeBackendBucket
  • ComputeBackendService
  • ComputeDisk
  • ComputeExternalVPNGateway
  • ComputeFirewall
  • ComputeFirewallPolicy
  • ComputeFirewallPolicyAssociation
  • 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
  • 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
  • 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
  • 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 di Merge a partire dalla versione corrispondente:

Kind Name Versione
LoggingLogMetric 1.118.1