Suddividi un repository in più repository
Questa pagina mostra come suddividere in modo sicuro un repository root in due o più repository radice. I passaggi possono essere applicati anche ai repository dello spazio dei nomi.
Un repository sincronizzato da Config Sync si riferisce alla combinazione di un repository Git, un ramo, una revisione e una directory.
Se nel repository radice è presente un numero elevato di risorse, ad esempio più di 5000, Config Sync potrebbe non funzionare correttamente per i seguenti due motivi:
- L'oggetto ResourceGroup potrebbe superare il limite di dimensione dell'oggetto etcd. L'oggetto ResourceGroup registra Gruppi, Tipo, Spazio dei nomi e Nome di tutte le risorse nel repository Git. Avere un numero elevato di risorse porta a un oggetto ResourceGroup di grandi dimensioni.
- La sincronizzazione di tutte le risorse richiede più tempo rispetto a un repository con un numero inferiore di risorse. Config Sync applica le risorse in sequenza al cluster. 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 a più in modo che ogni repository radice abbia meno risorse.
Suddivide un repository radice non strutturato
Gli oggetti RootSync vengono utilizzati per spiegare i passaggi. I passaggi possono essere applicati anche agli oggetti RepoSync.
Supponiamo che il tuo repository radice sia sincronizzato dall'oggetto RootSync root-sync
.
Dopo averlo suddiviso, hai due repository radice. Uno è sincronizzato dall'oggetto RootSync root-sync
, mentre l'altro è sincronizzato dall'oggetto RootSync root-split
.
Per suddividere il repository, segui questi passaggi:
Nel repository radice esistente, scegli le risorse che prevedi di spostare in un altro repository o in una directory e aggiungi a queste l'annotazione
configmanagement.gke.io/managed: disabled
. Questa annotazione garantisce 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 filekustomization.yaml
, come in questo esempio:# kustomization.yaml commonAnnotations: configmanagement.gke.io/managed: disabled
Esegui il commit e il push della modifica:
git commit -am 'disable Config Sync management on subset of the configuration'
Attendi che l'oggetto RootSync esistente
root-sync
venga sincronizzato utilizzando il comandogcloud 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.Per configurare il secondo repository:
- Crea un nuovo repository o una nuova directory nel repository Git esistente.
- Copia le risorse con l'annotazione
configmanagement.gke.io/managed: disabled
nel nuovo repository o in una nuova directory. - Rimuovi l'annotazione
configmanagement.gke.io/managed: disabled
nel nuovo repository o nella nuova directory. - Se vuoi suddividere il repository radice in più di due repository, ripeti questi passaggi in base alle esigenze.
Esegui il commit e il push della modifica:
git commit -am 'add configuration for the new root repository'
Applica un oggetto RootSync
root-split
per sincronizzare il nuovo repository o la nuova directory in modo che gli oggetti esistenti nel cluster vengano gestiti dal nuovo oggetto RootSyncroot-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 principale per eseguire il check-out.NEW_ROOT_BRANCH
: (facoltativo) aggiungi il ramo del nuovo repository radice da cui eseguire la sincronizzazione.NEW_ROOT_DIRECTORY
: (facoltativo) aggiungi il percorso nel repository Git alla nuova directory radice contenente la configurazione con cui vuoi sincronizzare.ROOT_AUTH_TYPE
: deve essere uguale all'oggetto RootSync/root-sync esistente.ROOT_EMAIL
: deve essere uguale all'oggetto RootSync/root-sync esistente.
Attendi che il nuovo oggetto RootSync
root-split
venga sincronizzato. A questo scopo, utilizza il comandogcloud 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 radice.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'
Attendi che l'oggetto RootSync
root-sync
esistente venga sincronizzato utilizzando il comandogcloud
:$ 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.
Suddividere un repository radice gerarchico
I passaggi per suddividere un repository gerarchico sono simili a quelli per suddividere un repository non strutturato.
Esistono tre differenze principali:
Anche il nuovo repository radice (o la nuova directory) deve essere gerarchico. Devi copiare le directory esistenti
system/
eclusterregistry/
nel nuovo repository radice (o nella nuova directory).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.
L'oggetto RootSync
root-split
deve utilizzarespec.sourceFormat: hierarchical
.
Poiché consigliamo repository non strutturati, potresti anche considerare la possibilità di convertire il repository gerarchico in un repository non strutturato prima di dividerlo.