Questa pagina mostra come dividere in modo sicuro un repository radice 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.
Quando nel repository principale è 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 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. 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 dividere il repository principale in più repository in modo che ognuno contenga meno risorse.
Dividere un repository radice 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 (consigliata)
Questo metodo funziona per Config Sync versione 1.21.0 e successive grazie a un finalizzatore aggiunto in questa release, che interrompe la gestione degli oggetti quando viene eliminato un oggetto RootSync o RepoSync. In precedenza, gli oggetti orfani avevano metadati persistenti, il che impediva loro di essere gestiti da altri client o da nuovi oggetti RootSync o RepoSync.
Supponi che il repository principale sia sincronizzato dall'oggetto RootSync single-root-sync
.
Dopo aver suddiviso il repository, avrai due repository radice. Uno viene sincronizzato dall'oggetto RootSync root-sync-1
, mentre l'altro viene sincronizzato dall'oggetto RootSync root-sync-2
.
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 quando non è impostato è lo stesso di "Orfano". Questa impostazione garantisce che gli oggetti non vengano eliminati.Elimina RootSync
single-root-sync
:kubectl delete rootsync single-root-sync -n config-management-system
Configura i nuovi repository seguendo questi passaggi:
- Crea un nuovo repository o una nuova directory nel 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, il nuovo repository o la nuova directory vengono sincronizzati in modo che gli oggetti esistenti nel cluster vengano 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 radice da cui eseguire la sincronizzazione.NEW_ROOT_DIRECTORY
: (Facoltativo) il percorso nel repository Git della nuova directory principale che contiene la configurazione da sincronizzare.ROOT_AUTH_TYPE
: questo valore deve essere uguale all'oggetto RootSync/root-sync esistente.ROOT_EMAIL
: questo valore deve essere uguale all'oggetto RootSync/root-sync esistente.
Attendi la sincronizzazione del nuovo oggetto RootSync
root-sync-1
. 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 ti consigliamo di utilizzare il metodo disponibile nella versione 1.21.0 e successive perché richiede meno passaggi. Se la tua versione di Config Sync è precedente alla 1.21.0, puoi utilizzare questo metodo.
Supponi che il repository principale sia sincronizzato dall'oggetto RootSync root-sync
.
Dopo aver suddiviso il repository, avrai due repository radice. Uno viene sincronizzato dall'oggetto RootSync root-sync
, mentre l'altro viene sincronizzato dall'oggetto RootSync root-sync-1
.
Per suddividere il repository:
Nel repository principale esistente, scegli le risorse che prevedi di spostare in un repository o una directory diversi e aggiungi l'annotazione
configmanagement.gke.io/managed: disabled
. Questa annotazione garantisce che gli oggetti esistenti nel cluster non vengano 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 la sincronizzazione dell'oggetto RootSync
root-sync
esistente utilizzando il seguente comando:nomos status
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 nella nuova directory. - Rimuovi l'annotazione
configmanagement.gke.io/managed: disabled
nel nuovo repository o 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 RootSync
root-sync-1
per sincronizzare il nuovo repository o la nuova directory in modo che gli oggetti esistenti nel cluster vengano gestiti dal nuovo oggetto RootSyncroot-sync-1
.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 radice da cui eseguire la sincronizzazione.NEW_ROOT_DIRECTORY
: (Facoltativo) il percorso nel repository Git della nuova directory principale che contiene la configurazione da sincronizzare.ROOT_AUTH_TYPE
: questo valore deve essere uguale all'oggetto RootSync/root-sync esistente.ROOT_EMAIL
: questo valore deve essere uguale all'oggetto RootSync/root-sync esistente.
Attendi la sincronizzazione del nuovo oggetto RootSync
root-sync-1
. 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 la sincronizzazione dell'oggetto RootSync
root-sync
esistente utilizzando il seguente comando:nomos status
Dividere un repository radice gerarchico
I passaggi per suddividere un repository gerarchico sono simili a quelli per suddividere un repository non strutturato.
Le differenze principali sono tre:
Anche il nuovo repository principale (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 si contendono la gestione dello spazio dei nomi.
L'oggetto RootSync
root-sync-1
deve utilizzarespec.sourceFormat: hierarchical
.
Poiché consigliamo repository non strutturati, potresti anche prendere in considerazione l'idea di convertire il repository gerarchico in un repository non strutturato prima di suddividerlo.