Usa el Sincronizador de configuración en múltiples entornos con procesamiento automatizado


En este instructivo, se muestra cómo configurar el Sincronizador de configuración para la edición empresarial de Google Kubernetes Engine (GKE) en dos entornos, uno para desarrollo y otro para producción, con las prácticas recomendadas para el Sincronizador de configuración.

En esta situación, eres parte del equipo de administración de una plataforma en Foo Corp. Las aplicaciones de Foo Corp se implementan en GKE Enterprise con los recursos divididos en dos proyectos, dev y prod. El proyecto dev contiene un clúster de GKE Enterprise de desarrollo y el proyecto prod contiene el clúster de GKE Enterprise de producción. Tu objetivo como administrador de la plataforma es garantizar que ambos entornos cumplan con las políticas de Foo Corp y que los recursos de nivel base, como los espacios de nombres y las cuentas de servicio de Kubernetes, permanezcan coherentes en ambos entornos.

En el siguiente diagrama, se muestra una descripción general de los entornos que configuraste en este instructivo:

Una descripción general de los entornos que configuraste en este instructivo.

En este instructivo, se usa la función de procesamiento automatizado del Sincronizador de configuración para procesar los recursos del clúster. Cada uno de los clústeres está configurado para sincronizarse desde un directorio que contiene un archivo de configuración de Kustomization, que activa el procesamiento de forma automática en el Sincronizador de configuración. Para obtener más detalles, consulta Usa un repositorio con los parámetros de configuración de Kustomize y los gráficos de Helm.

Como se muestra en el diagrama anterior, en este instructivo, crearás los siguientes recursos:

  • Dos proyectos de Google Cloud que representan los entornos de desarrollo y producción.
  • Dos clústeres de GKE Enterprise, dev y prod, en los proyectos diferentes, con el Sincronizador de configuración instalado.

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-source/ del repositorio de muestras. Este directorio contiene los siguientes directorios y archivos:

config-source/
├── base
│   ├── foo
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── serviceaccount.yaml
│   ├── kustomization.yaml
│   ├── pod-creator-clusterrole.yaml
│   └── pod-creator-rolebinding.yaml
├── cloudbuild.yaml
├── overlays
│   ├── dev
│   │   └── kustomization.yaml
│   └── prod
│       └── kustomization.yaml
└── README.md

El directorio config-source incluye los manifiestos base/ y las superposiciones dev/ y prod/ de Kustomize. Cada directorio contiene un archivo kustomization.yaml, que enumera los archivos que Kustomize debe administrar y aplicar al clúster. En dev/kustomization.yaml y prod/kustomization.yaml, se define una serie de parches. Estos parches manipulan los recursos base/ para ese entorno específico.

Por ejemplo, dev RoleBinding permite a todos los desarrolladores de Foo Corp implementar Pods en el clúster de desarrollo, mientras que prod RoleBinding solo permite que un agente de implementación continua, deploy-bot@foo-corp.com, implemente Pods en producción:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
# ServiceAccount - make name unique per environ
- target:
    kind: ServiceAccount
    name: foo-ksa
  patch: |-
    - op: replace
      path: /metadata/name
      value: foo-ksa-dev
    - op: replace
      path: /metadata/namespace
      value: foo-dev
# Pod creators - give all Foo Corp developers access
- target:
    kind: RoleBinding
    name: pod-creators
  patch: |-
    - op: replace
      path: /subjects/0/name
      value: developers-all@foo-corp.com
commonLabels:
  environment: dev

Objetivos

  • Establece el Sincronizador de configuración para procesar y sincronizar de forma automática la configuración de los dos entornos separados.

Costos

En este documento, usarás 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 califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

Antes de comenzar con este instructivo, asegúrate de haber completado los pasos que se indican a continuación:

  1. En la página del selector de proyectos de la consola de Google Cloud, elige o crea dos proyectos de Google Cloud.

    Ir al selector de proyectos

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Actualiza la CLI de Google Cloud a la versión más reciente.

  4. Instala o actualiza el comando nomos

Crea y registra tus clústeres

A fin de enfocarte en el flujo de trabajo que necesitas usar cuando configuras el Controlador de jerarquía para varios entornos, el directorio multi-environments-kustomize contiene secuencias de comandos que puedes usar a fin de automatizar la configuración del Sincronizador de configuración.

  1. Clona el repositorio de ejemplo:

    git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
    
  2. Navega a la carpeta que contiene los recursos que necesitas para este instructivo:

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. Para ejecutar las secuencias de comandos usadas en este instructivo, configura las siguientes variables:

    export DEV_PROJECT="DEV_PROJECT_ID"
    export PROD_PROJECT="PROD_PROJECT_ID"
    export DEV_CLUSTER_ZONE="DEV_CLUSTER_ZONE"
    export PROD_CLUSTER_ZONE="PROD_CLUSTER_ZONE"
    export CM_CONFIG_DIR="config-sync-rendering"
    

    Reemplaza lo siguiente:

    • DEV_PROJECT_ID: El ID del proyecto de Google Cloud que deseas usar como proyecto de desarrollo
    • PROD_PROJECT_ID: El ID del proyecto de Google Cloud que deseas usar como proyecto de producción
    • DEV_CLUSTER_ZONE: Es la zona de Compute Engine en la que deseas crear el clúster de desarrollo. Un ejemplo es us-central1-c.
    • PROD_CLUSTER_ZONE: Es la zona de Compute Engine en la que deseas crear tu clúster de producción.
  4. Para crear dos clústeres, ejecuta la secuencia de comandos ./create-clusters.sh:

    ./create-clusters.sh
    

    Esta secuencia de comandos crea un clúster de GKE Enterprise llamado dev en el proyecto de desarrollo y un clúster de GKE Enterprise llamado prod en el proyecto de producción. Esta secuencia de comandos también habilita la API de GKE Enterprise y se conecta a tus clústeres dev y prod para que puedas acceder a sus APIs con kubectl.

    Resultado de ejemplo:

    kubeconfig entry generated for dev.
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for prod.
    ⭐️ Done creating clusters.
    
  5. Para registrar tus clústeres en dos flotas independientes, ejecuta la secuencia de comandos register-clusters.sh:

    ./register-clusters.sh
    

    Esta secuencia de comandos crea una cuenta de servicio y una clave de Google Cloud para el registro del clúster de GKE Enterprise y, luego, usa el comando gcloud container fleet memberships register para registrar los clústeres dev y prod en GKE Enterprise en sus propios proyectos.

    Resultado de ejemplo:

    Waiting for Feature Config Management to be created...done.
    ⭐️ Done registering clusters.
    

Configura el Sincronizador de configuración

Ahora que creaste y registraste tus clústeres, puedes instalar el Sincronizador de configuración y verificar la instalación.

Instala Sincronizador de configuración

Para instalar el Sincronizador de configuración, en el clúster de desarrollo y producción, ejecuta la secuencia de comandos install-config-sync.sh:

./install-config-sync.sh

Resultado esperado:

🔁 Installing ConfigSync on the dev cluster...
Updated property [core/project].
Switched to context "DEV_CLUSTER".
Waiting for Feature Config Management to be updated...done.
🔁 Installing ConfigSync on the prod cluster...
Updated property [core/project].
Switched to context "PROD_CLUSTER".
Waiting for Feature Config Management to be updated...done.

El Sincronizador de configuración ahora se sincroniza con los archivos de configuración de tus repositorios.

Verifica la configuración

En esta sección, debes verificar si tus clústeres se sincronizan con los archivos de configuración de tu repositorio:

  1. Para verificar el estado de la instalación del Sincronizador de configuración, ejecuta el comando nomos status:

    nomos status
    

    Deberías ver que tus clústeres de desarrollo y producción ahora están sincronizados con sus respectivos repositorios:

    gke_DEV_PROJECT_ID_us-central1-c_dev
      --------------------
      <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/dev@main
      SYNCED   8f2e196f
      Managed resources:
         NAMESPACE   NAME                                                 STATUS
                     clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                     namespace/default                                    Current
                     namespace/foo                                        Current
         default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
         foo         serviceaccount/foo-ksa-dev                           Current
    
    *gke_PROD_PROJECT_ID_us-central1-c_prod
       --------------------
       <root>   https://github.com/GoogleCloudPlatform/anthos-config-management-samples/multi-environments-kustomize/config-source/overlays/prod@main
       SYNCED   c91502ee
       Managed resources:
          NAMESPACE   NAME                                                 STATUS
                      clusterrole.rbac.authorization.k8s.io/pod-creator    Current
                      namespace/default                                    Current
                      namespace/foo                                        Current
          default     rolebinding.rbac.authorization.k8s.io/pod-creators   Current
          foo         serviceaccount/foo-ksa-prod                          Current
    
      ```
    
  2. Usa kubectl para cambiar al clúster de desarrollo:

    kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
    
  3. Para verificar que los recursos estén sincronizados, obtén espacios de nombres. Deberías ver el espacio de nombres foo.

    kubectl get namespace
    

    Resultado de ejemplo:

    NAME                           STATUS   AGE
    config-management-monitoring   Active   9m38s
    config-management-system       Active   9m38s
    default                        Active   47h
    foo                            Active   9m5s
    kube-node-lease                Active   47h
    kube-public                    Active   47h
    kube-system                    Active   47h
    resource-group-system          Active   9m30s
    

    Ya configuraste el procesamiento automatizado de la configuración para un entorno de desarrollo y producción en varios entornos y proyectos de Google Cloud.

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 todos los recursos

Para borrar los recursos que creaste en este instructivo, pero mantener los proyectos de desarrollo y producción intactos, ejecuta la secuencia de comandos de limpieza:

./cleanup.sh

Borra los proyectos

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

¿Qué sigue?