Nesta página, mostramos como dividir um repositório raiz com segurança em dois ou mais repositórios raiz. As etapas também podem ser aplicadas a repositórios de namespace.
Um repositório sincronizado pelo Config Sync refere-se à combinação de um repositório Git, uma ramificação, uma revisão e um diretório.
Quando há um grande número de recursos, por exemplo, mais de 5.000, no seu repositório raiz, o Config Sync pode não se comportar bem pelos dois motivos a seguir:
- O objeto ResourceGroup pode exceder o limite de tamanho do objeto etcd. O objeto ResourceGroup registra o grupo, o tipo, o namespace e o nome de todos os recursos no repositório Git. Ter um grande número de recursos gera um grande objeto ResourceGroup.
- A sincronização de todos os recursos é mais demorada do que um repositório com um número menor de recursos. O Config Sync aplica os recursos sequencialmente ao cluster. Às vezes, os recursos não podem ser aplicados na primeira vez, e o Config Sync precisa aplicá-los novamente.
Ao encontrar esses problemas, é possível dividir o repositório raiz de um para vários. Assim, cada repositório raiz terá menos recursos.
Interromper um repositório raiz não estruturado
Os objetos RootSync são usados para explicar as etapas. As etapas também podem ser aplicadas aos objetos do RepoSync.
1.21.0 ou mais recente (recomendado)
Esse método funciona para o Config Sync versão 1.21.0 e mais recentes devido a um finalizador adicionado nessa versão, que interrompe o gerenciamento de objetos quando um objeto RootSync ou RepoSync é excluído. Antes, os objetos órfãos tinham metadados persistentes, o que impedia que fossem gerenciados por outros clientes ou novos objetos RootSync ou RepoSync.
Suponha que seu repositório raiz seja sincronizado pelo objeto RootSync single-root-sync
.
Após dividir o repositório, você terá 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 estas etapas:
Verifique se o
single-root-sync
do RootSync tem o valor de anotaçãoconfigsync.gke.io/deletion-propagation-policy
comoOrphan
ou se ele não está definido. O valor padrão quando não definido é o mesmo que "Órfão". Essa configuração garante que os objetos não sejam excluídos.Exclua o RootSync
single-root-sync
:kubectl delete rootsync single-root-sync -n config-management-system
Siga estas etapas para configurar os novos repositórios:
- Crie um novo repositório ou um novo diretório no seu repositório Git.
- Mova os recursos para o novo repositório ou diretório.
- Se você estiver dividindo seu repositório raiz em mais de dois repositórios, repita essas etapas conforme necessário.
Confirme e envie a mudança:
git commit -am 'add configuration for the new root repository'
Aplique os objetos RootSync
root-sync-1
eroot-sync-2
. Isso sincroniza o novo repositório ou diretório para que os objetos no cluster sejam gerenciados 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:
NEW_ROOT_REPOSITORY
: o URL do repositório Git para usar como o novo repositório raiz. É possível inserir URLs usando o protocolo HTTPS ou SSH. Por exemplo,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa o protocolo HTTPS. Se você não inserir um protocolo, o URL será tratado como um URL HTTPS.NEW_ROOT_REVISION
: (opcional) a revisão do Git (tag ou hash) do novo repositório raiz para verificar.NEW_ROOT_BRANCH
: (opcional) a ramificação do novo repositório raiz para sincronizar.NEW_ROOT_DIRECTORY
: (opcional) o caminho no repositório Git ao novo diretório raiz que contém a configuração com a qual você quer sincronizar.ROOT_AUTH_TYPE
: precisa ser o mesmo que o objeto RootSync/root-sync atual.ROOT_EMAIL
: precisa ser o mesmo que o objeto RootSync/root-sync atual.
Aguarde a sincronização do novo objeto RootSync
root-sync-1
. Para verificar o status, use o seguinte comando:nomos status
Qualquer versão
Esse método funciona para qualquer versão do Config Sync, incluindo a 1.21.0, mas recomendamos que você use o método disponível na versão 1.21.0 e mais recentes porque ele exige menos etapas. Se a versão do Config Sync for anterior à 1.21.0, use este método.
Suponha que seu repositório raiz seja sincronizado pelo objeto RootSync root-sync
.
Após dividir o repositório, você terá 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 estas etapas:
No repositório raiz atual, escolha os recursos que você planeja mover para um repositório diferente ou um diretório e adicione a anotação
configmanagement.gke.io/managed: disabled
a eles. Essa anotação garante que os objetos no cluster não sejam afetados quando você move a configuração de um repositório para outro. Se você usar o formato Kustomize ou gráficos do Helm, poderá escolher cerca de metade das bases e adicionar a anotação comum ao arquivokustomization.yaml
, como neste exemplo:# kustomization.yaml commonAnnotations: configmanagement.gke.io/managed: disabled
Confirme e envie a mudança:
sh git commit -am 'disable Config Sync management on subset of the configuration'
Aguarde até que o objeto
root-sync
RootSync seja sincronizado usando o seguinte comando:nomos status
Para configurar o segundo repositório, siga estas etapas:
- Crie um novo repositório ou um novo diretório no seu repositório Git.
- 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 você estiver dividindo seu repositório raiz em mais de dois repositórios, repita essas etapas conforme necessário.
Confirme e envie a mudança:
git commit -am 'add configuration for the new root repository'
Aplique um objeto RootSync
root-sync-1
para sincronizar o novo repositório ou diretório para que os objetos no cluster sejam gerenciados pelo novo objeto 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
Substitua:
NEW_ROOT_REPOSITORY
: o URL do repositório Git para usar como o novo repositório raiz. É possível inserir URLs usando o protocolo HTTPS ou SSH. Por exemplo,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa o protocolo HTTPS. Se você não inserir um protocolo, o URL será tratado como um URL HTTPS.NEW_ROOT_REVISION
: (opcional) a revisão do Git (tag ou hash) do novo repositório raiz para verificar.NEW_ROOT_BRANCH
: (opcional) a ramificação do novo repositório raiz para sincronizar.NEW_ROOT_DIRECTORY
: (opcional) o caminho no repositório Git ao novo diretório raiz que contém a configuração com a qual você quer sincronizar.ROOT_AUTH_TYPE
: precisa ser o mesmo que o objeto RootSync/root-sync atual.ROOT_EMAIL
: precisa ser o mesmo que o objeto RootSync/root-sync atual.
Aguarde a sincronização do novo objeto RootSync
root-sync-1
. Para verificar o status, use o seguinte comando:nomos status
Remova os recursos com a anotação
configmanagement.gke.io/managed: disabled
do repositório original. Confirme e envie a mudança:git commit -am 'remove configuration managed by the new root repository'
Aguarde até que o objeto
root-sync
RootSync seja sincronizado usando o seguinte comando:nomos status
Interromper um repositório raiz hierárquico
As etapas para dividir um repositório hierárquico são semelhantes às de quebra de um repositório não estruturado.
Há três diferenças principais:
O novo repositório raiz (ou novo diretório) também precisa ser hierárquico. É necessário copiar os diretórios
system/
eclusterregistry/
para o novo repositório raiz (ou o novo diretório).Os recursos em um namespace não podem se espalhar por vários repositórios. Caso contrário, diferentes reconciliadores entrarão em conflito para gerenciar o namespace.
O objeto RootSync
root-sync-1
precisa usarspec.sourceFormat: hierarchical
.
Como recomendamos repositórios não estruturados, talvez seja uma boa ideia converter seu repositório hierárquico em um repositório não estruturado antes de compartilhá-lo.