Saat mengelola objek cluster, Config Sync akan memantau objek dan kumpulan konfigurasi di repo yang memengaruhi objek, serta memastikan bahwa keduanya disinkronkan. Topik ini menjelaskan cara mulai mengelola objek yang ada dan cara berhenti mengelola objek yang saat ini dikelola tanpa menghapus objek tersebut.
Objek dalam cluster dikelola oleh Config Sync jika memiliki anotasi
configmanagement.gke.io/managed: enabled
, dan anotasi
configsync.gke.io/resource-id
, yang melacak informasi grup, jenis,
namespace, dan nama objek, sudah benar.
Format anotasi configsync.gke.io/resource-id
adalah
GROUP_KIND_NAMESPACE_NAME
untuk objek yang tercakup dalam namespace, dan
GROUP_KIND_NAME
untuk objek yang tercakup dalam cluster.
Diagram alur berikut menjelaskan beberapa situasi yang menyebabkan objek menjadi terkelola atau tidak terkelola:
Diagram ini berisi tiga alur terpisah: 1) mulai mengelola objek, 2) berhenti mengelola objek, dan 3) menghapus objek yang dikelola.
- Saya ingin mulai mengelola objek. Apakah objek memiliki manifes? Atau dengan kata lain,
apakah objek memiliki konfigurasi di repo?
- Tidak: Buat konfigurasi untuk
objek. Config Sync menetapkan anotasi
configmanagement.gke.io/managed: enabled
, menetapkan anotasiconfigsync.gke.io/resource-id
agar cocok dengan objek, dan mulai mengelola objek. - Ya: Apakah konfigurasi menetapkan anotasi berikut?
configmanagement.gke.io/managed: disabled
- Tidak: Objek dikelola secara default.
- Ya: Edit konfigurasi untuk menghapus anotasi
configmanagement.gke.io/managed: disabled
. Saat perubahan dikirim ke repo sumber, Config Sync akan mendeteksi perubahan, menerapkan anotasiconfigmanagement.gke.io/managed: enabled
dan anotasiconfigsync.gke.io/resource-id
, lalu menerapkan konfigurasi.
- Tidak: Buat konfigurasi untuk
objek. Config Sync menetapkan anotasi
- Saya ingin berhenti mengelola objek, tetapi tidak menghapusnya.
- Edit konfigurasi untuk objek di repo, dan tetapkan anotasi
configmanagement.gke.io/managed: disabled
. Saat perubahan konfigurasi terdeteksi, Config Sync berhenti mengelola objek.
- Edit konfigurasi untuk objek di repo, dan tetapkan anotasi
- Saya ingin berhenti mengelola objek dan menghapusnya.
- Hapus konfigurasi objek dari repo. Saat Anda menghapus konfigurasi untuk objek yang sebelumnya dikelola, Config Sync akan menghapus objek dari semua cluster atau namespace tempat konfigurasi diterapkan.
Selain anotasi configmanagement.gke.io/managed: enabled
dan anotasi configsync.gke.io/resource-id
, Config Sync menerapkan label app.kubernetes.io/managed-by: configmanagement.gke.io
ke semua objek yang dikelolanya. Label ini memungkinkan Anda mencantumkan
semua objek dengan Config Sync dengan mudah.
Mengapa tidak menerapkan anotasi secara manual?
Config Sync menggunakan model deklaratif untuk menerapkan perubahan konfigurasi ke cluster Anda dengan membaca konfigurasi yang diinginkan dari repo Anda.
Jika Anda mencoba menerapkan anotasi secara manual (baik menggunakan perintah kubectl
atau Kubernetes API), Config Sync akan mengganti anotasi manual
secara otomatis dengan konten repo Anda.
Sebelum memulai
Contoh berikut dibuat berdasarkan Mulai menggunakan Config Sync. Sebelum memulai langkah-langkah berikut, ikuti panduan memulai cepat dan selesaikan semua langkah sebelum Menjelajahi dan menguji penginstalan Config Sync.
Mencantumkan semua objek terkelola
Untuk mencantumkan semua objek yang dikelola oleh Config Sync pada cluster atau namespace tertentu, gunakan pemilih label seperti berikut:
kubectl get object-type -n namespace -l "app.kubernetes.io/managed-by=configmanagement.gke.io"
Untuk mencantumkan semua objek yang tidak dikelola oleh Config Sync, gunakan pemilih label seperti ini:
kubectl get object-type -n namespace -l "app.kubernetes.io/managed-by!=configmanagement.gke.io"
Misalnya, perintah ini mencantumkan RoleBinding di namespace gamestore
yang
dikelola oleh Config Sync:
kubectl get rolebindings -n gamestore \ -l "app.kubernetes.io/managed-by=configmanagement.gke.io"
Outputnya mirip dengan hal berikut ini:
NAME ROLE AGE
configsync.gke.io:ns-reconciler ClusterRole/configsync.gke.io:ns-reconciler 34h
gamestore-admin ClusterRole/admin 34h
gamestore-webstore-admin ClusterRole/webstore-admin 34h
Perintah ini mencantumkan RoleBinding di namespace kube-system
yang tidak
dikelola oleh Config Sync:
kubectl get rolebindings -n kube-system \ -l "app.kubernetes.io/managed-by!=configmanagement.gke.io"
Outputnya mirip dengan hal berikut ini:
NAME AGE
fluentd-gcp-scaler-binding 2d21h
gce:cloud-provider 2d21h
heapster-binding 2d21h
metrics-server-auth-reader 2d21h
system::leader-locking-kube-controller-manager 2d21h
system::leader-locking-kube-scheduler 2d21h
system:controller:bootstrap-signer 2d21h
system:controller:cloud-provider 2d21h
system:controller:token-cleaner 2d21h
Mulai mengelola objek yang ada
Anda dapat membuat konfigurasi untuk objek Kubernetes yang ada, seperti namespace yang sudah ada di cluster Anda sebelum Anda menginstal Config Sync.
Namun, konfigurasi ini diabaikan kecuali jika objek memiliki anotasi
configmanagement.gke.io/managed: enabled
dan memiliki anotasi configsync.gke.io/resource-id
yang benar. Untuk objek yang ada, Anda harus menerapkan anotasi secara manual.
Khusus untuk namespace, Config Sync menerapkan konfigurasi yang membuat objek baru dalam namespace yang tidak diberi anotasi, dan menerapkan anotasi configmanagement.gke.io/managed: enabled
dan configsync.gke.io/resource-id
ke objek tersebut. Namun,
Config Sync menolak untuk mengubah atau menghapus objek cakupan cluster yang tidak diberi anotasi dari cluster. Hal ini diilustrasikan dalam diagram di
Bekerja dengan konfigurasi dari waktu ke waktu.
Contoh berikut menunjukkan cara mengelola objek Peran yang ada. Pertama, Anda membuat Peran secara manual, lalu mulai mengelolanya dengan Config Sync.
Buat Peran
myrole
di namespacegamestore
:kubectl create role -n gamestore myrole --verb=get --resource=pods
Melihat izin yang diberikan oleh Peran
myrole
:kubectl describe role -n gamestore myrole
Name: myrole Labels: <none> Annotations: <none> PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods [] [] [get]
Peran hanya memiliki izin untuk
get
Pod.Pada tahap ini, Role ada di cluster, tetapi Config Sync tidak mengetahuinya.
- Di terminal, buka clone lokal repo Anda.
Gunakan perintah berikut untuk membuat manifes YAML untuk
myrole
dan simpan manifes ke file baru bernamagamestore-myrole.yaml
.kubectl get role myrole -n gamestore -o yaml > gamestore-myrole.yaml
Edit file
gamestore-myrole.yaml
.- Hapus semua kolom di bawah kunci
metadata
, kecualiname
dannamespace
. - Tambahkan kata kerja
list
setelahget
di kolom daftarrules.verbs
.
Simpan perubahan. File yang dihasilkan memiliki konten berikut:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: myrole namespace: gamestore rules: - apiGroups: - "" resources: - pods verbs: - get - list
- Hapus semua kolom di bawah kunci
Lakukan perubahan pada repo.
Tunggu beberapa saat hingga Operator ConfigManagement melihat commit. Untuk memverifikasi bahwa Peran
myrole
kini dikelola oleh Config Sync, jalankankubectl describe
lagi.kubectl describe role myrole -n gamestore
Perhatikan anotasi configmanagement.gke.io/managed: enabled
, yang menunjukkan bahwa objek dikelola oleh Config Sync, dan anotasi configsync.gke.io/resource-id
, yang melacak informasi grup, jenis, namespace, dan nama. Perhatikan juga anotasi yang menampilkan jalur dan nama file di repo yang menyebabkan perubahan konfigurasi terbaru pada objek, dan hash Git yang merepresentasikan commit.
Name: myrole
Labels: app.kubernetes.io/managed-by=configmanagement.gke.io
configsync.gke.io/declared-version=v1
Annotations: config.k8s.io/owning-inventory: config-management-system_root-sync
configmanagement.gke.io/cluster-name: my-cluster
configmanagement.gke.io/managed: enabled
configmanagement.gke.io/source-path: config-sync-quickstart/multirepo/root/gamestore-myrole.yaml
configmanagement.gke.io/token: 747b843a7ddbd945c0616034a935cf648b58e7b5
configsync.gke.io/declared-fields: {"f:rules":{}}
configsync.gke.io/git-context: {"repo":"https://github.com/GoogleCloudPlatform/anthos-config-management-samples","branch":"main","rev":"HEAD"}
configsync.gke.io/manager: :root
configsync.gke.io/resource-id: rbac.authorization.k8s.io_role_gamestore_myrole
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
pods [] [] [get list]
Berhenti mengelola objek terkelola
Contoh ini menunjukkan cara berhenti mengelola objek yang saat ini dikelola Config Sync, seperti Peran myrole
di
Mulai mengelola objek yang ada.
Edit file
config-sync-quickstart/multirepo/root/rolebinding-gamestore-webstore-admin.yaml
di clone lokal repo Anda, lalu tambahkan bagianannotations:
yang cocok dengan teks tebal di bawah:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: annotations: configmanagement.gke.io/managed: disabled name: gamestore-webstore-admin namespace: gamestore subjects: - kind: ServiceAccount name: ns-reconciler-gamestore namespace: config-management-system roleRef: kind: ClusterRole name: webstore-admin apiGroup: rbac.authorization.k8s.io
Simpan file.
Buat commit Git dengan perubahan Anda, lalu kirim commit ke repositori Anda.
Tunggu beberapa saat hingga Config Sync mendeteksi dan menerapkan commit baru.
Gunakan perintah berikut untuk memverifikasi bahwa anotasi dan label
gamestore-webstore-admin
RoleBinding kosong. Config Sync tidak menetapkan anotasiconfigmanagement.gke.io/managed
kedisabled
pada objek.kubectl get rolebinding gamestore-webstore-admin -n gamestore -o yaml
apiVersion: rbac.authorization.k8s.io/v1 metadata: annotations: name: gamestore-webstore-admin namespace: gamestore subjects: - kind: ServiceAccount name: ns-reconciler-gamestore namespace: config-management-system roleRef: kind: ClusterRole name: webstore-admin apiGroup: rbac.authorization.k8s.io
Setelah memverifikasi bahwa objek kini dinonaktifkan, Anda dapat menghapus konfigurasi dari repositori dan memverifikasi bahwa objek yang kini tidak dikelola tidak dihapus dari namespace. Jika ingin mengelola objek lagi, Anda harus menambahkan kembali konfigurasinya ke repositori Anda. Oleh karena itu, Anda mungkin ingin membatalkan pengelolaan objek dan membiarkan konfigurasinya di repo.
Sekarang setelah objek tidak dikelola, objek tidak dibuat atau dibuat ulang di cluster baru atau yang sudah ada, dan objek tidak dihapus meskipun ada. Untuk melanjutkan pengelolaan objek yang sebelumnya Anda hentikan pengelolaannya, lihat contoh berikutnya, Melanjutkan pengelolaan objek yang sebelumnya tidak dikelola.
Melanjutkan pengelolaan objek yang sebelumnya tidak dikelola
Contoh ini menunjukkan cara melanjutkan pengelolaan objek yang sebelumnya Anda hapus dari pengelolaan, seperti dalam Berhenti mengelola objek yang ada. Hal ini
mengasumsikan bahwa Anda belum menghapus konfigurasi untuk
gamestore-webstore-admin
RoleBinding.
Jika Anda menghapus
gamestore-webstore-admin
RoleBinding dari repo Anda di commit terakhir, lakukan langkah-langkah berikut.Gunakan
git revert
untuk mengembalikan commit terakhir:git revert HEAD~1
Anda akan diminta untuk mengonfirmasi operasi pengembalian.
Kirimkan commit pengembalian ke repo Anda.
git push
Edit file
config-sync-quickstart/multirepo/root/rolebinding-gamestore-webstore-admin.yaml
di clone lokal repo Anda dan hapus anotasiconfigmanagement.gke.io/managed: disabled
. Simpan file.Commit dan kirim perubahan Anda. Config Sync melakukan hal berikut:
- Melihat perubahan
- Menerapkan anotasi
configmanagement.gke.io/managed: enabled
dan anotasiconfigsync.gke.io/resource-id
; objek kini dikelola. - Menerapkan konfigurasi, seperti yang akan terjadi pada objek terkelola mana pun.
Untuk memverifikasi bahwa objek kini dikelola, cantumkan anotasinya:
kubectl get rolebinding gamestore-webstore-admin -n gamestore -o yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: annotations: configmanagement.gke.io/cluster-name: my-cluster configmanagement.gke.io/managed: enabled configsync.gke.io/resource-id: rbac.authorization.k8s.io_rolebinding_gamestore_gamestore-webstore-admin ...
Berhenti mengelola namespace
Anda dapat berhenti mengelola namespace dengan cara yang sama seperti Anda berhenti mengelola jenis objek apa pun. Jika Anda ingin berhenti mengelola resource lain dalam namespace, lakukan langkah-langkah berikut:
Tambahkan anotasi
configmanagement.gke.io/managed:disabled
ke konfigurasi namespace dan semua konfigurasi di namespace yang sama. Semua objek dalam namespace harus memiliki anotasi ini.Lakukan commit dan kirim perubahan Anda ke repositori. Tunggu hingga Operator disinkronkan dengan repo.
Hapus resource yang tidak dikelola dari repositori.
Jika konfigurasi untuk konfigurasi terkelola ada dalam direktori namespace yang tidak terkelola, rekonsiliator mencatat error, tetapi konfigurasi lainnya terus disinkronkan secara normal.
Menghapus resource terkelola
Saat Anda menghapus resource individual dari sumber tepercaya, objek tersebut akan dihapus dari cluster saat Config Sync melakukan sinkronisasi berikutnya dari sumber tepercaya. Atau, Anda dapat mengaktifkan propagasi penghapusan yang memungkinkan Anda menghapus objek secara massal.
Menghapus objek satu per satu
Dengan perilaku default Config Sync, saat Anda menghapus objek dari sumber kebenaran, objek tersebut akan dihapus dari cluster saat Config Sync menyinkronkan dari sumber kebenaran.
Ada beberapa cara untuk memeriksa status Config Sync atau status objek tertentu:
Menghapus objek secara massal
Secara default, menghapus RootSync atau RepoSync akan menyebabkan Config Sync mengabaikan objek yang sebelumnya diterapkan dari sumber tepercaya. Atau, Anda dapat mengaktifkan propagasi penghapusan untuk menghapus semua objek yang diterapkan sebelumnya.
Saat Anda mengaktifkan propagasi penghapusan pada objek RootSync atau RepoSync, lalu menghapus objek tersebut, Config Sync akan otomatis menghapus setiap objek yang dikelola oleh RootSync atau RepoSync tersebut.
Propagasi penghapusan dapat mempermudah pembersihan resource, misalnya jika Anda bermigrasi ke namespace atau cluster baru, membersihkan setelah demo atau eksperimen, atau meng-uninstal aplikasi.
Opsi propagasi penghapusan
Penyebaran penghapusan dinonaktifkan secara default. Untuk mengaktifkan propagasi penghapusan, Anda
menambahkan anotasi configsync.gke.io/deletion-propagation-policy: Foreground
ke objek RootSync atau RepoSync, seperti dalam contoh berikut:
# example-rootsync.yaml
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
name: example-rootsync
namespace: config-management-system
annotations:
configsync.gke.io/deletion-propagation-policy: Foreground
spec:
sourceType: git
sourceFormat: unstructured
git:
repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
branch: main
dir: config-sync-quickstart/multirepo/root
auth: none
period: 30s
Atau, Anda dapat mengupdate RootSync atau RepoSync yang ada untuk menggunakan propagasi penghapusan dengan menjalankan perintah berikut:
RootSync
kubectl patch RootSync ROOTSYNC_NAME \
--namespace config-management-system \
--type merge \
--patch '{"metadata":{"annotations":{"configsync.gke.io/deletion-propagation-policy":"Foreground"}}}'
Ganti ROOTSYNC_NAME
dengan nama RootSync yang ingin Anda perbarui.
RepoSync
kubectl patch RepoSync REPOSYNC_NAME \
--namespace config-management-system \
--type merge \
--patch '{"metadata":{"annotations":{"configsync.gke.io/deletion-propagation-policy":"Foreground"}}}'
Ganti REPOSYNC_NAME
dengan nama RepoSync yang ingin Anda perbarui.
Untuk menonaktifkan propagasi penghapusan, hapus anotasi atau ubah
nilai menjadi configsync.gke.io/deletion-propagation-policy: Orphan
:
RootSync
kubectl patch RootSync ROOTSYNC_NAME \
--namespace config-management-system \
--type merge \
--patch '{"metadata":{"annotations":{"configsync.gke.io/deletion-propagation-policy":"Orphan"}}}'
Ganti ROOTSYNC_NAME
dengan nama RootSync yang ingin Anda perbarui.
RepoSync
kubectl patch RepoSync REPOSYNC_NAME \
--namespace config-management-system \
--type merge \
--patch '{"metadata":{"annotations":{"configsync.gke.io/deletion-propagation-policy":"Orphan"}}}'
Menyebarkan penghapusan objek
Contoh ini menunjukkan cara menerapkan propagasi penghapusan ke objek RootSync atau RepoSync, lalu menghapus RootSync atau RepoSync untuk menghapus semua objek yang dikelola oleh RootSync atau RepoSync.
RootSync
Terapkan anotasi ke objek RootSync untuk mengaktifkan propagasi penghapusan:
kubectl patch RootSync example-rootsync \ --namespace config-management-system \ --type merge \ --patch '{"metadata":{"annotations":{"configsync.gke.io/deletion-propagation-policy":"Foreground"}}}'
Hapus objek RootSync dan tunggu hingga Config Sync menghapusnya:
kubectl delete RootSync example-rootsync --namespace config-management-system --wait
Menghapus RootSync dapat memerlukan waktu beberapa menit.
RepoSync
Terapkan anotasi ke objek RepoSync untuk mengaktifkan propagasi penghapusan:
kubectl patch RepoSync example-reposync \ --namespace example-namespace \ --type merge \ --patch '{"metadata":{"annotations":{"configsync.gke.io/deletion-propagation-policy":"Foreground"}}}'
Hapus objek RepoSync dan tunggu hingga Config Sync menghapusnya:
kubectl delete RepoSync example-reposync --namespace example-namespace --wait
Penghapusan RepoSync dapat memerlukan waktu beberapa menit untuk selesai.
Mencegah penghapusan untuk objek Kubernetes
Setelah Anda menghapus objek Kubernetes dari repositori Git yang dikelola oleh Config Sync, objek ini juga dihapus dari cluster saat commit baru disinkronkan ke cluster.
Jika Anda ingin mencegah Config Sync menghapus objek saat konfigurasinya dihapus dari repositori Git, Anda dapat melakukan langkah-langkah berikut:
Tambahkan anotasi
client.lifecycle.config.k8s.io/deletion: detach
ke konfigurasi objek di repositori Git.Lakukan commit dan kirim perubahan di repositori Git.
Tunggu hingga perubahan disinkronkan ke cluster.
Setelah Anda menyelesaikan langkah-langkah ini, Config Sync tidak akan menghapus objek ini dari cluster saat konfigurasinya dihapus dari repositori Git, tetapi objek tersebut masih dapat dihapus oleh klien lain.
Mengabaikan objek di sumber tepercaya
Anda mungkin ingin Config Sync mengabaikan objek di sumber tepercaya Anda. Misalnya, konfigurasi fungsi kpt tidak boleh diterapkan ke cluster.
Untuk objek yang ingin diabaikan oleh Config Sync,
tambahkan anotasi
config.kubernetes.io/local-config: "true"
ke objek. Setelah Anda menambahkan anotasi ini, Config Sync akan mengabaikan objek ini seolah-olah objek tersebut dihapus dari sumber tepercaya. Resource dengan anotasi
local-config
yang ditetapkan ke nilai selain "false"
akan diperlakukan seolah-olah
ditetapkan ke "true"
dan diabaikan.