Sincroniza con un repositorio jerárquico

En este instructivo, se muestra cómo usar un repositorio raíz jerárquico del Sincronizador de configuración para administrar la configuración de un clúster de Kubernetes compartido por dos equipos diferentes, team-1 y team-2.

Objetivos

  • Obtener información sobre prácticas recomendadas para usar un repositorio jerárquico
  • Sincronizar un clúster con el repositorio jerárquico de ejemplo

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud sean aptos para obtener una prueba gratuita.

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  3. Debes tener acceso a un clúster con el Sincronizador de configuración ya instalado. Si no tienes ese clúster, sigue las instrucciones en las secciones “Antes de comenzar” y “Prepara tu entorno” de la Guía de inicio rápido para Anthos o la Guía de inicio rápido para GKE.
  4. Configura el acceso a la línea de comandos de kubectl mediante la ejecución del siguiente comando:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --zone ZONE \
        --project PROJECT_ID
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: El nombre del clúster registrado en el que deseas aplicar esta configuración
    • ZONE: La zona en la que creaste el clúster.
    • PROJECT_ID: El ID de tu proyecto

Explora la arquitectura del repositorio

En este instructivo, debes configurar el Sincronizador de configuración para que se sincronice con los archivos de configuración en el directorio config/ del repositorio hierarchical-format/. El directorio config/ contiene los siguientes directorios y archivos:

├── cluster
│   ├── clusterrolebinding-namespace-reader.yaml
│   ├── clusterrole-namespace-reader.yaml
│   ├── clusterrole-secret-admin.yaml
│   ├── clusterrole-secret-reader.yaml
│   └── crontab-crd.yaml
├── namespaces
│   ├── limit-range.yaml
│   ├── team-1
│   │   ├── crontab.yaml
│   │   ├── namespace.yaml
│   │   ├── network-policy-default-deny-egress.yaml
│   │   ├── resource-quota-pvc.yaml
│   │   ├── rolebinding-secret-reader.yaml
│   │   └── sa.yaml
│   └── team-2
│       ├── crontab.yaml
│       ├── namespace.yaml
│       ├── network-policy-default-deny-all.yaml
│       ├── resource-quota-pvc.yaml
│       ├── rolebinding-secret-admin.yaml
│       └── sa.yaml
├── README.md
└── system
    └── repo.yaml

Un repositorio raíz jerárquico válido del Sincronizador de configuración debe incluir tres subdirectorios: cluster/, namespaces/ y system/.

El directorio cluster/ contiene opciones de configuración que se aplican a clústeres completos (como CRD, ClusterRoles y ClusterRoleBindings), en lugar de a espacios de nombres.

El directorio namespaces/ contiene opciones de configuración para los objetos de espacio de nombres y los objetos con alcance de espacio de nombres. Cada subdirectorio de namespaces/ incluye la configuración para un objeto de espacio de nombres y todos los objetos con permisos de espacio de nombres del espacio de nombres. El nombre de un subdirectorio debe ser el mismo que el nombre del objeto del espacio de nombres. Los objetos con permisos de espacios de nombres que se deben crear en cada espacio de nombres se pueden colocar directamente en namespaces/ (por ejemplo, namespaces/limit- range.yaml).

En este instructivo, cada equipo tiene su propio espacio de nombres de Kubernetes, cuenta de servicio de Kubernetes, cuotas de recursos, políticas de red y vinculaciones de funciones. El administrador del clúster configura una política en namespaces/limit-range.yaml para restringir las asignaciones de recursos (a Pods o contenedores) en ambos espacios de nombres. El administrador del clúster también configura ClusterRoles y ClusterRoleBindings.

El directorio system/ contiene opciones de configuración para el operador del Sincronizador de configuración.


El directorio compiled/ (que no es necesario para usar el Sincronizador de configuración) contiene el resultado de nomos hydrate, que compila los archivos de configuración en los directorios cluster/, namespaces/, system/ en el formato exacto que se enviaría al servidor de la API para su aplicación. Los recursos con permisos de clúster se encuentran directamente en este directorio. Cada subdirectorio incluye todos los archivos de configuración para los recursos en un espacio de nombres. El directorio compiled/ contiene los siguientes directorios y archivos:

.
├── clusterrolebinding_namespace-reader.yaml
├── clusterrole_namespace-reader.yaml
├── clusterrole_secret-admin.yaml
├── clusterrole_secret-reader.yaml
├── customresourcedefinition_crontabs.stable.example.com.yaml
├── namespace_team-1.yaml
├── namespace_team-2.yaml
├── team-1
│   ├── crontab_my-new-cron-object.yaml
│   ├── limitrange_limits.yaml
│   ├── networkpolicy_default-deny-egress.yaml
│   ├── resourcequota_pvc.yaml
│   ├── rolebinding_secret-reader.yaml
│   └── serviceaccount_sa.yaml
└── team-2
    ├── crontab_my-new-cron-object.yaml
    ├── limitrange_limits.yaml
    ├── networkpolicy_default-deny-all.yaml
    ├── resourcequota_pvc.yaml
    ├── rolebinding_secret-admin.yaml
    └── serviceaccount_sa.yaml

Sincroniza tu clúster con el repositorio raíz mediante el Sincronizador de configuración

En esta sección, deberás sincronizar tu clúster con el repositorio jerárquico mediante el Sincronizador de configuración y la herramienta de línea de comandos de gcloud.

  1. Crea un archivo llamado apply-spec.yaml y pega el siguiente texto en él:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      configSync:
        enabled: true
        sourceFormat: hierarchy
        syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples/
        syncBranch: init
        secretType: none
        policyDir: hierarchical-format/config
    
  2. Aplica el archivo apply-spec.yaml con la herramienta de línea de comandos de gcloud:

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML_PATH \
         --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: El nombre del clúster registrado en el que deseas aplicar esta configuración
    • CONFIG_YAML_PATH: La ruta de acceso a tu archivo apply-spec.yaml
    • PROJECT_ID: El ID de tu proyecto
  3. Verifica si el Sincronizador de configuración sincroniza correctamente todos los archivos de configuración con el clúster:

    gcloud alpha container hub config-management status
        --project=PROJECT_ID
    

    Resultado de ejemplo:

    Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller                          Hierarchy_Controller
    CLUSTER_NAME  SYNCED  6bfc9be            init         2021-06-08T17:26:32Z  GatekeeperControllerManager NOT_INSTALLED  PENDING
    

    Si la instalación se realiza correctamente, tendrá el estado SYNCED.

Examina los archivos de configuración

El directorio config/ incluye los siguientes recursos:

  • ClusterRoles
  • ClusterRoleBindings
  • CRD
  • Espacios de nombres
  • RoleBindings
  • ServiceAccounts
  • ResourceQuotas
  • NetworkPolicies
  • LimitRanges
  • CR

Estos archivos de configuración se aplican en cuanto se configure el Sincronizador de configuración para leer desde el repositorio. En esta sección, debes comprobar si el Sincronizador de configuración administra los espacios de nombres, CRD y vinculaciones de funciones en el directorio.

Todos los objetos administrados por el Sincronizador de configuración tienen la etiqueta app.kubernetes.io/managed-by configurada en configmanagement.gke.io y puedes usarla para consultar tus recursos.

  1. Enumera los espacios de nombres que administra el Sincronizador de configuración:

    kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Resultado de ejemplo:

    NAME        STATUS   AGE
    team-1      Active   28m
    team-2      Active   28m
    
  2. Enumera las CRD administradas por el Sincronizador de configuración:

    kubectl get crds -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Resultado de ejemplo:

    NAME                          CREATED AT
    crontabs.stable.example.com   2021-05-04T14:58:14Z
    
  3. Enumera las vinculaciones de funciones administradas por el Sincronizador de configuración:

    kubectl get rolebindings -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Resultado de ejemplo:

    NAMESPACE   NAME                            ROLE                        AGE
    team-1      secret-reader                   ClusterRole/secret-reader   29m
    team-2      secret-admin                    ClusterRole/secret-admin    29m
    

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos individuales

Para evitar que el Sincronizador de configuración administre tu clúster, ejecuta el siguiente comando:

gcloud alpha container hub config-management unmanage \
    --project=PROJECT_ID \
    --membership=CLUSTER_NAME

Para borrar un clúster, ejecuta el siguiente comando:

gcloud container clusters delete CLUSTER_NAME

¿Qué sigue?