Questa pagina mostra come suddividere in modo sicuro un repository principale in due o più repository principali. 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.
Quando il repository principale contiene un numero elevato di risorse, ad esempio più di 5000, la sincronizzazione della configurazione potrebbe non funzionare correttamente per i seguenti due motivi:
- L'oggetto ResourceGroup potrebbe superare il limite di dimensioni degli oggetti etcd. L'oggetto ResourceGroup registra il gruppo, il tipo, lo spazio dei nomi e il nome di tutte le risorse nel repository Git. Un numero elevato di risorse comporta 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 riscontri questi problemi, puoi suddividere il repository principale da uno a più in modo che ogni repository principale abbia meno risorse.
Suddividere un repository principale non strutturato
Gli oggetti RootSync vengono utilizzati per spiegare i passaggi. I passaggi possono essere applicati anche agli oggetti RepoSync.
1.21.0 o versioni successive
Questo metodo funziona per Config Sync versione 1.21.0 e successive grazie a un finalizer aggiunto in quella release, che interrompe la gestione degli oggetti quando viene eliminato un oggetto RootSync o RepoSync. In precedenza, gli oggetti orfani avevano metadati permanenti che ne impedivano la gestione da parte di altri client o di nuovi oggetti RootSync o RepoSync.
Supponiamo che il repository principale sia sincronizzato dall'oggetto RootSync single-root-sync
.
Dopo aver suddiviso il repository, avrai due repository principali. Uno viene sincronizzato dall'oggetto root-sync-1
RootSync, mentre l'altro dall'oggetto root-sync-2
RootSync.
Per suddividere il repository:
Assicurati che RootSync
single-root-sync
abbia il valore dell'annotazioneconfigsync.gke.io/deletion-propagation-policy
Orphan
o che non sia impostato. Il valore predefinito se non viene impostato è uguale a "Orphan". Questa impostazione garantisce che gli oggetti non vengano eliminati.Elimina RootSync
single-root-sync
:kubectl delete rootsync single-root-sync -n config-management-system
Per configurare i nuovi repository:
- Crea un nuovo repository o una nuova directory nel tuo repository Git esistente.
- Sposta le risorse nel nuovo repository o nella nuova directory.
- Se dividi il repository principale in più di due repository, ripeti questi passaggi in base alle necessità.
Esegui il commit e il push della modifica:
git commit -am 'add configuration for the new root repository'
Applica gli oggetti RootSync
root-sync-1
eroot-sync-2
. In questo modo, viene sincronizzato il nuovo repository o la nuova directory in modo che gli oggetti esistenti nel cluster siano gestiti dai nuovi oggetti RootSyncroot-sync-1
eroot-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
Sostituisci quanto segue:
NEW_ROOT_REPOSITORY
: l'URL del repository Git da utilizzare come nuovo repository principale. 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 trattato come un URL HTTPS.NEW_ROOT_REVISION
: (facoltativo) la revisione Git (tag o hash) del nuovo repository principale da estrarre.NEW_ROOT_BRANCH
: (Facoltativo) il ramo del nuovo repository principale da cui eseguire la sincronizzazione.NEW_ROOT_DIRECTORY
: (Facoltativo) il percorso nel repository Git alla nuova directory principale contenente la configurazione con cui vuoi eseguire la sincronizzazione.ROOT_AUTH_TYPE
: questo valore deve essere uguale all'oggetto RootSync/root-sync esistente.ROOT_EMAIL
: questo valore deve essere uguale a quello dell'oggetto RootSync/root-sync esistente.
Attendi la sincronizzazione del nuovo oggetto
root-sync-1
RootSync. Puoi controllare lo stato utilizzando il seguente comando:nomos status
Qualsiasi versione
Questo metodo funziona per qualsiasi versione di Config Sync, inclusa la versione 1.21.0, ma consigliamo di utilizzare il metodo disponibile nella versione 1.21.0 e successive perché richiede meno passaggi. Se la versione di Config Sync è precedente alla 1.21.0, puoi utilizzare questo metodo.
Supponiamo che il repository principale sia sincronizzato dall'oggetto RootSync root-sync
.
Dopo aver suddiviso il repository, avrai due repository principali. Uno viene sincronizzato dall'oggetto root-sync
RootSync, mentre l'altro dall'oggetto root-sync-1
RootSync.
Per suddividere il repository:
Nel repository principale esistente, scegli le risorse che prevedi di spostare in un altro repository o in una directory e aggiungivi 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:
sh git commit -am 'disable Config Sync management on subset of the configuration'
Attendi che l'oggetto RootSync
root-sync
esistente venga sincronizzato utilizzando il seguente comando:nomos status
Per configurare il secondo repository:
- Crea un nuovo repository o una nuova directory nel tuo repository Git esistente.
- Copia le risorse con l'annotazione
configmanagement.gke.io/managed: disabled
nel nuovo repository o nella nuova directory. - Rimuovi l'annotazione
configmanagement.gke.io/managed: disabled
nel nuovo repository o nella nuova directory. - Se dividi il repository principale in più di due repository, ripeti questi passaggi in base alle necessità.
Esegui il commit e il push della modifica:
git commit -am 'add configuration for the new root repository'
Applica un oggetto
root-sync-1
RootSync per sincronizzare il nuovo repository o la nuova directory in modo che gli oggetti esistenti nel cluster vengano gestiti dal nuovoroot-sync-1
oggetto RootSync.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
Sostituisci quanto segue:
NEW_ROOT_REPOSITORY
: l'URL del repository Git da utilizzare come nuovo repository principale. 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 trattato come un URL HTTPS.NEW_ROOT_REVISION
: (facoltativo) la revisione Git (tag o hash) del nuovo repository principale da estrarre.NEW_ROOT_BRANCH
: (Facoltativo) il ramo del nuovo repository principale da cui eseguire la sincronizzazione.NEW_ROOT_DIRECTORY
: (Facoltativo) il percorso nel repository Git alla nuova directory principale contenente la configurazione con cui vuoi eseguire la sincronizzazione.ROOT_AUTH_TYPE
: questo valore deve essere uguale all'oggetto RootSync/root-sync esistente.ROOT_EMAIL
: questo valore deve essere uguale a quello dell'oggetto RootSync/root-sync esistente.
Attendi la sincronizzazione del nuovo oggetto
root-sync-1
RootSync. Puoi controllare lo stato utilizzando il seguente comando:nomos status
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 seguente comando:nomos status
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 principale (o la nuova directory) deve essere gerarchico. Devi copiare le directory
system/
eclusterregistry/
esistenti nel nuovo repository principale (o nella nuova directory).Le risorse in uno spazio dei nomi non possono essere distribuite in più repository. In caso contrario, diversi riconciliatori si contendono la gestione dello spazio dei nomi.
L'oggetto
root-sync-1
RootSync deve utilizzarespec.sourceFormat: hierarchical
.
Poiché consigliamo i repository non strutturati, ti consigliamo anche di convertire il tuo repository gerarchico in un repository non strutturato prima di suddividerlo.