Halaman ini menjelaskan cara mengonfigurasi cluster dan objek cakupan cluster. Anda dapat baca juga tentang mengonfigurasi namespace dan objek cakupan namespace.
Mengonfigurasi cluster dan objek cakupan cluster
Di repositori tidak terstruktur, Anda dapat mengatur konfigurasi untuk cluster dan cakupan cluster objek dengan cara yang paling nyaman bagi Anda. Semua konfigurasi diatur dengan cara ini berlaku untuk setiap cluster yang terdaftar di Config Sync.
Dalam repositori hierarki, semua
untuk cluster dan objek cakupan cluster terletak di dalam
Direktori cluster/
. Semua konfigurasi dalam cluster/
berlaku untuk setiap cluster
terdaftar di Config Sync.
Mengonfigurasi CustomResourceDefinitions
Config Sync memungkinkan Anda menyinkronkan CustomResourceDefinitions (CRD) dengan cara yang sama seperti Anda akan menyinkronkan sumber daya lainnya. Ada beberapa hal yang perlu diperhatikan saat menyinkronkan CRD:
CRD dalam repositori hierarkis, bahkan saat mendeklarasikan Custom dengan namespace Resource, harus ditempatkan di direktori
cluster/
.Pembaruan pada CRD dan CustomResources yang sesuai tidak terjadi di urutan yang dapat diprediksi. Jika Anda memodifikasi CRD dan CustomResources yang sesuai dalam commit yang sama, tidak ada ekspektasi bahwa update CRD akan terjadi sebelum Pembaruan Sumber Daya Kustom. Hal ini dapat menyebabkan
nomos status
melaporkan error sementara untuk jangka waktu singkat, hingga CustomResource dan CRD ada di dalam cluster.Config Sync tidak mengizinkan penghapusan CRD jika ada CustomResource dalam repo akan bergantung padanya. Untuk menghapus CRD, Anda juga perlu melepaskan CustomResource. Sebaiknya hapus keduanya di commit yang sama untuk repo tersebut.
Anda dapat menyinkronkan CustomResource tanpa menyinkronkan CRD, selama Anda bisa menjamin bahwa CRD sudah ada dalam cluster.
Membatasi cluster mana yang terpengaruh oleh konfigurasi
Secara default, Config Sync menerapkan konfigurasi ke setiap cluster yang terdaftar. Namun, jika Anda perlu menerapkan konfigurasi hanya ke subset cluster, Anda dapat menambahkan anotasi cluster-name-selector atau konfigurasi ClusterSelector ke repositori Anda.
Anotasi cluster-name-selector
menyediakan cara mudah untuk menentukan subset
cluster yang akan menerapkan konfigurasi. Opsi ini hanya mendukung pemilihan cluster
menurut nama.
Objek ClusterSelector
mendukung pemilihan cluster berdasarkan label, tetapi ini
membutuhkan konfigurasi
yang lebih kompleks.
Melakukan konfigurasi menggunakan anotasi cluster-name-selector
Anda dapat menerapkan konfigurasi ke subset cluster dengan
anotasi configsync.gke.io/cluster-name-selector
. Anda dapat menggunakan
anotasi ini untuk menerapkan konfigurasi ke kumpulan cluster, yang ditandai dengan nama cluster.
Nilai anotasi adalah daftar nama cluster target yang dipisahkan koma.
Anda dapat menerapkan anotasi pada objek cakupan cluster dan cakupan namespace
objek terstruktur dalam jumlah besar. Objek namespace dipilih saat anotasi cocok dengan cluster
dan kapan namespace tempat cluster berada juga dipilih.
Pilih satu cluster
Konfigurasi berikut membuat Peran bernama namespace-reader
yang menentukan kumpulan
izin akses untuk membaca namespace. Peran ini hanya diterapkan pada cluster
yang memiliki nama cluster-1
.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Pilih daftar cluster
Konfigurasi berikut membuat Peran yang sama seperti contoh sebelumnya, tetapi metode ini
Peran hanya diterapkan pada cluster yang memiliki nama cluster-1
,
cluster-2
, atau cluster-3
.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1,cluster-2,cluster-3
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Melakukan konfigurasi menggunakan objek ClusterSelector
ClusterSelector adalah jenis konfigurasi khusus yang menggunakan Kubernetes labelSelectors. Anda dapat menggunakan ClusterSelector untuk membatasi cluster mana dengan konfigurasi tertentu berlaku, berdasarkan label cluster. Anda juga dapat menggunakan ClusterSelectors untuk membatasi cluster mana yang membuat instance objek cakupan namespace.
Seperti labelSelectors lainnya, ClusterSelectors beroperasi menggunakan logika AND. Sejak ClusterSelector menggunakan logika DAN, objek hanya dipilih jika cocok dengan semua label yang Anda tentukan.
Konfigurasi ClusterSelector tidak dipertahankan di cluster. Sebaliknya, Anda mereferensikan di konfigurasi lain menggunakan anotasi, dan konfigurasi itu hanya berlaku untuk yang sesuai dengan ClusterSelector.
Sebelum Anda dapat menggunakan ClusterSelectors, setiap cluster harus memiliki sekumpulan label yang dapat dipilih. Metadata cluster ditetapkan dalam Konfigurasi cluster di sumber kebenaran Anda.
Selanjutnya, tambahkan label ke cluster, buat ClusterSelector, lalu merujuknya dalam konfigurasi lain.
Menambahkan label ke cluster
Untuk menggunakan ClusterSelectors, setiap cluster harus memiliki kumpulan label yang dapat
dipilih. Dalam repositori yang tidak terstruktur, konfigurasi Cluster dapat disimpan
secara arbitrer di direktori konfigurasi
atau direktori turunannya.
Dalam repositori hierarkis, konfigurasi Cluster disimpan di clusterregistry/
saat ini.
Untuk menerapkan konfigurasi ke cluster, kolom metadata.name
di konfigurasi Cluster
harus sesuai dengan
Kolom clusterName
objek ConfigManagement.
Contoh konfigurasi Cluster berikut mendeklarasikan bahwa cluster-2
memiliki
label environment: prod
dan location: central
.
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-2
labels:
environment: prod
location: central
Anda juga dapat menerapkan anotasi menggunakan konfigurasi Cluster.
Membuat ClusterSelector
ClusterSelector hanya memilih cluster dengan label atau kombinasi tertentu
label. Dalam repositori yang tidak terstruktur, ClusterSelectors dapat disimpan
secara bebas di direktori sinkronisasi
atau direktori turunannya. Secara hierarkis
repositori, ClusterSelectors disimpan di clusterregistry/
level teratas
dalam repositori.
ClusterSelector berikut hanya memilih cluster dengan
Label environment: prod
.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-env-prod
spec:
selector:
matchLabels:
environment: prod
ClusterSelector berikut memilih cluster apa pun dengan
Label location: central
atau location: west
.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-central-or-west
spec:
selector:
matchExpressions:
- key: location
operator: In
values:
- central
- west
ClusterSelector tidak akan berpengaruh hingga Anda merujuknya pada konfigurasi lain.
Mereferensikan ClusterSelector
Untuk mereferensikan ClusterSelector dalam konfigurasi lain, setel anotasi
configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME
.
Konfigurasi berikut membuat ClusterRole yang disebut namespace-reader
, yang
menentukan kumpulan izin untuk membaca namespace. ClusterRole ini hanya
dibuat instance-nya pada cluster yang sesuai dengan ClusterSelector selector-env-prod
.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-reader
annotations:
configmanagement.gke.io/cluster-selector: selector-env-prod
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Membatasi cluster yang terpengaruh oleh konfigurasi cakupan namespace
Secara default, Config Sync menerapkan konfigurasi yang diwarisi oleh namespace ke namespace tersebut di setiap cluster tempatnya berada. Anda dapat menggunakan ClusterSelector menerapkan konfigurasi hanya ke subset dari cluster tersebut.
Misalnya, Anda dapat mengonfigurasi cluster secara berbeda berdasarkan lokasi geografisnya
atau lokasi geografis klien mereka. Konfigurasi ini dapat
berguna untuk pelokalan atau untuk kepatuhan hukum. Contoh di bagian ini
terapkan konfigurasi khusus lokalitas ke hanya cluster dengan label location: france
.
Konfigurasi Cluster berikut menambahkan label location: france
ke
cluster bernama cluster-1
:
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-1
labels:
location: france
Membuat konfigurasi ClusterSelector yang merujuk ke label yang ingin Anda
pilih. ClusterConfig berikut memilih label location: france
:
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-location-france
spec:
selector:
matchLabels:
location: france
ClusterSelector tidak berpengaruh hingga Anda mereferensikannya dalam konfigurasi lain.
Konfigurasi RoleBinding berikut hanya memilih cluster yang cocok dengan
ClusterSelector selector-location-france
. Konfigurasi ini mungkin berguna,
misalnya, jika pedoman kepatuhan hanya mengizinkan layanan tertentu
untuk melihat informasi tentang cluster di wilayah geografis yang ditentukan.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: viewers
annotations:
configmanagement.gke.io/cluster-selector: selector-location-france
subjects:
- kind: Group
name: system:serviceaccounts:foo
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
Jika Anda menempatkan konfigurasi ini di namespace abstrak atau direktori namespace, seperti
sebagai namespaces/eng
, atribut ini diterapkan ke namespace yang mewarisinya, tetapi hanya
pada cluster dengan label location: france
.
Langkah selanjutnya
- Pelajari lebih lanjut cara mengonfigurasi namespace dan objek cakupan namespace