Memecah repositori menjadi beberapa repositori

Halaman ini menunjukkan cara memecah satu repositori root menjadi dua repositori root atau lebih dengan aman repositori root. Langkah-langkah tersebut juga dapat diterapkan ke repositori namespace.

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

Ketika ada sejumlah besar resource, misalnya lebih dari 5.000, di repositori root Anda, Config Sync mungkin berperilaku tidak baik karena dua alasan berikut:

  1. Objek ResourceGroup mungkin melebihi batas ukuran objek etcd. Objek ResourceGroup mencatat Group, Kind, Namespace, dan Name dari semua resource di repositori Git. Memiliki banyak resource akan menghasilkan objek ResourceGroup yang besar.
  2. Membutuhkan waktu yang lebih lama untuk menyinkronkan semua resource daripada repositori dengan jumlah resource yang lebih sedikit. Config Sync menerapkan resource ke cluster secara berurutan. Terkadang, resource tidak berhasil diterapkan pertama kali, dan Config Sync harus mencoba lagi menerapkannya.

Saat mengalami masalah ini, Anda dapat memecah repositori root dari satu menjadi beberapa sehingga setiap repositori root memiliki lebih sedikit sumber daya.

Memecah repositori root yang tidak terstruktur

Objek RootSync digunakan untuk menjelaskan langkah-langkahnya. Langkah-langkah tersebut juga bisa yang diterapkan ke objek RepoSync.

Asumsikan bahwa repositori root Anda disinkronkan oleh objek RootSync root-sync. Setelah dipecah, Anda memiliki dua repositori root. Yang pertama disinkronkan oleh Objek RootSync root-sync saat yang lain disinkronkan oleh Objek RootSync root-split.

Untuk memisahkan repositori, ikuti langkah-langkah berikut:

  1. Di repositori root yang sudah ada, pilih resource bahwa Anda berencana untuk pindah ke repositori atau direktori lain dan menambahkan anotasi configmanagement.gke.io/managed: disabled kepadanya. Anotasi ini memastikan bahwa objek yang ada di cluster tidak terpengaruh saat Anda memindahkan konfigurasi mereka dari satu repositori ke repositori lain. Jika menggunakan format Kustomize atau diagram helm, Anda dapat memilih basis 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 yang ada root-sync disinkronkan dengan 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 Anda dengan mengikuti langkah-langkah berikut:

    1. Buat repositori baru atau direktori baru di repositori Git yang sudah ada.
    2. Menyalin resource dengan anotasi configmanagement.gke.io/managed: disabled ke dalam repositori baru atau direktori baru.
    3. Hapus anotasi configmanagement.gke.io/managed: disabled di repositori atau direktori baru.
    4. Jika Anda membagi repositori {i>root<i} Anda menjadi lebih dari 2 repositori, ulangi langkah-langkah ini jika diperlukan.
  5. Commit dan kirim perubahan:

    git commit -am 'add configuration for the new root repository'
    
  6. Menerapkan objek RootSync root-split untuk menyinkronkan repositori atau direktori baru sehingga objek yang sudah ada di cluster akan dikelola oleh Objek RootSync 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 gunakan sebagai repositori {i>root<i} baru. Anda dapat memasukkan URL menggunakan HTTPS atau protokol SSH. Misalnya, https://github.com/GoogleCloudPlatform/anthos-config-management-samples penggunaan di protokol HTTPS. Jika Anda tidak memasukkan protokol, URL akan diperlakukan sebagai URL HTTPS.
    • NEW_ROOT_REVISION: (Opsional) tambahkan revisi Git (tag atau hash) repositori {i>root<i} baru yang harus diperiksa.
    • NEW_ROOT_BRANCH: (Opsional) tambahkan cabang root baru repositori yang akan disinkronkan.
    • NEW_ROOT_DIRECTORY: (Opsional) tambahkan jalur di repositori Git ke direktori {i>root <i}baru yang berisi konfigurasi yang ingin Anda sinkronkan tempat mesin terhubung.
    • ROOT_AUTH_TYPE: ID ini harus sama dengan objek RootSync/root-sync yang ada.
    • ROOT_EMAIL: ID ini harus sama dengan yang sudah ada Objek RootSync/root-sync.
  7. Tunggu hingga objek RootSync baru root-split disinkronkan. Hal ini dapat dilakukan menggunakan gcloud alpha anthos config sync repo describe berikut:

    $ 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 telah 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 yang ada root-sync 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 serupa dengan langkah-langkah langkah-langkah untuk memecah repositori yang tidak terstruktur.

Ada tiga perbedaan utama:

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

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

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

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