Ketika Config Sync mengelola objek cluster, objek itu dipantau dan untuk set konfigurasi dalam repo yang memengaruhi objek, dan memastikan bahwa yang sinkron. Topik ini menjelaskan cara memulai pengelolaan objek yang ada dan cara berhenti mengelola objek yang saat ini dikelola tanpa menghapus .
Sebuah objek dalam cluster dikelola oleh Config Sync jika memiliki
configmanagement.gke.io/managed: enabled
, dan
anotasi configsync.gke.io/resource-id
, yang melacak grup, jenis,
nama objek, serta informasi nama objek sudah benar.
Format anotasi configsync.gke.io/resource-id
adalah
GROUP_KIND_NAMESPACE_NAME
untuk objek cakupan namespace, dan
GROUP_KIND_NAME
untuk objek cakupan 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) perhentian mengelola objek, dan 3) menghapus objek terkelola.
- saya ingin mulai mengelola sebuah objek. Apakah objek memiliki manifes? Dengan kata lain,
apakah objek memiliki konfigurasi di repo?
- Tidak: Buat konfigurasi untuk
objek tersebut. Config Sync menetapkan anotasi
configmanagement.gke.io/managed: enabled
, menetapkanconfigsync.gke.io/resource-id
agar cocok dengan objek, dan mulai mengelola . - Ya: Apakah konfigurasi menetapkan anotasi berikut?
configmanagement.gke.io/managed: disabled
- Tidak: Objek dikelola secara default.
- Ya: Edit konfigurasi untuk menghapus
configmanagement.gke.io/managed: disabled
. Saat perubahan dikirimkan ke repo sumber, Config Sync melihat perubahan, menerapkan anotasiconfigmanagement.gke.io/managed: enabled
dan anotasiconfigsync.gke.io/resource-id
, dan menerapkan konfigurasi.
- Tidak: Buat konfigurasi untuk
objek tersebut. Config Sync menetapkan anotasi
- Saya ingin berhenti mengelola objek, tetapi tidak ingin menghapusnya.
- Mengedit konfigurasi untuk objek dalam repo, dan menyetel anotasi
configmanagement.gke.io/managed: disabled
. Saat perubahan konfigurasi terdeteksi, Config Sync akan berhenti mengelola objek.
- Mengedit konfigurasi untuk objek dalam repo, dan menyetel anotasi
- Saya ingin berhenti mengelola objek dan menghapusnya.
- Hapus konfigurasi objek dari repo. Saat Anda menghapus konfigurasi untuk suatu yang sebelumnya dikelola, Config Sync menghapus 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
mengelola. Label ini memungkinkan
Anda untuk dengan mudah
semua objek berdasarkan Config Sync.
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 kubectl
atau Kubernetes API), Config Sync akan menggantikan perintah
secara otomatis dengan isi repo Anda.
Sebelum memulai
Contoh-contoh berikut dibuat berdasarkan Memulai Config Sync. Sebelum Anda memulai langkah berikut, ikuti panduan memulai dan selesaikan semua langkah-langkah sebelum Pelajari dan uji penginstalan Config Sync.
Mencantumkan semua objek terkelola
Untuk menampilkan daftar semua objek yang dikelola oleh Config Sync pada cluster tertentu atau gunakan pemilih label seperti berikut ini:
kubectl get object-type -n namespace -l "app.kubernetes.io/managed-by=configmanagement.gke.io"
Untuk menampilkan daftar semua objek yang tidak dikelola oleh Config Sync, gunakan label pemilih 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 bukan
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 menginstal Config Sync.
Namun, konfigurasi ini diabaikan kecuali jika objek memiliki anotasi
configmanagement.gke.io/managed: enabled
dan memiliki configsync.gke.io/resource-id
yang benar
anotasi. Untuk objek yang ada, Anda perlu menerapkan anotasi secara manual.
Khusus untuk namespace, Config Sync juga menerapkan konfigurasi
yang membuat objek baru dalam sebuah namespace yang tidak diberi anotasi, dan menerapkan
anotasi configmanagement.gke.io/managed: enabled
dan configsync.gke.io/resource-id
pada objek tersebut. Namun,
Config Sync menolak untuk mengubah atau menghapus setiap anotasi
objek bercakupan cluster dari sebuah cluster. Hal ini digambarkan
dalam diagram di
Menangani konfigurasi dari waktu ke waktu.
Contoh berikut menunjukkan cara mengelola objek Role yang ada. Pertama, Anda membuat Peran secara manual, lalu mulai mengelolanya dengan Sinkronisasi Konfigurasi.
Buat Peran
myrole
di namespacegamestore
:kubectl create role -n gamestore myrole --verb=get --resource=pods
Lihat 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, Peran 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
kecuali untukname
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
Commit perubahan ke repo.
Tunggu beberapa saat sampai ConfigManagement Operator melihat commit. Kepada memastikan bahwa Peran
myrole
sekarang 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 menunjukkan jalur dan nama file di repo yang menyebabkan
perubahan konfigurasi terbaru pada objek, dan {i>hash<i} Git yang mewakili
dan melakukan 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 digunakan oleh Config Sync
yang saat ini dikelola, seperti Peran myrole
dalam
Mulai kelola objek yang ada.
Edit
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 ini: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 repo Anda.
Tunggu beberapa saat hingga Config Sync memperhatikan dan menerapkan dan melakukan commit.
Gunakan perintah berikut untuk memverifikasi anotasi dan label
gamestore-webstore-admin
RoleBinding kosong. Sinkronisasi Konfigurasi tidak menyetel anotasiconfigmanagement.gke.io/managed
kedisabled
di objek tersebut.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 memastikan bahwa objek telah dinonaktifkan, Anda dapat menghapus konfigurasi dari repositori dan pastikan objek yang sekarang tidak dikelola tidak dihapus dari namespace. Jika Anda ingin mengelola objek ini lagi, Anda harus menambahkan konfigurasinya kembali ke repositori Anda. Karena itu, Anda mungkin ingin tidak mengelola objek dan membiarkan konfigurasinya di repo.
Setelah tidak dikelola, objek tidak akan dibuat atau dibuat ulang pada cluster yang ada, dan tidak dihapus meskipun ada. Untuk melanjutkan pengelolaan objek yang sebelumnya Anda hentikan pengelolaannya, lihat contoh berikutnya, Lanjutkan pengelolaan objek yang sebelumnya tidak dikelola.
Lanjutkan pengelolaan objek yang sebelumnya tidak dikelola
Contoh ini menunjukkan cara melanjutkan pengelolaan objek yang sebelumnya Anda hapus
seperti dalam Berhenti mengelola objek yang ada. Ini
mengasumsikan bahwa Anda belum menghapus konfigurasi untuk
gamestore-webstore-admin
RoleBinding.
Jika Anda menghapus RoleBinding
gamestore-webstore-admin
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.
Kirim commit balik ke repo Anda.
git push
Edit
config-sync-quickstart/multirepo/root/rolebinding-gamestore-webstore-admin.yaml
dalam clone lokal repo Anda dan hapus anotasiconfigmanagement.gke.io/managed: disabled
. Simpan file.Commit dan kirim perubahan Anda. Config Sync melakukan hal berikut:
- Memperhatikan perubahan
- Menerapkan anotasi
configmanagement.gke.io/managed: enabled
dan anotasiconfigsync.gke.io/resource-id
; sekarang objek telah dikelola. - Menerapkan konfigurasi, seperti yang akan terjadi pada objek terkelola.
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 berhenti mengelola semua jenis objek. Jika Anda ingin menghentikan mengelola sumber daya lain dalam namespace, lakukan langkah-langkah berikut:
Menambahkan anotasi
configmanagement.gke.io/managed:disabled
untuk konfigurasi namespace dan semua konfigurasi dalam namespace yang sama. Semua objek di namespace harus memiliki anotasi ini.Commit dan kirim perubahan Anda ke repo. Tunggu Operator untuk menyinkronkan dengan repo.
Hapus resource yang tidak dikelola dari repositori.
Jika ada konfigurasi untuk konfigurasi terkelola di dalam direktori {i>namespace<i} yang tidak dikelola, error rekonsiliasi log, tetapi konfigurasi lain terus disinkronkan secara normal.
Hapus resource terkelola
Jika Anda menghapus resource individual dari sumber tepercaya, objek tersebut dihapus dari cluster saat Config Sync berikutnya disinkronkan dari sumber yang sesungguhnya. Atau, Anda dapat mengaktifkan penyebaran penghapusan yang memungkinkan Anda menghapus objek secara massal.
Menghapus objek satu per satu
Dengan perilaku default Config Sync, saat Anda menghapus objek dari sumber tepercaya, objek tersebut akan dihapus dari cluster saat Config Sync disinkronkan dari sumber tepercaya.
Ada beberapa cara untuk memeriksa status Config Sync atau status objek tertentu:
- Gunakan
nomos status
. - Gunakan
kubectl
untuk memeriksa resource. - Gunakan perintah
gcloud alpha anthos config sync resources
. - Gunakan dasbor Config Sync.
Menghapus objek secara massal
Secara default, menghapus RootSync atau RepoSync menyebabkan Config Sync mengabaikan objek yang sebelumnya diterapkan dari sumber kebenaran. Atau, Anda dapat mengaktifkan penerapan penghapusan untuk menghapus semua objek yang diterapkan sebelumnya.
Saat Anda mengaktifkan penerapan penghapusan pada objek RootSync atau RepoSync, menghapus objek tersebut, Config Sync secara otomatis menghapus setiap objek yang dikelola oleh RootSync atau RepoSync tersebut.
Propagasi penghapusan dapat membantu mempermudah pembersihan resource, misalnya jika Anda bermigrasi ke namespace atau cluster baru, membersihkan setelah demo atau bereksperimen, atau meng-uninstal aplikasi.
Opsi penerapan penghapusan
Propagasi delasi dinonaktifkan secara {i>default<i}. Untuk mengaktifkan penerapan penghapusan, Anda
menambahkan anotasi configsync.gke.io/deletion-propagation-policy: Foreground
ke objek RootSync atau RepoSync, seperti pada 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: init
dir: config-sync-quickstart/multirepo/root
auth: none
period: 30s
Atau, Anda dapat mengupdate RootSync atau RepoSync yang ada untuk menggunakan penghapusan deployment 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
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
yang ingin Anda perbarui.
Untuk menonaktifkan penerapan penghapusan, hapus anotasi atau ubah
nilai ke 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
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"}}}'
Menerapkan penghapusan objek
Contoh ini menunjukkan cara menerapkan penyebaran penghapusan ke RootSync atau RepoSync lalu menghapus RootSync atau RepoSync untuk menghapus semua objek dikelola oleh RootSync atau RepoSync.
RootSync
Terapkan anotasi ke objek RootSync untuk mengaktifkan penerapan 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 Config Sync menghapusnya:
kubectl delete RootSync example-rootsync --namespace config-management-system --wait
Penghapusan RootSync dapat memerlukan waktu beberapa menit.
RepoSync
Terapkan anotasi ke objek RepoSync untuk mengaktifkan penerapan 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 Config Sync menghapusnya:
kubectl delete RepoSync example-reposync --namespace example-namespace --wait
Penghapusan RepoSync dapat memerlukan waktu beberapa menit.
Mencegah penghapusan objek Kubernetes
Setelah Anda menghapus objek Kubernetes dari repositori Git yang dikelola oleh Sinkronisasi Konfigurasi, 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 untuk konfigurasi objek di repositori Git.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 ketika konfigurasinya dihapus dari repositori Git, tetapi data masih dapat dihapus oleh klien lain.
Mengabaikan objek dalam sumber kebenaran
Anda mungkin ingin Config Sync mengabaikan objek dalam sumber tepercaya Anda. Sebagai contoh, Fungsi kpt konfigurasi tidak boleh diterapkan ke cluster.
Untuk objek yang ingin diabaikan oleh Config Sync,
tambahkan
config.kubernetes.io/local-config: "true"
anotasi ke objek. Setelah Anda menambahkan anotasi ini, Config Sync akan mengabaikan
objek ini seolah-olah
dibuang dari sumber kebenaran. Referensi dengan
Anotasi local-config
yang disetel ke nilai selain "false"
diperlakukan sebagai
jika disetel ke "true"
dan diabaikan.