Mengabaikan kolom yang tidak ditentukan
Halaman ini menjelaskan perilaku pengisian default kolom spec
dan cara
mengubah perilaku default dari Merge
menjadi perilaku yang direkomendasikan
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
. Untuk
daftar CRD yang mendukung Merge
, lihat bagian CRD dengan dukungan
Merge
di halaman ini.
Perilaku pengisian kolom spec
Saat Config Connector membuat resource, kolom yang tidak ditentukan dalam spec resource Kubernetes dapat memiliki dua perilaku pengisian default yang berbeda: Absent
dan Merge
.
Tidak ada
Absent
adalah perilaku yang direkomendasikan. Konektor Konfigurasi 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 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
dalam CR
resource ini. Anda juga dapat mengonfigurasi perilaku pengisian menjadi Absent
dengan mengikuti
petunjuk di Lewati pengisian kolom yang tidak ditentukan ke dalam spec.
Secara default, dalam CR resource ini, kolom yang belum ditentukan dalam
YAML asli Anda akan 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, sedangkan file YAML yang diterapkan hanya menentukan foo
:
spec:
foo: "foo"
Anda akan melihat kolom lain bernama bar
muncul di CR jika YAML berhasil diterapkan dan resource UpToDate:
spec:
foo: "foo"
bar: "bar"
Karena kompleksitas interaksi antara Config Connector dan Google Cloud API, Anda mungkin ingin mengubah perilaku default ini dan melewati pengisian spesifikasi resource Kubernetes dengan kolom yang tidak ditentukan.
Melewati 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:
- Konfigurasikan penggantian
stateIntoSpec
level cluster atau level 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 menjadikan Absent
sebagai kolom spec
default yang mengisi perilaku untuk resource baru
yang dibuat di cluster atau di namespace jika 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 spec 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 kolomspec
yang mengisi perilaku.
Perhatikan bahwa satu-satunya CRD perilaku pengisian yang ditambahkan di versi 1.114.0 dan
yang lebih baru
adalah Absent
, terlepas dari anotasi cnrm.cloud.google.com/state-into-spec
atau kolom stateIntoSpec
di CR ConfigConnector atau
CR ConfigConnectorContext.
Jika sudah 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.Menghentikan dan memperoleh 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
Konektor Konfigurasi mengisi semua kolom yang tidak ditentukan ke dalam spesifikasi. Anotasi ini
tidak dapat diubah, yang berarti Anda tidak dapat memperbarui nilai anotasi resource Konektor Konfigurasi
yang ada.
Jika sudah 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 spec dengan skema berikut:
foo1: string
foo2: string
bars:
- bar:
br1: string
br2: string
barz:
bz1: string
bz2: string
Asumsikan juga 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 diisi di 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"
Sementara 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
Pada umumnya, 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 subkolom dalam daftar dari di luar Config Connector akan dikembalikan oleh Config Connector. Namun, Anda dapat menggunakan anotasi ini untuk mengizinkan Config Connector tidak mengelola subkolom dalam daftar. Untuk mengetahui informasi selengkapnya, lihat Perilaku untuk kolom daftar dalam spesifikasi resource.
Menyelesaikan konflik antara alat pengelolaan konfigurasi dan Config Connector
Jika menggunakan alat pengelolaan konfigurasi seperti Config Sync atau Argo CD, Anda mungkin melihat konflik 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 dalam spec,
spec.bars[0].br2
adalah contohnya. - Alat pengelolaan konfigurasi dan Config Connector memperlakukan kolom daftar sebagai
atomik, sehingga
spec.bars[0].br2
yang ditambahkan diperlakukan sebagai drift 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 Konektor Konfigurasi tidak menambahkan kolom spec.bars[0].br2
yang tidak ditentukan 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 dan diisi oleh Config Connector dalam spesifikasi resource
Kubernetes adalah hasil dari permintaan GET. Artinya, dalam rekonsiliasi mendatang, Config Connector dapat mengirim permintaan PUT/PATCH ke Google Cloud API yang mendasarinya, dengan nilai kolom yang tidak ditentukan ini dipelajari dari permintaan GET. Hal ini biasanya tidak menjadi masalah, tetapi mungkin 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 menyebabkan error klien HTTP 400 atau respons
yang tidak terduga lainnya jika penerapan API melanggar prinsip simetri GET/PUT.
Untuk menghindari kategori masalah ini, Anda dapat bereksperimen dengan menetapkan
cnrm.cloud.google.com/state-into-spec: absent
dan memeriksa apakah error selama
rekonsiliasi akan hilang.
Status yang Diamati
Jika Anda perlu menetapkan 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 ditampilkan
di bagian 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 resource yang dipilih dan diamati 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 diinginkan, periksa masalah yang ada atau buka masalah baru di issue tracker publik.
Jenis dengan dukungan Merge
Berikut adalah semua jenis Konektor Konfigurasi yang mendukung perilaku pengisian Merge
:
- 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
- RunService
- 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 |