Halaman ini menunjukkan cara memecah satu repositori root menjadi dua atau lebih repositori root dengan aman. Langkah-langkah ini juga dapat diterapkan ke repositori namespace.
Repositori yang disinkronkan oleh Config Sync mengacu pada kombinasi repositori Git, cabang, revisi, dan direktori.
Jika ada banyak resource, misalnya lebih dari 5.000, di repositori root Anda, Config Sync mungkin tidak berfungsi dengan baik karena dua alasan berikut:
- Objek ResourceGroup mungkin melebihi batas ukuran objek etcd. Objek ResourceGroup mencatat Grup, Jenis, Namespace, dan Nama semua resource di repositori Git. Memiliki sejumlah besar resource akan menghasilkan objek ResourceGroup yang besar.
- Penyelarasan semua resource memerlukan waktu yang lebih lama daripada repositori dengan jumlah resource yang lebih sedikit. Config Sync menerapkan resource secara berurutan ke cluster. Terkadang, resource tidak dapat diterapkan dengan berhasil pada percobaan pertama, dan Config Sync harus mencoba lagi penerapannya.
Jika mengalami masalah ini, Anda dapat memecah repositori root dari satu menjadi beberapa repositori sehingga setiap repositori root memiliki lebih sedikit resource.
Menguraikan repositori root yang tidak terstruktur
Objek RootSync digunakan untuk menjelaskan langkah-langkahnya. Langkah-langkah ini juga dapat diterapkan ke objek RepoSync.
1.21.0 atau yang lebih baru (Direkomendasikan)
Metode ini berfungsi untuk Config Sync versi 1.21.0 dan yang lebih baru karena finalizer yang ditambahkan dalam rilis tersebut, yang menghentikan pengelolaan objek saat objek RootSync atau RepoSync dihapus. Sebelumnya, objek yatim piatu memiliki metadata persisten, yang mencegahnya dikelola oleh klien lain atau objek RootSync atau RepoSync baru.
Asumsikan bahwa repositori root Anda disinkronkan oleh objek RootSync single-root-sync
.
Setelah menguraikan repositori, Anda akan memiliki dua repositori root. Satu disinkronkan oleh objek RootSync root-sync-1
, sedangkan yang lain disinkronkan oleh objek RootSync root-sync-2
.
Untuk memecah repositori, ikuti langkah-langkah berikut:
Pastikan RootSync
single-root-sync
memiliki nilai anotasiconfigsync.gke.io/deletion-propagation-policy
Orphan
atau tidak ditetapkan. Nilai default jika tidak ditetapkan sama dengan "Orphan". Setelan ini memastikan objek tidak dihapus.Hapus RootSync
single-root-sync
:kubectl delete rootsync single-root-sync -n config-management-system
Siapkan repositori baru Anda dengan mengikuti langkah-langkah berikut:
- Buat repositori baru atau direktori baru di repositori Git yang ada.
- Pindahkan resource ke repositori baru atau direktori baru.
- Jika Anda memisahkan repositori root menjadi lebih dari dua repositori, ulangi langkah-langkah ini sesuai kebutuhan.
Lakukan commit dan kirim perubahan:
git commit -am 'add configuration for the new root repository'
Terapkan objek RootSync
root-sync-1
danroot-sync-2
. Dengan demikian, repositori atau direktori baru akan disinkronkan sehingga objek yang ada di cluster dikelola oleh objek RootSync baruroot-sync-1
danroot-sync-2
:apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured git: repo: NEW_ROOT_REPOSITORY revision: NEW_ROOT_REVISION branch: NEW_ROOT_BRANCH dir: "NEW_ROOT_DIRECTORY" auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL # secretRef should be omitted if the auth type is none, gcenode, or gcpserviceaccount. secretRef: name: git-creds
Ganti kode berikut:
NEW_ROOT_REPOSITORY
: URL repositori Git yang akan digunakan sebagai repositori root baru. Anda dapat memasukkan URL menggunakan protokol HTTPS atau SSH. Misalnya,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
menggunakan protokol HTTPS. Jika Anda tidak memasukkan protokol, URL akan diperlakukan sebagai URL HTTPS.NEW_ROOT_REVISION
: (Opsional) revisi Git (tag atau hash) dari repositori root baru yang akan diperiksa.NEW_ROOT_BRANCH
: (Opsional) cabang repositori root baru yang akan disinkronkan.NEW_ROOT_DIRECTORY
: (Opsional) jalur di repositori Git ke direktori root baru yang berisi konfigurasi yang ingin Anda sinkronkan.ROOT_AUTH_TYPE
: nilai ini harus sama dengan objek RootSync/root-sync yang ada.ROOT_EMAIL
: nilai ini harus sama dengan objek RootSync/root-sync yang ada.
Tunggu hingga objek RootSync
root-sync-1
yang baru disinkronkan. Anda dapat memeriksa statusnya menggunakan perintah berikut:nomos status
Versi apa pun
Metode ini berfungsi untuk semua versi Config Sync, termasuk versi 1.21.0, tetapi sebaiknya Anda menggunakan metode yang tersedia di versi 1.21.0 dan yang lebih baru karena memerlukan lebih sedikit langkah. Jika versi Config Sync Anda lebih lama dari 1.21.0, Anda dapat menggunakan metode ini sebagai gantinya.
Asumsikan bahwa repositori root Anda disinkronkan oleh objek RootSync root-sync
.
Setelah menguraikan repositori, Anda akan memiliki dua repositori root. Satu disinkronkan oleh objek RootSync root-sync
, sedangkan yang lain disinkronkan oleh objek RootSync root-sync-1
.
Untuk memecah repositori, ikuti langkah-langkah berikut:
Di repositori root yang ada, pilih resource yang akan dipindahkan ke repositori atau direktori lain dan tambahkan anotasi
configmanagement.gke.io/managed: disabled
ke resource tersebut. Anotasi ini memastikan bahwa objek yang ada di cluster tidak terpengaruh saat Anda memindahkan konfigurasinya dari satu repositori ke repositori lain. Jika menggunakan format Kustomize atau diagram helm, Anda dapat memilih sekitar setengah dari dasar dan menambahkan anotasi umum ke filekustomization.yaml
, seperti dalam contoh ini:# kustomization.yaml commonAnnotations: configmanagement.gke.io/managed: disabled
Commit dan kirim perubahan:
sh git commit -am 'disable Config Sync management on subset of the configuration'
Tunggu hingga objek
root-sync
RootSync yang ada disinkronkan menggunakan perintah berikut:nomos status
Siapkan repositori kedua Anda dengan mengikuti langkah-langkah berikut:
- Buat repositori baru atau direktori baru di repositori Git yang ada.
- Salin resource dengan anotasi
configmanagement.gke.io/managed: disabled
ke repositori baru atau direktori baru. - Hapus anotasi
configmanagement.gke.io/managed: disabled
di repositori atau direktori baru. - Jika Anda memisahkan repositori root menjadi lebih dari dua repositori, ulangi langkah-langkah ini sesuai kebutuhan.
Lakukan commit dan kirim perubahan:
git commit -am 'add configuration for the new root repository'
Terapkan objek
root-sync-1
RootSync untuk menyinkronkan repositori atau direktori baru sehingga objek yang ada di cluster akan dikelola oleh objekroot-sync-1
RootSync baru.apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync-1 namespace: config-management-system spec: sourceFormat: unstructured git: repo: NEW_ROOT_REPOSITORY revision: NEW_ROOT_REVISION branch: NEW_ROOT_BRANCH dir: "NEW_ROOT_DIRECTORY" auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL # secretRef should be omitted if the auth type is none, gcenode, or gcpserviceaccount. secretRef: name: git-creds
Ganti kode berikut:
NEW_ROOT_REPOSITORY
: URL repositori Git yang akan digunakan sebagai repositori root baru. Anda dapat memasukkan URL menggunakan protokol HTTPS atau SSH. Misalnya,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
menggunakan protokol HTTPS. Jika Anda tidak memasukkan protokol, URL akan diperlakukan sebagai URL HTTPS.NEW_ROOT_REVISION
: (Opsional) revisi Git (tag atau hash) dari repositori root baru yang akan diperiksa.NEW_ROOT_BRANCH
: (Opsional) cabang repositori root baru yang akan disinkronkan.NEW_ROOT_DIRECTORY
: (Opsional) jalur di repositori Git ke direktori root baru yang berisi konfigurasi yang ingin Anda sinkronkan.ROOT_AUTH_TYPE
: nilai ini harus sama dengan objek RootSync/root-sync yang ada.ROOT_EMAIL
: nilai ini harus sama dengan objek RootSync/root-sync yang ada.
Tunggu hingga objek RootSync
root-sync-1
yang baru disinkronkan. Anda dapat memeriksa statusnya menggunakan perintah berikut:nomos status
Hapus resource dengan anotasi
configmanagement.gke.io/managed: disabled
dari repositori asli. Lakukan commit dan kirim perubahan:git commit -am 'remove configuration managed by the new root repository'
Tunggu hingga objek
root-sync
RootSync yang ada disinkronkan menggunakan perintah berikut:nomos status
Menguraikan repositori root hierarkis
Langkah-langkah untuk menguraikan repositori hierarkis serupa dengan langkah-langkah untuk menguraikan repositori tidak terstruktur.
Ada tiga perbedaan utama:
Repositori root baru (atau direktori baru) juga harus hierarkis. Anda harus menyalin direktori
system/
danclusterregistry/
yang ada ke repositori root baru (atau direktori baru).Resource dalam namespace tidak dapat tersebar di beberapa repositori. Jika tidak, rekonsiliator yang berbeda akan bersaing untuk mengelola namespace.
Objek RootSync
root-sync-1
harus menggunakanspec.sourceFormat: hierarchical
.
Karena kami merekomendasikan repositori tidak terstruktur, Anda juga dapat mempertimbangkan untuk mengonversi repositori hierarkis menjadi repositori tidak terstruktur sebelum memecahnya.