Divide un repositorio en varios repositorios

En esta página, se muestra cómo dividir de forma segura un repositorio raíz en dos o más repositorios raíz. Los pasos también se pueden aplicar a los repositorios de espacios de nombres.

Un repositorio sincronizado mediante el Sincronizador de configuración hace referencia a la combinación de un repositorio de Git, una rama, una revisión y un directorio.

Cuando hay una gran cantidad de recursos, por ejemplo, más de 5,000, en el repositorio raíz, el Sincronizador de configuración podría no comportarse bien por las siguientes dos razones:

  1. El objeto ResourceGroup puede exceder el límite de tamaño del objeto etcd. El objeto ResourceGroup registra el grupo, la categoría, el espacio de nombres y el nombre de todos los recursos en el repositorio de Git. Tener una gran cantidad de recursos genera un objeto ResourceGroup grande.
  2. Toma más tiempo sincronizar todos los recursos que un repositorio con una cantidad menor de recursos. El Sincronizador de configuración aplica los recursos al clúster de manera secuencial. A veces, los recursos no se pueden aplicar de forma correcta la primera vez y el Sincronizador de configuración debe reintentar aplicarlos.

Cuando encuentras estos problemas, puedes dividir tu repositorio raíz en varios de ellos para que cada repositorio raíz tenga menos recursos.

Divide un repositorio raíz no estructurado

Los objetos RootSync se usan para explicar los pasos. Los pasos también se pueden aplicar a los objetos RepoSync.

Supongamos que tu repositorio raíz está sincronizado con el objeto RootSync root-sync. Después de dividirlo, tendrás dos repositorios raíz. Uno se sincroniza mediante el objeto RootSync root-sync, mientras que el otro se sincroniza con el objeto RootSync root-split.

Para dividir el repositorio, sigue estos pasos:

  1. En tu repositorio raíz existente, elige los recursos que planeas mover a un repositorio diferente o a un directorio y agrega la anotación configmanagement.gke.io/managed: disabled a ellos. Esta anotación garantiza que los objetos existentes en el clúster no se vean afectados cuando mueves su configuración de un repositorio a otro. Si usas el formato Kustomize o los gráficos de Helm, puedes elegir aproximadamente la mitad de las bases y agregar la anotación común al archivo kustomization.yaml, como en este ejemplo:

    # kustomization.yaml
    commonAnnotations:
      configmanagement.gke.io/managed: disabled
    
  2. Confirme y envíe el cambio: git commit -am 'disable Config Sync management on subset of the configuration'

  3. Espera a que se sincronice el objeto root-sync de RootSync existente con el comando gcloud alpha anthos config sync repo describe:

    # gcloud command
    gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \
      --sync-namespace config-management-system  --sync-name root-sync
    

    Reemplaza MEMBERSHIP_NAME por el nombre de membresía de tu clúster registrado.

  4. Para configurar tu segundo repositorio, sigue estos pasos:

    1. Crea un repositorio o un directorio nuevo en tu repositorio de Git existente.
    2. Copia los recursos con la anotación configmanagement.gke.io/managed: disabled en el repositorio o directorio nuevo.
    3. Quita la anotación configmanagement.gke.io/managed: disabled en el repositorio o directorio nuevo.
    4. Si divides tu repositorio raíz en más de 2 repositorios, repite estos pasos según sea necesario.
  5. Confirma y envía el cambio:

    git commit -am 'add configuration for the new root repository'
    
  6. Aplica un objeto RootSync root-split a fin de sincronizar el nuevo repositorio o directorio para que el objeto RootSync nuevo root-split administre los objetos existentes en el clúster.

     apiVersion: configsync.gke.io/v1beta1
     kind: RootSync
     metadata:
       name: root-split
       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
    

    Reemplaza lo siguiente:

    • NEW_ROOT_REPOSITORY: Es la URL del repositorio de Git que se usará como repositorio raíz nuevo. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples usa el protocolo HTTPS. Si no ingresas un protocolo, la URL se trata como una URL HTTPS.
    • NEW_ROOT_REVISION: Agrega la revisión de Git (etiqueta o hash) del nuevo repositorio raíz que se debe pagar (opcional).
    • NEW_ROOT_BRANCH: Agrega la rama del repositorio raíz nuevo desde la que se realiza la sincronización (opcional).
    • NEW_ROOT_DIRECTORY: Agrega la ruta de acceso en el repositorio de Git al directorio raíz que contiene la configuración con la que deseas sincronizar.
    • ROOT_AUTH_TYPE: Debe ser el mismo que el objeto RootSync/sync-sync existente.
    • ROOT_EMAIL: Debe ser el mismo que el objeto RootSync/sync-sync existente.
  7. Espera a que se sincronice el nuevo objeto RootSync root-split. Esto se puede hacer mediante el comando gcloud alpha anthos config sync repo describe:

    $ gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \
      --sync-namespace config-management-system  --sync-name root-split
    

    Reemplaza MEMBERSHIP_NAME por el nombre de membresía de tu clúster registrado. El repositorio raíz se sincronizó.

  8. Quita 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'
    
  9. Espera al objeto RootSync existente.root-sync que se sincronizará congcloud comando:

    $ gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \
     --sync-namespace config-management-system  --sync-name root-sync
    

    Reemplaza MEMBERSHIP_NAME por el nombre de membresía de tu clúster registrado.

Divide un repositorio raíz jerárquico

Los pasos para dividir un repositorio jerárquico son similares a los pasos para dividir un repositorio no estructurado.

Hay tres diferencias principales:

  1. El nuevo repositorio raíz (o nuevo directorio) también debe ser jerárquico. Debes copiar los directorios existentes system/ y clusterregistry/ del directorio en el nuevo repositorio raíz (o en el directorio nuevo).

  2. Los recursos de un espacio de nombres no se pueden distribuir a través de varios repositorios. De lo contrario, diferentes conciliadores luchan para administrar el espacio de nombres.

  3. El objeto RootSync root-split debe usar spec.sourceFormat: hierarchical.

Dado que recomendamos repositorios no estructurados, también puedes considerar convertir tu repositorio jerárquico en un repositorio no estructurado antes de dividirlo.