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 menjadi Absent.
  • Tentukan nilai anotasi cnrm.cloud.google.com/state-into-spec sebagai absent 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:

  1. Gunakan nilai anotasi cnrm.cloud.google.com/state-into-spec secara langsung jika ditentukan dan valid.
  2. Jika anotasi tidak ditentukan, gunakan nilai yang sesuai dari kolom stateIntoSpec di CR ConfigConnectorContext.
  3. Jika CR ConfigConnectorContext tidak ada atau kolom stateIntoSpec tidak ditentukan, gunakan nilai kolom stateIntoSpec yang sesuai di CR ConfigConnector.
  4. Jika CR ConfigConnector tidak ada atau kolom stateIntoSpec tidak ditentukan, gunakan perilaku default berdasarkan CRD yang dijelaskan dalam Perilaku pengisian kolom spec.

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:

  1. Pastikan penggantian stateIntoSpec tingkat cluster atau tingkat namespace menjadi Absent di CR ConfigConnector atau CR ConfigConnectorContext.

  2. 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:

  1. 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.

  2. Hapus resource dari cluster Kubernetes.

  3. Tambahkan anotasi cnrm.cloud.google.com/state-into-spec: absent ke dalam YAML resource.

  4. (Opsional) hapus cnrm.cloud.google.com/deletion-policy: abandon dari YAML.

  5. 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:

  1. Config Connector akan mengisi dan menetapkan nilai default yang tidak ditentukan dalam daftar di spec, spec.bars[0].br2 adalah contohnya.
  2. 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 memperbaiki drift.

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