Memecah repositori menjadi beberapa repositori

Halaman ini menunjukkan cara membagi satu repositori root dengan aman menjadi dua atau beberapa repositori root. Langkah-langkah tersebut juga dapat diterapkan pada repositori namespace.

Repositori yang disinkronkan oleh Config Sync mengacu pada kombinasi repositori Git, cabang, revisi, dan direktori.

Jika resource dalam jumlah besar, misalnya lebih dari 5.000, di repositori root Anda, Config Sync mungkin tidak akan berfungsi dengan baik karena dua alasan berikut:

  1. Objek ResourceGroup mungkin melebihi batas ukuran objek etcd. Objek ResourceGroup merekam Grup, Kind, Namespace, dan Nama dari semua resource di repositori Git. Memiliki resource dalam jumlah besar akan menghasilkan objek ResourceGroup yang besar.
  2. Sinkronisasi semua resource memerlukan waktu lebih lama daripada repositori dengan jumlah resource yang lebih kecil. Config Sync menerapkan resource secara berurutan ke cluster. Terkadang, resource tidak berhasil diterapkan untuk pertama kalinya, dan Config Sync harus mencoba menerapkannya lagi.

Saat mengalami masalah ini, Anda dapat membagi repositori root dari satu menjadi beberapa sehingga setiap repositori root memiliki lebih sedikit resource.

Memecah repositori root yang tidak terstruktur

Objek RootSync digunakan untuk menjelaskan langkah-langkahnya. Langkah-langkah ini juga dapat diterapkan pada objek RepoSync.

Asumsikan bahwa repositori root Anda disinkronkan oleh objek RootSync root-sync. Setelah memecahnya, Anda memiliki dua repositori {i>root<i}. Satu disinkronkan oleh objek RootSync root-sync sedangkan satunya disinkronkan oleh objek RootSync root-split.

Untuk memisahkan repositori, ikuti langkah-langkah berikut:

  1. Di repositori root yang ada, pilih resource yang ingin Anda pindahkan ke repositori atau direktori lain, lalu tambahkan anotasi configmanagement.gke.io/managed: disabled ke dalamnya. Anotasi ini memastikan bahwa objek yang ada dalam 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 file kustomization.yaml, seperti dalam contoh ini:

    # kustomization.yaml
    commonAnnotations:
      configmanagement.gke.io/managed: disabled
    
  2. Commit dan kirim perubahan: git commit -am 'disable Config Sync management on subset of the configuration'

  3. Tunggu hingga objek RootSync root-sync yang ada disinkronkan menggunakan perintah gcloud alpha anthos config sync repo describe:

    # gcloud command
    gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \
      --sync-namespace config-management-system  --sync-name root-sync
    

    Ganti MEMBERSHIP_NAME dengan nama keanggotaan cluster Anda yang terdaftar.

  4. Siapkan repositori kedua dengan mengikuti langkah-langkah berikut:

    1. Buat repositori baru atau direktori baru di repositori Git Anda yang ada.
    2. Salin resource dengan anotasi configmanagement.gke.io/managed: disabled ke repositori baru atau direktori baru.
    3. Hapus anotasi configmanagement.gke.io/managed: disabled di repositori atau direktori baru.
    4. Jika Anda membagi repositori root menjadi lebih dari 2 repositori, ulangi langkah-langkah ini sesuai kebutuhan.
  5. Commit dan kirim perubahan:

    git commit -am 'add configuration for the new root repository'
    
  6. Terapkan objek RootSync root-split untuk menyinkronkan repositori atau direktori baru sehingga objek yang ada dalam cluster akan dikelola oleh objek RootSync baru root-split.

     apiVersion: configsync.gke.io/v1beta1
     kind: RootSync
     metadata:
       name: root-split
       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 untuk 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) tambahkan revisi Git (tag atau hash) dari repositori root baru yang akan diperiksa.
    • NEW_ROOT_BRANCH: (Opsional) tambahkan cabang dari repositori root baru yang akan disinkronkan.
    • NEW_ROOT_DIRECTORY: (Opsional) menambahkan jalur dalam repositori Git ke direktori utama baru yang berisi konfigurasi yang ingin Anda sinkronkan.
    • ROOT_AUTH_TYPE: Ini harus sama dengan objek RootSync/root-sync yang sudah ada.
    • ROOT_EMAIL: Ini harus sama dengan objek RootSync/root-sync yang sudah ada.
  7. Tunggu objek RootSync baru root-split disinkronkan. Hal ini dapat dilakukan dengan menggunakan perintah gcloud alpha anthos config sync repo describe:

    $ gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \
      --sync-namespace config-management-system  --sync-name root-split
    

    Ganti MEMBERSHIP_NAME dengan nama keanggotaan cluster Anda yang terdaftar. repositori root disinkronkan.

  8. Hapus resource dengan anotasi configmanagement.gke.io/managed: disabled dari repositori asli. Commit dan kirim perubahan:

    git commit -am 'remove configuration managed by the new root repository'
    
  9. Tunggu hingga objek RootSync root-sync yang ada disinkronkan menggunakan perintah gcloud:

    $ gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \
     --sync-namespace config-management-system  --sync-name root-sync
    

    Ganti MEMBERSHIP_NAME dengan nama keanggotaan cluster Anda yang terdaftar.

Memecah repositori root hierarkis

Langkah-langkah untuk memecah repositori hierarkis mirip dengan langkah memecah repositori yang tidak terstruktur.

Ada tiga perbedaan utama:

  1. Repositori root baru (atau direktori baru) juga harus hierarkis. Anda harus menyalin direktori system/ dan clusterregistry/ direktori yang ada ke repositori root baru (atau direktori baru).

  2. Resource dalam namespace tidak dapat tersebar di beberapa repositori. Jika tidak, rekonsiliasi yang berbeda akan berupaya mengelola namespace.

  3. Objek RootSync root-split harus menggunakan spec.sourceFormat: hierarchical.

Karena kami merekomendasikan repositori tidak terstruktur, Anda juga dapat mempertimbangkan untuk mengonversi repositori hierarkis menjadi repositori tidak terstruktur sebelum memecahnya.