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

  1. Menggunakan nilai anotasi cnrm.cloud.google.com/state-into-spec secara langsung jika ditentukan dan valid.
  2. Jika anotasi tidak ditentukan, gunakan nilai atribut stateIntoSpec di CR ConfigConnectorContext.
  3. Jika CR ConfigConnectorContext tidak ada atau kolom stateIntoSpec tidak ditentukan, gunakan nilai yang sesuai dari kolom stateIntoSpec pada CR ConfigConnector.
  4. Jika CR ConfigConnector tidak ada atau kolom stateIntoSpec tidak ditentukan, gunakan perilaku default berdasarkan CRD yang dijelaskan dalam spec 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:

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

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

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

  2. Hapus resource dari cluster Kubernetes.

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

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

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

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

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