Nicht angegebene Felder ignorieren
Auf dieser Seite wird das Standardverhalten beim Ausfüllen der spec
-Felder erläutert. Außerdem erfahren Sie, wie Sie das Standardverhalten von Merge
in das empfohlene Verhalten Absent
ändern. Diese Seite ist möglicherweise nicht zutreffend, wenn Sie eine CRD verwenden, die in Version 1.114.0 oder höher hinzugefügt wurde. Bei diesen CRDs wird nur das Verhalten Absent
verwendet. Eine Liste der CRDs, die Merge
unterstützen, finden Sie auf dieser Seite im Abschnitt CRDs mit Merge
-Unterstützung.
spec
Verhalten beim Ausfüllen von Feldern
Wenn Config Connector eine Ressource erstellt, können Felder, die in der Kubernetes-Ressourcenspezifikation nicht angegeben sind, zwei verschiedene Standardverhalten beim Ausfüllen haben: Absent
und Merge
.
Fehlt
Absent
ist das empfohlene Verhalten. Config Connector füllt keine nicht angegebenen Felder in die Spezifikation ein.
Für CRDs, die in Version 1.114.0 und höher hinzugefügt wurden, ist das Standardverhalten für die Datenaufnahme Absent
. Dies ist auch das einzige Verhalten, das von diesen CRDs unterstützt wird. Der Wert der Anmerkung cnrm.cloud.google.com/state-into-spec
ist in diesen Ressourcen-CRs absent
.
Zusammenführen
Merge
ist ein nicht unterstütztes Verhalten in CRDs, die in 1.114.0 und höher hinzugefügt wurden. Die Felder spec
übernehmen nach einer erfolgreichen Abgleichung Werte aus der API, sofern sie lesbar sind. Weitere Informationen finden Sie unter Felder extern verwalten.
Für CRDs, die in Config Connector Version 1.113.0 und niedriger unterstützt werden, ist das standardmäßige Auffüllensverhalten Merge
. Eine Liste der CRDs, die Merge
unterstützen, finden Sie auf dieser Seite im Abschnitt CRDs mit Merge
-Unterstützung. Der Standardwert der Anmerkung cnrm.cloud.google.com/state-into-spec
ist in diesen Ressourcen-CRs merge
. Sie können das Ausfüllen auch so konfigurieren, dass Absent
verwendet wird. Folgen Sie dazu der Anleitung unter Ausfüllen nicht angegebener Felder in der Spezifikation überspringen.
In diesen Ressourcen-CRs werden standardmäßig Felder, die nicht in der ursprünglichen YAML-Datei angegeben wurden, immer in der CR-Spezifikation aufgeführt. Wenn Sie also kubectl get <resource kind> <resource name> -oyaml
ausführen, sind viele Felder in der Spezifikation nicht in der angewendeten YAML-Datei enthalten.
Angenommen, das CRD-Schema lässt Sie in der Spezifikation zwei Felder mit den Namen foo
und bar
angeben, während in der angewendeten YAML-Datei nur foo
angegeben ist:
spec:
foo: "foo"
Wenn die YAML-Datei erfolgreich angewendet wurde und die Ressource UpToDate ist, wird in der CR ein weiteres Feld mit dem Namen bar
angezeigt:
spec:
foo: "foo"
bar: "bar"
Aufgrund der Komplexität der Interaktion zwischen Config Connector undGoogle Cloud -APIs sollten Sie dieses Standardverhalten ändern und das Ausfüllen der Kubernetes-Ressourcenspezifikation mit nicht angegebenen Feldern überspringen.
Ausfüllen nicht angegebener Felder in der Spezifikation überspringen
Sie können das Ausfüllen nicht angegebener Felder in der Spezifikation für CRDs, die in Config Connector Version 1.113.0 und niedriger unterstützt werden, auf eine der folgenden Arten überspringen:
- Konfigurieren Sie die
stateIntoSpec
-Überschreibung auf Cluster- oder Namespaceebene alsAbsent
. - Geben Sie den Wert der Anmerkung
cnrm.cloud.google.com/state-into-spec
alsabsent
für die Ressource an.
stateIntoSpec
-Überschreibung auf Cluster- oder Namespaceebene konfigurieren
Wenn Sie Config Connector installieren oder die Config Connector-Installation aktualisieren, können Sie die stateIntoSpec
-Überschreibung auf Cluster- oder Namespaceebene in der ConfigConnector- oder ConfigConnectorContext-CR als Absent
konfigurieren.
spec:
stateIntoSpec: Absent
Dadurch wird Absent
zum Standardverhalten für das Ausfüllen von spec
-Feldern für alle neuen Ressourcen, die im Cluster oder im Namespace erstellt werden, wenn Sie die cnrm.cloud.google.com/state-into-spec
-Anmerkung in den YAML-Dateien der neuen Ressourcen nicht angeben. Das bedeutet, dass Config Connector das Ausfüllen nicht angegebener Felder in der Kubernetes-Ressourcenspezifikation für diese Ressourcen überspringt.
Das Feld stateIntoSpec
hat keinen Standardwert. Config Connector bestimmt das Verhalten beim Ausfüllen der spec
-Felder basierend auf dem Wert der cnrm.cloud.google.com/state-into-spec
-Anmerkung. Dabei wird die folgende Logik verwendet, um den Wert der Anmerkung zu bestimmen:
- Verwenden Sie den Wert der
cnrm.cloud.google.com/state-into-spec
-Anmerkung direkt, wenn er angegeben und gültig ist. - Wenn die Anmerkung nicht angegeben ist, verwenden Sie den entsprechenden Wert des Felds
stateIntoSpec
in der ConfigConnectorContext-CR. - Wenn die ConfigConnectorContext-Kopie nicht vorhanden ist oder das Feld
stateIntoSpec
nicht angegeben ist, verwenden Sie den entsprechenden Wert des FeldsstateIntoSpec
in der ConfigConnector-Kopie. - Wenn die ConfigConnector-Kopie nicht vorhanden ist oder das Feld
stateIntoSpec
nicht angegeben ist, verwenden Sie das Standardverhalten, das auf der CRD basiert und unterspec
-Felder – Verhaltensweisen für das Ausfüllen beschrieben ist.
Beachten Sie, dass das einzige Verhalten beim Befüllen von CRDs, die in Version 1.114.0 und höher hinzugefügt wurden, Absent
ist, unabhängig von der cnrm.cloud.google.com/state-into-spec
-Anmerkung oder den stateIntoSpec
-Feldern in der ConfigConnector- oder ConfigConnectorContext-CR.
Wenn Sie die Ressource bereits erstellt haben, aber das Verhalten beim Ausfüllen der spec
-Felder in Absent
ändern möchten, gehen Sie so vor:
Achten Sie darauf, dass die
stateIntoSpec
-Überschreibung auf Cluster- oder Namespaceebene in der ConfigConnector- oder ConfigConnectorContext-KonfigurationsdateiAbsent
ist.Die Ressource aufgeben und erwerben. Die für die Akquisition verwendete YAML-Konfiguration darf die Anmerkung
cnrm.cloud.google.com/state-into-spec
nicht enthalten.
cnrm.cloud.google.com/state-into-spec
-Anmerkung auf Ressourcenebene angeben
Beim Erstellen der YAML-Datei können Sie den Wert der Anmerkung cnrm.cloud.google.com/state-into-spec
als absent
angeben. Dadurch werden nicht angegebene Felder nicht in die Kubernetes-Ressourcenspezifikation eingefügt:
metadata:
annotations:
cnrm.cloud.google.com/state-into-spec: absent
Wenn diese Anmerkung nicht angegeben ist, hat sie den Standardwert merge
. Das bedeutet, dass Config Connector alle nicht angegebenen Felder in die Spezifikation einfügt. Diese Anmerkung ist unveränderlich. Sie können also den Anmerkungswert einer vorhandenen Config Connector-Ressource nicht aktualisieren.
Wenn Sie die Ressource bereits erstellt haben, aber den Wert dieser Anmerkung für ein anderes Ausfüllensverhalten ändern möchten, gehen Sie so vor:
Bearbeiten Sie die vorhandene Kubernetes-Ressource und fügen Sie die Anmerkung
cnrm.cloud.google.com/deletion-policy: abandon
hinzu, damit die zugrunde liegende Google Cloud Ressource nicht im nächsten Schritt gelöscht wird.Löschen Sie die Ressource aus dem Kubernetes-Cluster.
Fügen Sie der YAML-Datei der Ressource die Anmerkung
cnrm.cloud.google.com/state-into-spec: absent
hinzu.Optional: Entfernen Sie
cnrm.cloud.google.com/deletion-policy: abandon
aus dem YAML-Code.Wenden Sie die aktualisierte YAML-Datei an.
Um den Unterschied zu verdeutlichen, gehen wir von einer Spezifikation mit dem folgenden Schema aus:
foo1: string
foo2: string
bars:
- bar:
br1: string
br2: string
barz:
bz1: string
bz2: string
Angenommen, Sie haben die Spezifikation in Ihrer YAML-Datei so angegeben:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Die ausgefüllte Spezifikation in der erstellten Kubernetes-Ressource könnte dann standardmäßig so aussehen:
spec:
foo1: "foo1"
foo2: "foo2"
bars:
- br1: "1_br1"
br2: "1_br2"
- br1: "2_br1"
br2: "2_br2"
barz:
bz1: "bz1"
bz2: "bz2"
Wenn Sie cnrm.cloud.google.com/state-into-spec: absent
festlegen, lautet die endgültige Spezifikation in der erstellten Kubernetes-Ressource:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Verwendung von cnrm.cloud.google.com/state-into-spec: absent
In den meisten Fällen sollten Sie cnrm.cloud.google.com/state-into-spec: absent
festlegen, um das Absent
-Verhalten für das Ausfüllen von spec
-Feldern zu erhalten. Im Folgenden sind die häufigsten Szenarien aufgeführt, in denen das Absent
-Befüllen von Vorteil ist.
Nicht spezifizierte Felder in einer Liste extern verwalten
Config Connector behandelt alle Listenfelder in der Kubernetes-Ressourcenspezifikation als atomare Felder. Daher werden Änderungen, die Sie außerhalb von Config Connector an einem untergeordneten Feld in der Liste vornehmen, standardmäßig von Config Connector rückgängig gemacht. Sie können diese Anmerkung jedoch verwenden, um Config Connector anzuweisen, Unterfelder in der Liste nicht mehr zu verwalten. Weitere Informationen finden Sie unter Verhalten von Listenfeldern in der Ressourcenspezifikation.
Konflikte zwischen Tools zur Konfigurationsverwaltung und Config Connector beheben
Wenn Sie Tools zur Konfigurationsverwaltung wie Config Sync oder Argo CD verwenden, kann es zu Konflikten zwischen dem Tool zur Konfigurationsverwaltung und Config Connector kommen. Ein Beispiel ist der Fehler KNV2005, der in der Anleitung zur Fehlerbehebung erläutert wird. Die Ursache für diese Art von Problemen ist folgende:
- Config Connector füllt nicht angegebene Werte in der Liste in der Spezifikation aus.
spec.bars[0].br2
ist ein Beispiel. - Sowohl Konfigurationsmanagementtools als auch Config Connector behandeln Listenfelder als atomar. Daher wird das hinzugefügte
spec.bars[0].br2
von Konfigurationsmanagementtools als Abweichung behandelt und entfernt, um dasdrift
zu korrigieren.
Um diese Probleme zu beheben, können Sie cnrm.cloud.google.com/state-into-spec:
absent
so festlegen, dass Config Connector das nicht angegebene Feld spec.bars[0].br2
nicht in die Spezifikation einfügt.
Probleme mit der GET/PUT-Symmetrie beheben
Die GET/PUT-Symmetrie bezieht sich auf ein Designprinzip in der REST API. Konkret bedeutet das, dass bei einer GET-Antwort, die als PUT-Anfrage an dieselbe URL gesendet wird, eine HTTP-Antwort 200 OK erwartet wird, ohne dass sich der Status der zugrunde liegenden REST-Ressource ändert.
Die von Config Connector in der Kubernetes-Ressourcenspezifikation ausgefüllten nicht angegebenen Felder sind das Ergebnis einer GET-Anfrage. Das bedeutet, dass Config Connector bei zukünftigen Abgleichvorgängen möglicherweise eine PUT-/PATCH-Anfrage an die zugrunde liegendeGoogle Cloud API sendet, die diese nicht angegebenen Feldwerte aus der GET-Anfrage enthält. Normalerweise ist das kein Problem. Es ist jedoch möglich, dass einigeGoogle Cloud -APIs die PUT-/PATCH-Anfrage aufgrund dieser nicht angegebenen Feldwerte ablehnen. Im selben Beispiel kann die Angabe von spec.barz.bz2
mit dem Wert „bz2“ zu einem HTTP-400-Clientfehler oder anderen unerwarteten Antworten führen, wenn die API-Implementierung gegen das GET/PUT-Symmetrieprinzip verstößt.
Um diese Art von Problemen zu vermeiden, können Sie die Einstellung cnrm.cloud.google.com/state-into-spec: absent
ausprobieren und prüfen, ob die Fehler bei der Zusammenführung verschwinden.
Beobachteter Status
Wenn Sie cnrm.cloud.google.com/state-into-spec: absent
festlegen müssen, Ihre Lösung aber von den ausgefüllten Werten aus nicht angegebenen Feldern abhängt, prüfen Sie, ob diese Felder im CRD-Schema unter status.observedState
vorhanden sind. Wenn sie unter status.observedState
aufgeführt sind, können Sie cnrm.cloud.google.com/state-into-spec: absent
festlegen und nach einer erfolgreichen Abgleichung weiterhin auf die Werte der nicht angegebenen Felder zugreifen.
Das Feld status.observedState
enthält den Livestatus der ausgewählten, beobachteten Felder der Ressource, die Config Connector bei der letzten erfolgreichen Abgleichsaktion erfasst hat. Die beobachteten Felder werden ausgewählt, wenn sie Abhängigkeiten von gängigen Anwendungsfällen sind, und sind berechnete spec
-Felder. Die beobachteten Felder finden Sie in den CRD-Schemas.
Wenn Sie die gewünschten beobachteten Felder nicht finden, prüfen Sie, ob ein Problem vorliegt, oder eröffnen Sie in der öffentlichen Problemverfolgung ein neues Problem.
Kinder mit Merge
-Unterstützung
Im Folgenden finden Sie alle Config Connector-Typen, die das Merge
-Befüllen unterstützen:
- 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
- Ordner
- 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
- Projekt
- PubSubLiteReservation
- PubSubSchema
- PubSubSubscription
- PubSubTopic
- RecaptchaEnterpriseKey
- RedisInstance
- ResourceManagerLien
- ResourceManagerPolicy
- RunJob
- RunService
- SQLDatabase
- SQLSSLCert
- SQLUser
- SecretManagerSecret
- SecretManagerSecretVersion
- Dienst
- ServiceDirectoryEndpoint
- ServiceDirectoryNamespace
- ServiceDirectoryService
- ServiceIdentity
- ServiceNetworkingConnection
- SourceRepoRepository
- SpannerDatabase
- SpannerInstance
- StorageBucket
- StorageBucketAccessControl
- StorageDefaultObjectAccessControl
- StorageNotification
- StorageTransferJob
- VPCAccessConnector
Bei den folgenden Arten wird das Merge
-Datensatzverhalten ab der entsprechenden Version nicht unterstützt:
Name des Kinds | Version |
---|---|
LoggingLogMetric | 1.118.1 |