Ignora i campi non specificati
Questa pagina spiega il comportamento di compilazione predefinito dei campi spec
e come cambiare 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 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 predefiniti: 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
. Questo è anche l'unico comportamento di compilazione supportato da questi CRD. Il valore dell'annotazione cnrm.cloud.google.com/state-into-spec
è absent
in queste RP di risorse.
Unisci
Merge
è un comportamento non supportato nei CRD aggiunti in 1.114.0 e versioni successive. I campi spec
assumono i valori dell'API dopo una riconciliazione riuscita, a meno che non siano illeggibili. Per ulteriori dettagli, consulta Gestire i campi
esternamente.
Per i CRD supportati 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 queste RP di risorse. Puoi anche configurare il comportamento di compilazione in modo che sia Absent
seguendo le istruzioni riportate in Ignorare il completamento dei campi non specificati nella specifica.
Per impostazione predefinita, in queste risorse RP, i campi che non sono stati specificati nel 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 sono presenti nel 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, nel 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 , ti consigliamo di modificare questo comportamento predefinito e di saltare la compilazione della specifica della risorsa Kubernetes con campi non specificati.
Saltare la compilazione dei campi non specificati nelle specifiche
Puoi saltare la compilazione 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 di spazio dei nomi suAbsent
. - Specifica il valore dell'annotazione
cnrm.cloud.google.com/state-into-spec
comeabsent
per la risorsa.
Configura l'override stateIntoSpec
a livello di cluster o di spazio dei nomi
Quando installi Config Connector o aggiorni la relativa installazione,
puoi configurare l'override stateIntoSpec
a livello di cluster o di spazio dei nomi
in modo che sia Absent
nel ConfigConnector CR o nel ConfigConnectorContext CR.
spec:
stateIntoSpec: Absent
In questo modo, Absent
diventa il comportamento di compilazione dei campi spec
predefiniti per tutte le nuove risorse create nel cluster o nello spazio dei nomi quando non specifichi l'annotazione cnrm.cloud.google.com/state-into-spec
nei file YAML della nuova risorsa. Ciò significa che Config Connector non completerà il completamento dei campi non specificati nella specifica della risorsa Kubernetes per queste risorse.
Il campo stateIntoSpec
non ha un valore predefinito. Il connettore di configurazione 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:
- Utilizza direttamente il valore dell'annotazione
cnrm.cloud.google.com/state-into-spec
se è specificato e valido. - Se l'annotazione non è specificata, utilizza il valore corrispondente del campo
stateIntoSpec
nella richiesta di commit ConfigConnectorContext. - Se il ConfigConnectorContext CR non esiste o il campo
stateIntoSpec
non è specificato, utilizza il valore corrispondente del campostateIntoSpec
nel ConfigConnector CR. - Se la regola di conformità ConfigConnector non esiste o il campo
stateIntoSpec
non è specificato, utilizza il comportamento predefinito in base alla regola di conformità descritta in Comportamenti di compilazione dei campispec
.
Tieni presente che l'unico CRD di comportamento di completamento aggiunto nella versione 1.114.0 e successive è Absent
, indipendentemente dall'annotazione cnrm.cloud.google.com/state-into-spec
o dai campi stateIntoSpec
nel CRD ConfigConnector o nel CRD ConfigConnectorContext.
Se hai già creato la risorsa, ma vuoi modificare il comportamento di compilazione dei campi spec
in Absent
, devi:
Assicurati che l'override
stateIntoSpec
a livello di cluster o di spazio dei nomi siaAbsent
nel CR ConfigConnector o ConfigConnectorContext.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
. Viene saltato
il completamento dei campi non specificati nella specifica della risorsa Kubernetes:
metadata:
annotations:
cnrm.cloud.google.com/state-into-spec: absent
Se non specificato, questo attributo ha un valore predefinito merge
, il che significa che 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 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:
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.Elimina la risorsa dal cluster Kubernetes.
Aggiungi l'annotazione
cnrm.cloud.google.com/state-into-spec: absent
al file YAML della risorsa.(Facoltativo) Rimuovi
cnrm.cloud.google.com/deletion-policy: abandon
dal file YAML.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 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, lo spec compilato 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, ti consigliamo di impostare cnrm.cloud.google.com/state-into-spec: absent
per ottenere il comportamento di compilazione di Absent
per i campi spec
. Di seguito sono riportati gli scenari più comuni che trarranno vantaggio dal comportamento di compilazione di Absent
.
Gestire i campi non specificati in un elenco esternamente
Config Connector tratta tutti i campi dell'elenco nella specifica della risorsa Kubernetes come campi atomici. Di conseguenza, per impostazione predefinita, la modifica apportata a un sottocampo dell'elenco al di fuori 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 maggiori informazioni, consulta Comportamento per i campi di elenco nella specifica della risorsa.
Risolvere 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 è poiché:
- Config Connector completerà e imposterà come predefiniti i valori non specificati nell'elenco nella spec.
spec.bars[0].br2
è un esempio. - Sia gli strumenti di gestione della configurazione sia Config Connector trattano i campi dell'elenco come atomici, pertanto
spec.bars[0].br2
aggiunto viene trattato come una deriva dagli strumenti di gestione della configurazione e verrà rimosso per correggeredrift
.
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
alla specifica.
Risolvere i problemi di simmetria GET/PUT
La simmetria GET/PUT si riferisce 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 previsto è una risposta HTTP 200 OK senza alcuna modifica dello 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 nelle future
riconciliazioni,
Config Connector potrebbe inviare una richiesta PUT/PATCH all'Google Cloud API di base con questi valori di campo non specificati ricavati dalla richiesta GET. In genere non è un problema, ma è possibile che alcuneGoogle Cloud API rifiutino la richiesta PUT/PATCH a causa di questi valori di campo non specificati. Nello stesso esempio, se il valore spec.barz.bz2
con il valore "bz2" viene completato, potrebbe verificarsi un errore 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 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 inseriti in 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 in tempo reale dei campi selezionati e osservati della risorsa che Config Connector ha osservato nell'ultima riconciliazione andata a buon fine. I campi osservati vengono selezionati se sono dipendenze di casi d'uso comuni e sono campi spec
calcolati. Puoi trovare
i campi osservati negli schemi CRD.
Se non riesci a trovare i campi osservati che ti interessano, controlla se esiste un problema o apri un nuovo problema negli issue tracker pubblici.
Tipi con supporto di Merge
Di seguito sono riportati tutti i tipi di connettore di configurazione che supportano il comportamento di compilazione 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
- EseguiJob
- 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 Merge
a partire dalla versione corrispondente:
Nome tipo | Versione |
---|---|
LoggingLogMetric | 1.118.1 |