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

  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 kolom spec 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:

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

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

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

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

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