Esta página mostra como dividir em segurança um repositório raiz em dois ou mais repositórios raiz. Os passos também podem ser aplicados a repositórios de espaços de nomes.
Um repositório sincronizado pelo Config Sync refere-se à combinação de um repositório Git, um ramo, uma revisão e um diretório.
Quando existem um grande número de recursos, por exemplo, mais de 5000, no seu repositório raiz, o Config Sync pode não funcionar bem pelos dois motivos seguintes:
- O objeto ResourceGroup pode exceder o limite de tamanho do objeto etcd. O objeto ResourceGroup regista o grupo, o tipo, o espaço de nomes e o nome de todos os recursos no repositório Git. Ter um grande número de recursos resulta num objeto ResourceGroup grande.
- Demora mais tempo a sincronizar todos os recursos do que um repositório com um número inferior de recursos. O Config Sync aplica os recursos sequencialmente ao cluster. Por vezes, não é possível aplicar os recursos com êxito na primeira vez e o Config Sync tem de tentar aplicá-los novamente.
Quando se depara com estes problemas, pode dividir o repositório raiz de um em vários para que cada repositório raiz tenha menos recursos.
Divida um repositório raiz não estruturado
Os objetos RootSync são usados para explicar os passos. Os passos também podem ser aplicados aos objetos RepoSync.
1.21.0 ou posterior (recomendado)
Este método funciona para a versão 1.21.0 e posteriores do Config Sync devido a um finalizador adicionado nessa versão, que deixa de gerir objetos quando um objeto RootSync ou RepoSync é eliminado. Anteriormente, os objetos órfãos tinham metadados persistentes, o que impedia que fossem geridos por outros clientes ou novos objetos RootSync ou RepoSync.
Suponha que o repositório raiz é sincronizado pelo objeto RootSync single-root-sync
.
Depois de dividir o repositório, tem dois repositórios raiz. Um é sincronizado pelo objeto root-sync-1
RootSync, enquanto o outro é sincronizado pelo objeto root-sync-2
RootSync.
Para dividir o repositório, siga estes passos:
Certifique-se de que o RootSync
single-root-sync
tem o valor de anotaçãoconfigsync.gke.io/deletion-propagation-policy
deOrphan
ou que não está definido. O valor predefinido quando não está definido é o mesmo que "Órfão". Esta definição garante que os objetos não são eliminados.Elimine o RootSync
single-root-sync
:kubectl delete rootsync single-root-sync -n config-management-system
Siga estes passos para configurar os novos repositórios:
- Crie um novo repositório ou um novo diretório no seu repositório Git existente.
- Mova os recursos para o novo repositório ou diretório.
- Se estiver a dividir o repositório raiz em mais de dois repositórios, repita estes passos conforme necessário.
Confirme e envie a alteração:
git commit -am 'add configuration for the new root repository'
Aplique os objetos
root-sync-1
eroot-sync-2
RootSync. Ao fazê-lo, sincroniza o novo repositório ou diretório para que os objetos existentes no cluster sejam geridos pelos novos objetos 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
Substitua o seguinte:
NEW_ROOT_REPOSITORY
: o URL do repositório Git a usar como o novo repositório raiz. Pode introduzir URLs através do protocolo HTTPS ou SSH. Por exemplo, ohttps://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa o protocolo HTTPS. Se não introduzir um protocolo, o URL é tratado como um URL HTTPS.NEW_ROOT_REVISION
: (Opcional) a revisão do Git (etiqueta ou hash) do novo repositório raiz a consultar.NEW_ROOT_BRANCH
: (opcional) a ramificação do novo repositório raiz a partir da qual sincronizar.NEW_ROOT_DIRECTORY
: (Opcional) o caminho no repositório Git para o novo diretório raiz que contém a configuração com a qual quer sincronizar.ROOT_AUTH_TYPE
: este valor deve ser igual ao objeto RootSync/root-sync existente.ROOT_EMAIL
: este valor deve ser igual ao objeto RootSync/root-sync existente.
Aguarde até que o novo objeto
root-sync-1
RootSync seja sincronizado. Pode verificar o estado através do seguinte comando:nomos status
Quaisquer versões
Este método funciona para qualquer versão do Config Sync, incluindo a versão 1.21.0, mas recomendamos que use o método disponível na versão 1.21.0 e posteriores porque requer menos passos. Se a versão do Config Sync for anterior a 1.21.0, pode usar este método em alternativa.
Suponha que o repositório raiz é sincronizado pelo objeto RootSync root-sync
.
Depois de dividir o repositório, tem dois repositórios raiz. Um é sincronizado pelo objeto root-sync
RootSync, enquanto o outro é sincronizado pelo objeto root-sync-1
RootSync.
Para dividir o repositório, siga estes passos:
No repositório de raiz existente, escolha os recursos que planeia mover para um repositório ou um diretório diferente e adicione a anotação
configmanagement.gke.io/managed: disabled
aos mesmos. Esta anotação garante que os objetos existentes no cluster não são afetados quando move a respetiva configuração de um repositório para outro. Se usar o formato Kustomize ou os gráficos Helm, pode escolher cerca de metade das bases e adicionar a anotação comum ao ficheirokustomization.yaml
, como neste exemplo:# kustomization.yaml commonAnnotations: configmanagement.gke.io/managed: disabled
Confirme e envie a alteração:
sh git commit -am 'disable Config Sync management on subset of the configuration'
Aguarde que o objeto
root-sync
RootSync existente seja sincronizado através do seguinte comando:nomos status
Siga estes passos para configurar o segundo repositório:
- Crie um novo repositório ou um novo diretório no seu repositório Git existente.
- Copie os recursos com a anotação
configmanagement.gke.io/managed: disabled
para o novo repositório ou diretório. - Remova a anotação
configmanagement.gke.io/managed: disabled
no novo repositório ou diretório. - Se estiver a dividir o repositório raiz em mais de dois repositórios, repita estes passos conforme necessário.
Confirme e envie a alteração:
git commit -am 'add configuration for the new root repository'
Aplique um
root-sync-1
objeto RootSync para sincronizar o novo repositório ou diretório, de modo que os objetos existentes no cluster sejam geridos pelo novoroot-sync-1
objeto 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
Substitua o seguinte:
NEW_ROOT_REPOSITORY
: o URL do repositório Git a usar como o novo repositório raiz. Pode introduzir URLs através do protocolo HTTPS ou SSH. Por exemplo, ohttps://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa o protocolo HTTPS. Se não introduzir um protocolo, o URL é tratado como um URL HTTPS.NEW_ROOT_REVISION
: (Opcional) a revisão do Git (etiqueta ou hash) do novo repositório raiz a consultar.NEW_ROOT_BRANCH
: (opcional) a ramificação do novo repositório raiz a partir da qual sincronizar.NEW_ROOT_DIRECTORY
: (Opcional) o caminho no repositório Git para o novo diretório raiz que contém a configuração com a qual quer sincronizar.ROOT_AUTH_TYPE
: este valor deve ser igual ao objeto RootSync/root-sync existente.ROOT_EMAIL
: este valor deve ser igual ao objeto RootSync/root-sync existente.
Aguarde até que o novo objeto
root-sync-1
RootSync seja sincronizado. Pode verificar o estado através do seguinte comando:nomos status
Remova os recursos com a anotação
configmanagement.gke.io/managed: disabled
do repositório original. Confirme e envie a alteração:git commit -am 'remove configuration managed by the new root repository'
Aguarde que o objeto
root-sync
RootSync existente seja sincronizado através do seguinte comando:nomos status
Divida um repositório raiz hierárquico
Os passos para dividir um repositório hierárquico são semelhantes aos passos para dividir um repositório não estruturado.
Existem três diferenças principais:
O novo repositório raiz (ou novo diretório) também deve ser hierárquico. Tem de copiar os diretórios
system/
eclusterregistry/
existentes para o novo repositório raiz (ou o novo diretório).Os recursos num espaço de nomes não podem ser distribuídos por vários repositórios. Caso contrário, os reconciliadores diferentes lutam para gerir o espaço de nomes.
O objeto
root-sync-1
RootSync deve usarspec.sourceFormat: hierarchical
.
Uma vez que recomendamos repositórios não estruturados, também pode considerar converter o seu repositório hierárquico num repositório não estruturado antes de o dividir.