Mengabaikan kolom yang tidak ditentukan
Halaman ini menjelaskan perilaku pengisian default kolom spec
dan caranya
untuk mengubah perilaku default dari Merge
ke perilaku yang disarankan
Absent
. Halaman ini mungkin tidak berlaku jika Anda menggunakan CRD yang ditambahkan dalam
versi 1.114.0 dan yang lebih baru karena CRD tersebut hanya menggunakan perilaku Absent
. Sebagai
daftar CRD yang mendukung Merge
, lihat CRD dengan Merge
dukungan pada halaman ini.
spec
kolom mengisi perilaku
Saat Config Connector membuat resource, kolom yang belum ditetapkan di
Spesifikasi resource Kubernetes mungkin memiliki dua perilaku pengisian default yang berbeda:
Absent
dan Merge
.
Absen
Absent
adalah perilaku yang direkomendasikan. Config Connector tidak akan mengisi
kolom yang tidak ditentukan ke dalam spesifikasi.
Untuk CRD yang ditambahkan di versi 1.114.0 dan
nanti,
perilaku pengisian default adalah Absent
. Ini juga satu-satunya
perilaku yang didukung oleh CRD tersebut. Nilai atribut
Anotasi cnrm.cloud.google.com/state-into-spec
adalah absent
dalam resource ini
CR.
Gabungkan
Merge
adalah perilaku yang tidak didukung di CRD yang ditambahkan di versi 1.114.0 dan yang lebih baru. Tujuan
Kolom spec
mengambil nilai dari API setelah rekonsiliasi berhasil
kecuali jika tidak dapat dibaca. Detail selengkapnya dapat ditemukan di Kelola kolom
secara eksternal.
Untuk CRD yang didukung dalam versi Config Connector
1.113.0
dan sebelumnya, perilaku pengisian default adalah Merge
. Untuk daftar CRD yang
mendukung Merge
, lihat CRD dengan dukungan Merge
bagian dari halaman ini. Nilai default atribut
Anotasi cnrm.cloud.google.com/state-into-spec
adalah merge
dalam resource ini
CR. Anda juga dapat mengonfigurasi perilaku pengisian menjadi Absent
dengan mengikuti
petunjuk di Lewati mengisi bidang yang tidak ditentukan ke dalam
spesifikasi.
Secara default, dalam CR resource ini, kolom yang belum ditentukan dalam
YAML asli selalu muncul dalam spesifikasi CR. Ini berarti ketika Anda menjalankan
kubectl get <resource kind> <resource name> -oyaml
, banyak kolom dalam spesifikasi
tidak ada dalam YAML yang diterapkan.
Sebagai contoh, asumsikan skema CRD memungkinkan Anda menentukan dua kolom bernama foo
dan
bar
dalam spesifikasi, sedangkan file YAML yang diterapkan hanya memiliki foo
yang ditentukan:
spec:
foo: "foo"
Anda akan melihat kolom lain bernama bar
muncul di CR jika YAML diterapkan
berhasil dan sumber dayanya
UpToDate:
spec:
foo: "foo"
bar: "bar"
Karena kerumitan interaksi antara Config Connector dan Google Cloud API, sebaiknya ubah perilaku default ini dan lewati mengisi spesifikasi resource Kubernetes dengan kolom yang tidak ditentukan.
Lewati pengisian kolom yang tidak ditentukan ke spesifikasi
Anda dapat melewati pengisian kolom yang tidak ditentukan ke dalam spesifikasi untuk CRD yang didukung dalam Konektor Konfigurasi versi 1.113.0 dan sebelumnya dengan salah satu cara berikut:
- Konfigurasikan penggantian
stateIntoSpec
tingkat cluster atau level namespace agar menjadiAbsent
. - Tentukan nilai anotasi
cnrm.cloud.google.com/state-into-spec
sebagaiabsent
untuk resource.
Mengonfigurasi penggantian stateIntoSpec
tingkat cluster atau namespace
Saat menginstal Config Connector, atau memperbarui penginstalan Config Connector,
Anda dapat mengonfigurasi penggantian stateIntoSpec
level cluster atau namespace
menjadi Absent
di CR ConfigConnector atau CR ConfigConnectorContext.
spec:
stateIntoSpec: Absent
Hal ini menjadikan Absent
kolom spec
default yang mengisi perilaku untuk setiap
resource yang dibuat di cluster atau di namespace saat Anda tidak menentukan
anotasi cnrm.cloud.google.com/state-into-spec
di resource baru
YAML. Artinya, Config Connector akan melewati pengisian kolom yang tidak ditentukan ke dalam
spesifikasi resource Kubernetes
untuk resource ini.
Kolom stateIntoSpec
tidak memiliki nilai default. Config Connector akan
menentukan perilaku pengisian kolom spec
berdasarkan nilai atribut
anotasi cnrm.cloud.google.com/state-into-spec
, dan mengikuti logika
di bawah untuk menentukan nilai anotasi:
- Menggunakan nilai anotasi
cnrm.cloud.google.com/state-into-spec
secara langsung jika ditentukan dan valid. - Jika anotasi tidak ditentukan, gunakan nilai atribut
stateIntoSpec
di CR ConfigConnectorContext. - Jika CR ConfigConnectorContext tidak ada atau kolom
stateIntoSpec
tidak ditentukan, gunakan nilai yang sesuai dari kolomstateIntoSpec
pada CR ConfigConnector. - Jika CR ConfigConnector tidak ada atau kolom
stateIntoSpec
tidak ditentukan, gunakan perilaku default berdasarkan CRD yang dijelaskan dalamspec
perilaku pengisian kolom.
Perhatikan bahwa satu-satunya perilaku CRD yang terisi yang ditambahkan dalam versi 1.114.0 dan
nanti
ikuti adalah Absent
terlepas dari cnrm.cloud.google.com/state-into-spec
atau kolom stateIntoSpec
di ConfigConnector CR atau
CR ConfigConnectorContext.
Jika Anda sudah membuat resource, tetapi ingin mengubah kolom spec
mengisi perilaku ke Absent
, Anda harus:
Pastikan penggantian
stateIntoSpec
tingkat cluster atau tingkat namespace menjadiAbsent
di CR ConfigConnector atau CR ConfigConnectorContext.Abaikan dan dapatkan Infrastruktur Cloud. Pastikan konfigurasi YAML yang digunakan untuk akuisisi tidak memiliki
cnrm.cloud.google.com/state-into-spec
.
Menentukan anotasi cnrm.cloud.google.com/state-into-spec
level resource
Saat membuat file YAML, Anda dapat menentukan nilai
cnrm.cloud.google.com/state-into-spec
sebagai absent
. Ini akan melewati
mengisi kolom yang tidak ditentukan ke dalam spesifikasi resource Kubernetes:
metadata:
annotations:
cnrm.cloud.google.com/state-into-spec: absent
Anotasi ini memiliki nilai default merge
jika tidak ditentukan, yang berarti
Config Connector mengisi semua kolom yang tidak ditentukan ke dalam spesifikasi. Anotasi ini
tidak dapat diubah, yang berarti Anda tidak dapat memperbarui nilai anotasi
resource Config Connector.
Jika Anda sudah membuat resource, tetapi ingin mengubah nilainya untuk perilaku pengisian yang berbeda, Anda harus mengikuti langkah-langkah berikut:
Mengedit dan menambahkan anotasi
cnrm.cloud.google.com/deletion-policy: abandon
ke resource Kubernetes yang ada untuk memastikan penghapusan pada langkah berikutnya tidak menghapus resource Google Cloud yang mendasarinya.Hapus resource dari cluster Kubernetes.
Menambahkan anotasi
cnrm.cloud.google.com/state-into-spec: absent
ke YAML resource Anda.(Opsional) hapus
cnrm.cloud.google.com/deletion-policy: abandon
dari YAML.Terapkan YAML yang diperbarui.
Untuk menjelaskan lebih lanjut perbedaan yang diperkenalkan oleh anotasi ini, asumsikan ada spesifikasi dengan skema berikut:
foo1: string
foo2: string
bars:
- bar:
br1: string
br2: string
barz:
bz1: string
bz2: string
Juga asumsikan bahwa Anda telah menentukan spesifikasi dalam YAML sebagai:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Kemudian secara default, spesifikasi yang terisi dalam resource Kubernetes yang dibuat mungkin:
spec:
foo1: "foo1"
foo2: "foo2"
bars:
- br1: "1_br1"
br2: "1_br2"
- br1: "2_br1"
br2: "2_br2"
barz:
bz1: "bz1"
bz2: "bz2"
Meskipun jika Anda menetapkan cnrm.cloud.google.com/state-into-spec: absent
, spesifikasi akhir
dalam resource Kubernetes yang dibuat akan menjadi:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Kapan menggunakan cnrm.cloud.google.com/state-into-spec: absent
Dalam kebanyakan kasus, Anda ingin mengatur
cnrm.cloud.google.com/state-into-spec: absent
untuk mendapatkan Absent
yang mengisi
untuk kolom spec
. Berikut adalah skenario paling umum
yang akan menguntungkan
dari perilaku pengisian Absent
.
Mengelola kolom yang tidak ditentukan dalam daftar secara eksternal
Config Connector memperlakukan semua kolom daftar di spesifikasi resource Kubernetes sebagai atomik kolom. Akibatnya, secara {i>default<i}, perubahan dilakukan pada sub-kolom dalam daftar dari di luar Config Connector akan dikembalikan oleh Config Connector. Namun, Anda dapat menggunakan anotasi ini agar Config Connector tidak mengelola subkolom dalam daftar. Sebagai Informasi selengkapnya, lihat Perilaku untuk kolom daftar di referensi spesifikasi.
Menyelesaikan pertarungan antara alat manajemen konfigurasi dan Config Connector
Jika Anda menggunakan alat manajemen konfigurasi seperti Sinkronisasi Konfigurasi atau Argo CD, Anda mungkin melihat perkelahian antara konfigurasi dan Config Connector. Contohnya adalah KNV2005 kesalahan yang dijelaskan dalam panduan pemecahan masalah. Akar masalah dari jenis masalah ini adalah karena:
- Config Connector akan mengisi dan menetapkan default nilai yang tidak ditentukan dalam daftar di
spesifikasi,
spec.bars[0].br2
adalah contohnya. - Baik alat manajemen konfigurasi maupun Config Connector memperlakukan kolom daftar sebagai
atomik, sehingga
spec.bars[0].br2
yang ditambahkan diperlakukan sebagai penyimpangan berdasarkan konfigurasi dan akan dihapus untuk memperbaikidrift
.
Untuk mengatasi masalah ini, Anda dapat menetapkan cnrm.cloud.google.com/state-into-spec:
absent
agar Config Connector tidak menambahkan kolom yang tidak ditentukan
spec.bars[0].br2
ke spesifikasi.
Menyelesaikan masalah simetri GET/PUT
Simetri GET/PUT mengacu pada prinsip desain di REST API. Secara khusus, terlihat berarti ketika respons GET dikirim sebagai permintaan PUT ke URL yang sama, hasilnya adalah respons HTTP 200 OK tanpa perubahan status resource REST.
Kolom yang belum ditentukan diisi oleh Config Connector di resource Kubernetes
spesifikasi adalah hasil dari permintaan GET. Artinya, pada masa mendatang
rekonsiliasi,
Config Connector dapat mengirim permintaan PUT/PATCH ke server yang
Google Cloud API, dengan nilai kolom yang tidak ditentukan ini yang dipelajari dari GET
permintaan. Ini biasanya bukan masalah, tetapi ada kemungkinan beberapa
Google Cloud API akan menolak permintaan PUT/PATCH karena
nilai kolom yang tidak ditentukan. Dalam contoh yang sama, spec.barz.bz2
yang diisi
dengan nilai "bz2" dapat mengakibatkan kesalahan klien HTTP 400 atau
respons jika implementasi API melanggar prinsip simetri GET/PUT.
Untuk menghindari kategori masalah ini, Anda dapat bereksperimen setelan
cnrm.cloud.google.com/state-into-spec: absent
dan periksa apakah error selama
rekonsiliasi akan hilang.
Status yang Diamati
Jika Anda perlu menyetel cnrm.cloud.google.com/state-into-spec: absent
, tetapi
bergantung pada nilai yang terisi dari kolom yang tidak ditentukan, periksa apakah
ada di bawah status.observedState
dalam skema CRD. Jika mereka
diwakili dalam status.observedState
, Anda dapat menetapkan
cnrm.cloud.google.com/state-into-spec: absent
dan masih mengakses nilai
isian yang tidak ditentukan setelah rekonsiliasi berhasil.
Kolom status.observedState
berisi status aktif dari yang dipilih,
kolom resource yang diamati oleh Config Connector.
rekonsiliasi yang sukses. Kolom yang diamati akan dipilih jika
dependensi dari kasus penggunaan umum, dan merupakan kolom spec
yang dikomputasi. Anda dapat menemukan
isian yang diamati
dalam skema CRD.
Jika Anda tidak dapat menemukan kolom yang diamati yang diinginkan, periksa masalah yang ada atau membuka masalah baru dalam isu publik pelacak kami.
Jenis dengan dukungan Merge
Berikut adalah semua jenis Config Connector yang mendukung pengisian Merge
perilaku:
- 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
- Folder
- 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
- Project
- PubSubLiteReservation
- PubSubSchema
- PubSubSubscription
- PubSubTopic
- RecaptchaEnterpriseKey
- RedisInstance
- ResourceManagerLien
- ResourceManagerPolicy
- RunJob
- {i>RunService<i}
- SQLDatabase
- SQLInstance
- SQLSSLCert
- SQLUser
- SecretManagerSecret
- SecretManagerSecretVersion
- Layanan
- ServiceDirectoryEndpoint
- ServiceDirectoryNamespace
- ServiceDirectoryService
- ServiceIdentity
- ServiceNetworkingConnection
- SourceRepoRepository
- SpannerDatabase
- SpannerInstance
- StorageBucket
- StorageBucketAccessControl
- StorageDefaultObjectAccessControl
- StorageNotification
- StorageTransferJob
- VPCAccessConnector
Jenis berikut tidak mendukung perilaku pengisian Merge
mulai dari
versi yang sesuai:
Nama Jenis | Version |
---|---|
LoggingLogMetric | 1.118.1 |