Suddividi un repository in più repository

Questa pagina mostra come suddividere in modo sicuro un repository radice in due o più repository root. I passaggi possono essere applicati anche ai repository degli spazi dei nomi.

Un repository sincronizzato da Config Sync fa riferimento alla combinazione di repository Git, ramo, revisione e directory.

Se il repository principale contiene un numero elevato di risorse, ad esempio più di 5000, Config Sync potrebbe non comportarsi correttamente per i seguenti due motivi:

  1. L'oggetto ResourceGroup potrebbe superare il limite di dimensioni dell'oggetto etcd. L'oggetto ResourceGroup registra il gruppo, il tipo, lo spazio dei nomi e il nome di tutte le risorse nel repository Git. La presenza di un numero elevato di risorse porta a un oggetto ResourceGroup di grandi dimensioni.
  2. La sincronizzazione di tutte le risorse richiede più tempo rispetto a un repository con un numero inferiore di risorse. Config Sync applica le risorse al cluster in sequenza. A volte le risorse non possono essere applicate correttamente la prima volta e Config Sync deve riprovare ad applicarle.

Quando si verificano questi problemi, puoi suddividere il repository radice da uno in più repository in modo che ogni repository radice abbia meno risorse.

Suddividere un repository root non strutturato

Gli oggetti RootSync vengono utilizzati per spiegare i passaggi. I passaggi possono essere applicati anche agli oggetti RepoSync.

Supponiamo che il repository principale sia sincronizzato dall'oggetto RootSync root-sync. Dopo la suddivisione, hai due repository root. Uno viene sincronizzato dall'oggetto RootSync root-sync, mentre l'altro viene sincronizzato dall'oggetto RootSync root-split.

Per suddividere il repository:

  1. Nel repository root esistente, scegli le risorse che intendi spostare in un repository o una directory diversi e aggiungi l'annotazione configmanagement.gke.io/managed: disabled. Questa annotazione assicura che gli oggetti esistenti nel cluster non siano interessati quando sposti la loro configurazione da un repository a un altro. Se utilizzi il formato Kustomize o i grafici Helm, puoi scegliere circa la metà delle basi e aggiungere l'annotazione comune al file kustomization.yaml, come in questo esempio:

    # kustomization.yaml
    commonAnnotations:
      configmanagement.gke.io/managed: disabled
    
  2. Esegui il commit e il push della modifica: git commit -am 'disable Config Sync management on subset of the configuration'

  3. Attendi che l'oggetto RootSync esistente root-sync venga sincronizzato utilizzando il comando 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
    

    Sostituisci MEMBERSHIP_NAME con il nome dell'appartenenza del cluster registrato.

  4. Per configurare il secondo repository:

    1. Crea un nuovo repository o una nuova directory nel tuo repository Git esistente.
    2. Copia le risorse con l'annotazione configmanagement.gke.io/managed: disabled nel nuovo repository o nella nuova directory.
    3. Rimuovi l'annotazione configmanagement.gke.io/managed: disabled nel nuovo repository o nella nuova directory.
    4. Se suddividi il repository radice in più di due repository, ripeti questi passaggi se necessario.
  5. Esegui il commit e il push della modifica:

    git commit -am 'add configuration for the new root repository'
    
  6. Applica un oggetto RootSync root-split per sincronizzare il nuovo repository o la nuova directory in modo che gli oggetti esistenti nel cluster siano gestiti dal nuovo oggetto 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
    

    Sostituisci quanto segue:

    • NEW_ROOT_REPOSITORY: l'URL del repository Git da utilizzare come nuovo repository radice. Puoi inserire gli URL utilizzando il protocollo HTTPS o SSH. Ad esempio, https://github.com/GoogleCloudPlatform/anthos-config-management-samples utilizza il protocollo HTTPS. Se non inserisci un protocollo, l'URL viene considerato come un URL HTTPS.
    • NEW_ROOT_REVISION: (facoltativo) aggiungi la revisione Git (tag o hash) del nuovo repository root da verificare.
    • NEW_ROOT_BRANCH: (facoltativo) aggiungi il ramo del nuovo repository principale da cui eseguire la sincronizzazione.
    • NEW_ROOT_DIRECTORY: (facoltativo) aggiungi il percorso del repository Git alla nuova directory radice che contiene la configurazione con cui vuoi eseguire la sincronizzazione.
    • ROOT_AUTH_TYPE: dovrebbe essere uguale all'oggetto RootSync/root-sync esistente.
    • ROOT_EMAIL: deve essere uguale all'oggetto RootSync/root-sync esistente.
  7. Attendi che il nuovo oggetto RootSync root-split venga sincronizzato. Per farlo, utilizza il comando 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
    

    Sostituisci MEMBERSHIP_NAME con il nome dell'appartenenza del cluster registrato. con cui viene sincronizzato il repository root.

  8. Rimuovi le risorse con l'annotazione configmanagement.gke.io/managed: disabled dal repository originale. Esegui il commit e il push della modifica:

    git commit -am 'remove configuration managed by the new root repository'
    
  9. Attendi che l'oggetto RootSync esistente root-sync venga sincronizzato utilizzando il comando gcloud:

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

    Sostituisci MEMBERSHIP_NAME con il nome dell'appartenenza del cluster registrato.

Scomporre un repository radice gerarchico

I passaggi per scomporre un repository gerarchico sono simili a quelli per scomporre un repository non strutturato.

Esistono tre differenze principali:

  1. Anche il nuovo repository principale (o la nuova directory) deve essere gerarchico. Devi copiare le directory system/ e clusterregistry/ esistenti nel nuovo repository principale (o nella nuova directory).

  2. Le risorse in uno spazio dei nomi non possono essere distribuite in più repository. In caso contrario, diversi riconciliatori lottano per gestire lo spazio dei nomi.

  3. L'oggetto RootSync root-split deve utilizzare spec.sourceFormat: hierarchical.

Poiché consigliamo i repository non strutturati, potresti anche valutare la conversione del repository gerarchico in un repository non strutturato prima di separarlo.