Mengabaikan kolom yang tidak ditentukan
Halaman ini menjelaskan perilaku pengisian default kolom spec
dan cara
mengubah perilaku default dari Merge
ke perilaku yang direkomendasikan
Absent
. Halaman ini mungkin tidak berlaku jika Anda menggunakan CRD yang ditambahkan di
versi 1.114.0 dan yang lebih baru karena CRD tersebut hanya menggunakan perilaku Absent
. Untuk
daftar CRD yang mendukung Merge
, lihat bagian CRD dengan dukungan Merge
di halaman ini.
spec
perilaku pengisian kolom
Saat Config Connector membuat resource, kolom yang tidak ditentukan dalam spesifikasi resource Kubernetes dapat memiliki dua perilaku pengisian default yang berbeda: Absent
dan Merge
.
Tidak ada
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 yang lebih baru,
perilaku pengisian default adalah Absent
. Ini juga merupakan satu-satunya perilaku pengisian yang didukung CRD tersebut. Nilai anotasi
cnrm.cloud.google.com/state-into-spec
adalah absent
dalam CR resource
ini.
Gabungkan
Merge
adalah perilaku yang tidak didukung di CRD yang ditambahkan di 1.114.0 dan yang lebih baru. Kolom
spec
mengambil nilai dari API setelah rekonsiliasi berhasil
kecuali jika tidak dapat dibaca. Detail selengkapnya dapat ditemukan di bagian Mengelola kolom secara eksternal.
Untuk CRD yang didukung di Config Connector versi 1.113.0 dan yang lebih lama, perilaku pengisian default adalah Merge
. Untuk mengetahui daftar CRD yang mendukung Merge
, lihat bagian CRD dengan dukungan Merge
di halaman ini. Nilai default anotasi
cnrm.cloud.google.com/state-into-spec
adalah merge
di CR resource
ini. Anda juga dapat mengonfigurasi perilaku pengisian agar menjadi Absent
dengan mengikuti
petunjuk di Lewati pengisian kolom yang tidak ditentukan ke dalam
spesifikasi.
Secara default, di CR resource ini, kolom yang belum ditentukan dalam YAML asli Anda selalu muncul dalam spesifikasi CR. Artinya, saat 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, sementara 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 dengan berhasil dan resource berstatus UpToDate:
spec:
foo: "foo"
bar: "bar"
Karena kompleksitas interaksi antara Config Connector dan APIGoogle Cloud , Anda mungkin ingin mengubah perilaku default ini dan melewati pengisian spesifikasi resource Kubernetes dengan kolom yang tidak ditentukan.
Lewati pengisian kolom yang tidak ditentukan ke dalam spesifikasi
Anda dapat melewati pengisian kolom yang tidak ditentukan ke dalam spesifikasi untuk CRD yang didukung di Config Connector versi 1.113.0 dan yang lebih lama dengan salah satu cara berikut:
- Konfigurasi penggantian
stateIntoSpec
tingkat cluster atau tingkat namespace menjadiAbsent
. - Tentukan nilai anotasi
cnrm.cloud.google.com/state-into-spec
sebagaiabsent
untuk resource.
Mengonfigurasi penggantian stateIntoSpec
tingkat cluster atau tingkat namespace
Saat menginstal Config Connector, atau mengupdate penginstalan Config Connector,
Anda dapat mengonfigurasi penggantian stateIntoSpec
tingkat cluster atau tingkat namespace
menjadi Absent
di CR ConfigConnector atau CR ConfigConnectorContext.
spec:
stateIntoSpec: Absent
Hal ini membuat perilaku pengisian kolom spec
Absent
default untuk setiap resource baru yang dibuat di cluster atau di namespace saat Anda tidak menentukan anotasi cnrm.cloud.google.com/state-into-spec
di YAML resource baru. 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 anotasi
cnrm.cloud.google.com/state-into-spec
, dan mengikuti logika
di bawah untuk menentukan nilai anotasi:
- Gunakan nilai anotasi
cnrm.cloud.google.com/state-into-spec
secara langsung jika ditentukan dan valid. - Jika anotasi tidak ditentukan, gunakan nilai yang sesuai dari kolom
stateIntoSpec
di CR ConfigConnectorContext. - Jika CR ConfigConnectorContext tidak ada atau kolom
stateIntoSpec
tidak ditentukan, gunakan nilai kolomstateIntoSpec
yang sesuai di CR ConfigConnector. - Jika CR ConfigConnector tidak ada atau kolom
stateIntoSpec
tidak ditentukan, gunakan perilaku default berdasarkan CRD yang dijelaskan dalam Perilaku pengisian kolomspec
.
Perhatikan bahwa satu-satunya CRD perilaku pengisian yang ditambahkan di versi 1.114.0 dan yang lebih baru
mengikuti Absent
terlepas dari anotasi cnrm.cloud.google.com/state-into-spec
atau kolom stateIntoSpec
di CR ConfigConnector atau CR ConfigConnectorContext.
Jika Anda telah membuat resource, tetapi ingin mengubah perilaku pengisian kolom spec
menjadi Absent
, Anda harus:
Pastikan penggantian
stateIntoSpec
tingkat cluster atau tingkat namespace menjadiAbsent
di CR ConfigConnector atau CR ConfigConnectorContext.Melepaskan dan mendapatkan resource. Pastikan konfigurasi YAML yang digunakan untuk akuisisi tidak memiliki anotasi
cnrm.cloud.google.com/state-into-spec
.
Menentukan anotasi cnrm.cloud.google.com/state-into-spec
tingkat resource
Saat membuat file YAML, Anda dapat menentukan nilai anotasi
cnrm.cloud.google.com/state-into-spec
sebagai absent
. Tindakan ini akan melewati
pengisian 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 spec. Anotasi ini
bersifat tetap, yang berarti Anda tidak dapat memperbarui nilai anotasi dari resource
Config Connector yang ada.
Jika Anda telah membuat resource, tetapi ingin mengubah nilai anotasi ini untuk perilaku pengisian yang berbeda, Anda harus mengikuti langkah-langkah berikut:
Edit dan tambahkan anotasi
cnrm.cloud.google.com/deletion-policy: abandon
ke resource Kubernetes yang ada untuk memastikan penghapusan pada langkah berikutnya tidak akan menghapus resource Google Cloud yang mendasarinya.Hapus resource dari cluster Kubernetes.
Tambahkan anotasi
cnrm.cloud.google.com/state-into-spec: absent
ke dalam YAML resource.(Opsional) hapus
cnrm.cloud.google.com/deletion-policy: abandon
dari YAML.Terapkan YAML yang telah 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
Selain itu, asumsikan Anda telah menentukan spesifikasi di YAML sebagai:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Kemudian, secara default, spesifikasi yang diisi dalam resource Kubernetes yang dibuat mungkin adalah:
spec:
foo1: "foo1"
foo2: "foo2"
bars:
- br1: "1_br1"
br2: "1_br2"
- br1: "2_br1"
br2: "2_br2"
barz:
bz1: "bz1"
bz2: "bz2"
Jika Anda menetapkan cnrm.cloud.google.com/state-into-spec: absent
, spesifikasi akhir
dalam resource Kubernetes yang dibuat adalah:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Kapan menggunakan cnrm.cloud.google.com/state-into-spec: absent
Dalam sebagian besar kasus, Anda sebaiknya menetapkan
cnrm.cloud.google.com/state-into-spec: absent
untuk mendapatkan perilaku pengisian
Absent
untuk kolom spec
. Berikut adalah skenario paling umum yang akan mendapatkan manfaat dari perilaku pengisian Absent
.
Mengelola kolom yang tidak ditentukan dalam daftar secara eksternal
Config Connector memperlakukan semua kolom daftar dalam spesifikasi resource Kubernetes sebagai kolom atomik. Akibatnya, secara default, perubahan yang Anda buat pada sub-bidang dalam daftar dari luar Config Connector akan dikembalikan oleh Config Connector. Namun, Anda dapat menggunakan anotasi ini untuk membatalkan pengelolaan sub-field dalam daftar oleh Config Connector. Untuk mengetahui informasi selengkapnya, lihat Perilaku untuk kolom daftar dalam spesifikasi resource.
Menyelesaikan konflik antara alat pengelolaan konfigurasi dan Config Connector
Jika Anda menggunakan alat pengelolaan konfigurasi seperti Config Sync atau Argo CD, Anda mungkin melihat pertentangan antara alat pengelolaan konfigurasi dan Config Connector. Contohnya adalah error KNV2005 yang dijelaskan dalam panduan pemecahan masalah. Penyebab utama jenis masalah ini adalah karena:
- Config Connector akan mengisi dan menetapkan nilai default yang tidak ditentukan dalam daftar di
spec,
spec.bars[0].br2
adalah contohnya. - Baik alat pengelolaan konfigurasi maupun Config Connector memperlakukan kolom daftar sebagai
atomik, sehingga
spec.bars[0].br2
yang ditambahkan diperlakukan sebagai penyimpangan oleh alat pengelolaan konfigurasi dan akan dihapus untuk memperbaikidrift
.
Untuk mengatasi masalah ini, Anda dapat menetapkan cnrm.cloud.google.com/state-into-spec:
absent
sehingga Config Connector tidak menambahkan kolom yang tidak ditentukan
spec.bars[0].br2
ke dalam spesifikasi.
Menyelesaikan masalah simetri GET/PUT
Simetri GET/PUT mengacu pada prinsip desain di REST API. Secara khusus, hal ini berarti saat respons GET dikirim sebagai permintaan PUT ke URL yang sama, hasil yang diharapkan adalah respons HTTP 200 OK tanpa perubahan pada status resource REST yang mendasarinya.
Kolom yang tidak ditentukan yang diisi oleh Config Connector dalam spesifikasi resource Kubernetes adalah hasil dari permintaan GET. Artinya, pada rekonsiliasi di masa mendatang, Config Connector dapat mengirim permintaan PUT/PATCH keGoogle Cloud API pokok, dengan nilai kolom yang tidak ditentukan ini dipelajari dari permintaan GET. Hal ini biasanya tidak menjadi masalah, tetapi ada kemungkinan beberapa
Google Cloud API akan menolak permintaan PUT/PATCH karena nilai kolom yang tidak ditentukan ini. Dalam contoh yang sama, spec.barz.bz2
yang diisi
dengan nilai "bz2" dapat menghasilkan error klien HTTP 400 atau respons
tak terduga lainnya jika penerapan API melanggar prinsip simetri GET/PUT.
Untuk menghindari masalah kategori ini, Anda dapat bereksperimen dengan setelan cnrm.cloud.google.com/state-into-spec: absent
dan memeriksa apakah error selama rekonsiliasi akan hilang.
Status yang Diamati
Jika Anda perlu menyetel cnrm.cloud.google.com/state-into-spec: absent
, tetapi
solusi Anda bergantung pada nilai yang diisi dari kolom yang tidak ditentukan, periksa apakah kolom ini ada di bagian status.observedState
dalam skema CRD. Jika diwakili di bawah status.observedState
, Anda dapat menetapkan cnrm.cloud.google.com/state-into-spec: absent
dan tetap mengakses nilai kolom yang tidak ditentukan setelah rekonsiliasi berhasil.
Kolom status.observedState
berisi status aktif kolom yang dipilih dan diamati dari resource yang diamati Config Connector dalam rekonsiliasi terakhir yang berhasil. Kolom yang diamati dipilih jika merupakan
dependensi kasus penggunaan umum, dan merupakan kolom spec
yang dihitung. Anda dapat menemukan
kolom yang diamati dalam skema CRD.
Jika Anda tidak dapat menemukan kolom yang diamati yang Anda inginkan, periksa masalah yang ada atau buka masalah baru di issue tracker publik.
Jenis dengan dukungan Merge
Berikut adalah semua jenis Config Connector yang mendukung perilaku pengisian 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
- Folder
- 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
- Project
- PubSubLiteReservation
- PubSubSchema
- PubSubSubscription
- PubSubTopic
- RecaptchaEnterpriseKey
- RedisInstance
- ResourceManagerLien
- ResourceManagerPolicy
- RunJob
- RunService
- SQLDatabase
- 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
yang dimulai dari
versi yang sesuai:
Nama Jenis | Version |
---|---|
LoggingLogMetric | 1.118.1 |