Usar Config Sync en varios entornos con el renderizado automático


En este tutorial se explica cómo configurar Config Sync para Google Kubernetes Engine en dos entornos (uno de desarrollo y otro de producción) siguiendo las prácticas recomendadas de Config Sync.

En este caso, formas parte del equipo de administradores de la plataforma de Foo Corp. Las aplicaciones de Foo Corp se han desplegado en GKE y los recursos se han dividido en dos proyectos: dev y prod. El proyecto dev contiene un clúster de GKE de desarrollo y el proyecto prod contiene el clúster de GKE de producción. Tu objetivo como administrador de la plataforma es asegurarte de que ambos entornos cumplan las políticas de Foo Corp y de que los recursos básicos, como los espacios de nombres y las cuentas de servicio de Kubernetes, sigan siendo coherentes en ambos entornos.

En el siguiente diagrama se muestra un resumen de los entornos que configurarás en este tutorial:

Un resumen de los entornos que has configurado en este tutorial.

En este tutorial se usa la función de renderizado automático de Config Sync para renderizar los recursos del clúster. Cada clúster está configurado para sincronizarse desde un directorio que contiene un archivo de configuración de Kustomization, lo que activa automáticamente el proceso de renderización en Config Sync. Para obtener más información, consulta Utilizar un repositorio con configuraciones de Kustomize y charts de Helm.

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

  • Dos Google Cloud proyectos que representan los entornos de desarrollo y producción.
  • Dos clústeres de GKE, dev y prod, en proyectos independientes, con Config Sync instalado.

Arquitectura de repositorios

En este tutorial, configurarás Config Sync para que se sincronice con las configuraciones del directorio config-source/ del repositorio de ejemplos. 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 de Kustomize dev/ y prod/. Cada directorio contiene un archivo kustomization.yaml, que muestra los archivos que Kustomize debe gestionar 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/ de ese entorno específico.

Por ejemplo, el RoleBinding dev permite que todos los desarrolladores de Foo Corp desplieguen pods en el clúster de desarrollo, mientras que el RoleBinding prod solo permite que un agente de implementación continua, deploy-bot@foo-corp.com, despliegue 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

  • Configura Config Sync para que renderice y sincronice automáticamente la configuración de los dos entornos independientes.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

Antes de empezar este tutorial, asegúrate de que has completado los siguientes pasos:

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

    Ir al selector de proyectos

  2. Verify that billing is enabled for your Google Cloud project.

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

  4. Instala o actualiza el comando nomos.

Crear y registrar clústeres

Para que puedas centrarte en el flujo de trabajo que debes usar al configurar Config Sync en varios entornos, el directorio multi-environments-kustomize contiene secuencias de comandos que puedes usar para automatizar la configuración de Config Sync.

  1. Clona el repositorio de muestra:

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

    cd anthos-config-management-samples/multi-environments-kustomize/
    
  3. Para ejecutar las secuencias de comandos que se usan en este tutorial, define 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"
    

    Haz los cambios siguientes:

    • DEV_PROJECT_ID: el ID del proyecto que quieres usar como proyecto de desarrollo.Google Cloud
    • PROD_PROJECT_ID: el ID del proyecto deGoogle Cloud que quieras usar como proyecto de producción
    • DEV_CLUSTER_ZONE: la zona de Compute Engine en la que quieres crear tu clúster de desarrollo. Por ejemplo, us-central1-c.
    • PROD_CLUSTER_ZONE: la zona de Compute Engine en la que quieres 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 llamado dev en el proyecto de desarrollo y otro llamado prod en el proyecto de producción. Esta secuencia de comandos también habilita la API de GKE y se conecta a tus clústeres dev y prod para que puedas acceder a sus APIs con kubectl.

    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 Google Cloud cuenta de servicio y una clave para registrar el clúster de GKE y, a continuación, usa el comando gcloud container fleet memberships register para registrar los clústeres dev y prod en GKE en sus propios proyectos.

    Ejemplo:

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

Configurar Config Sync

Ahora que has creado y registrado tus clústeres, puedes instalar Config Sync y verificar la instalación.

Instalar Config Sync

Para instalar Config Sync en los clústeres 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.

Config Sync ahora se sincroniza con las configuraciones de tus repositorios.

Verificar tu configuración

En esta sección, comprueba que tus clústeres se estén sincronizando con las configuraciones de tu repositorio:

  1. Para comprobar el estado de la instalación de Config Sync, ejecuta el comando nomos status:

    nomos status
    

    Deberías ver que los clústeres de desarrollo y producción se han sincronizado con sus repositorios respectivos:

    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 los espacios de nombres. Debería aparecer el espacio de nombres foo.

    kubectl get namespace
    

    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 has configurado el renderizado automático de la configuración para un entorno de desarrollo y otro de producción en varios proyectos y entornos. Google Cloud

Limpieza

Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

Eliminar todos los recursos

Para eliminar los recursos que has creado en este tutorial, pero mantener intactos los proyectos de desarrollo y producción, ejecuta la secuencia de comandos de limpieza:

./cleanup.sh

Eliminar 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.

Siguientes pasos