En esta página se explica cómo dividir de forma segura un repositorio raíz en dos o más repositorios raíz. También se pueden aplicar a los repositorios de espacios de nombres.
Un repositorio sincronizado por Config Sync es la combinación de un repositorio de Git, una rama, una revisión y un directorio.
Cuando hay un gran número de recursos (por ejemplo, más de 5000) en tu repositorio raíz, es posible que Config Sync no funcione correctamente por los dos motivos siguientes:
- El objeto ResourceGroup puede superar el límite de tamaño de objeto de etcd. El objeto ResourceGroup registra el grupo, el tipo, el espacio de nombres y el nombre de todos los recursos del repositorio Git. Si tiene un gran número de recursos, se creará un objeto ResourceGroup de gran tamaño.
- Se tarda más en sincronizar todos los recursos que en un repositorio con un número menor de recursos. Config Sync aplica los recursos de forma secuencial al clúster. A veces, los recursos no se pueden aplicar correctamente la primera vez y Config Sync tiene que volver a intentarlo.
Si te encuentras con estos problemas, puedes dividir tu repositorio raíz en varios para que cada uno de ellos tenga menos recursos.
Dividir un repositorio raíz sin estructurar
Los objetos RootSync se usan para explicar los pasos. Los pasos también se pueden aplicar a los objetos RepoSync.
mantén los objetos dependientes en el mismo RootSync o RepoSync.1.21.0 o posterior (recomendada)
Este método funciona en la versión 1.21.0 de Config Sync y posteriores gracias a un finalizador que se añadió en esa versión, que detiene la gestión de objetos cuando se elimina un objeto RootSync o RepoSync. Antes, los objetos huérfanos tenían metadatos persistentes, lo que impedía que otros clientes o nuevos objetos RootSync o RepoSync los gestionaran.
Supongamos que el objeto RootSync single-root-sync
sincroniza tu repositorio raíz.
Después de dividir el repositorio, tendrás dos repositorios raíz. Uno se sincroniza mediante el objeto root-sync-1
RootSync, mientras que el otro se sincroniza mediante el objeto root-sync-2
RootSync.
Para dividir el repositorio, sigue estos pasos:
Asegúrate de que el RootSync
single-root-sync
tenga el valor de anotaciónconfigsync.gke.io/deletion-propagation-policy
deOrphan
o que no esté definido. El valor predeterminado cuando no se define es el mismo que "Orphan". Este ajuste asegura que no se eliminen objetos.Elimina el RootSync
single-root-sync
:kubectl delete rootsync single-root-sync -n config-management-system
Sigue estos pasos para configurar tus nuevos repositorios:
- Crea un repositorio o un directorio en tu repositorio de Git.
- Mueve los recursos al nuevo repositorio o directorio.
- Si vas a dividir tu repositorio raíz en más de dos repositorios, repite estos pasos según sea necesario.
Confirma y envía el cambio:
git commit -am 'add configuration for the new root repository'
Aplica los objetos RootSync
root-sync-1
yroot-sync-2
. De esta forma, se sincronizará el nuevo repositorio o directorio para que los objetos del clúster se gestionen con los nuevos objetos RootSyncroot-sync-1
yroot-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
Haz los cambios siguientes:
NEW_ROOT_REPOSITORY
: URL del repositorio de Git que se va a usar como nuevo repositorio raíz. Puede introducir URLs con el protocolo HTTPS o SSH. Por ejemplo,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa el protocolo HTTPS. Si no introduces ningún protocolo, la URL se tratará como una URL HTTPS.NEW_ROOT_REVISION
: (opcional) revisión de Git (etiqueta o hash) del nuevo repositorio raíz que debe consultarse.NEW_ROOT_BRANCH
: (opcional) rama del nuevo repositorio raíz desde la que se hace la sincronización.NEW_ROOT_DIRECTORY
: (opcional) la ruta del repositorio de Git al nuevo directorio raíz que contiene la configuración que quieres sincronizar.ROOT_AUTH_TYPE
: este valor debe ser el mismo que el del objeto RootSync/root-sync.ROOT_EMAIL
: este valor debe ser el mismo que el del objeto RootSync/root-sync.
Espera a que se sincronice el nuevo objeto
root-sync-1
RootSync. Puedes comprobar el estado con el siguiente comando:nomos status
Cualquier versión
Este método funciona con cualquier versión de Config Sync, incluida la 1.21.0, pero te recomendamos que utilices el método disponible en la versión 1.21.0 y posteriores porque requiere menos pasos. Si tu versión de Config Sync es anterior a la 1.21.0, puedes usar este método.
Supongamos que el objeto RootSync root-sync
sincroniza tu repositorio raíz.
Después de dividir el repositorio, tendrás dos repositorios raíz. Uno se sincroniza mediante el objeto root-sync
RootSync, mientras que el otro se sincroniza mediante el objeto root-sync-1
RootSync.
Para dividir el repositorio, sigue estos pasos:
En el repositorio raíz, elige los recursos que quieras mover a otro repositorio o directorio y añádeles la anotación
configmanagement.gke.io/managed: disabled
. Esta anotación asegura que los objetos del clúster no se vean afectados cuando muevas su configuración de un repositorio a otro. Si usas el formato Kustomize o gráficos de Helm, puedes elegir aproximadamente la mitad de las bases y añadir la anotación común al archivokustomization.yaml
, como en este ejemplo:# kustomization.yaml commonAnnotations: configmanagement.gke.io/managed: disabled
Confirma y envía el cambio:
sh git commit -am 'disable Config Sync management on subset of the configuration'
Espera a que se sincronice el objeto
root-sync
RootSync con el siguiente comando:nomos status
Para configurar el segundo repositorio, sigue estos pasos:
- Crea un repositorio o un directorio en tu repositorio de Git.
- Copia los recursos con la anotación
configmanagement.gke.io/managed: disabled
en el nuevo repositorio o directorio. - Elimina la anotación
configmanagement.gke.io/managed: disabled
del nuevo repositorio o directorio. - Si vas a dividir tu repositorio raíz en más de dos repositorios, repite estos pasos según sea necesario.
Confirma y envía el cambio:
git commit -am 'add configuration for the new root repository'
Aplica un objeto
root-sync-1
RootSync para sincronizar el nuevo repositorio o directorio de forma que los objetos del clúster se gestionen con el nuevo objetoroot-sync-1
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
Haz los cambios siguientes:
NEW_ROOT_REPOSITORY
: URL del repositorio de Git que se va a usar como nuevo repositorio raíz. Puede introducir URLs con el protocolo HTTPS o SSH. Por ejemplo,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa el protocolo HTTPS. Si no introduces ningún protocolo, la URL se tratará como una URL HTTPS.NEW_ROOT_REVISION
: (opcional) revisión de Git (etiqueta o hash) del nuevo repositorio raíz que debe consultarse.NEW_ROOT_BRANCH
: (opcional) rama del nuevo repositorio raíz desde la que se hace la sincronización.NEW_ROOT_DIRECTORY
: (opcional) la ruta del repositorio de Git al nuevo directorio raíz que contiene la configuración que quieres sincronizar.ROOT_AUTH_TYPE
: este valor debe ser el mismo que el del objeto RootSync/root-sync.ROOT_EMAIL
: este valor debe ser el mismo que el del objeto RootSync/root-sync.
Espera a que se sincronice el nuevo objeto
root-sync-1
RootSync. Puedes comprobar el estado con el siguiente comando:nomos status
Elimina los recursos con la anotación
configmanagement.gke.io/managed: disabled
del repositorio original. Confirma y envía el cambio:git commit -am 'remove configuration managed by the new root repository'
Espera a que se sincronice el objeto
root-sync
RootSync con el siguiente comando:nomos status
Dividir un repositorio raíz jerárquico
Los pasos para dividir un repositorio jerárquico son similares a los que se siguen para dividir un repositorio no estructurado.
Hay tres diferencias principales:
El nuevo repositorio raíz (o el nuevo directorio) también debe ser jerárquico. Debes copiar los directorios
system/
yclusterregistry/
en el nuevo repositorio raíz (o en el nuevo directorio).Los recursos de un espacio de nombres no se pueden repartir entre varios repositorios. De lo contrario, los reconciliadores se pelearán por gestionar el espacio de nombres.
El objeto
root-sync-1
RootSync debe usarspec.sourceFormat: hierarchical
.
Como te recomendamos que uses repositorios no estructurados, también puedes convertir tu repositorio jerárquico en un repositorio no estructurado antes de dividirlo.