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:
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
yprod
, 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.
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:
En la página del selector de proyectos de la consola de Google Cloud, elige o crea dos proyectos de Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
Actualiza la CLI de Google Cloud a la versión más reciente.
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.
Clona el repositorio de ejemplo:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Navega a la carpeta que contiene los recursos que necesitas para este instructivo:
cd anthos-config-management-samples/multi-environments-kustomize/
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 desarrolloPROD_PROJECT_ID
: El ID del proyecto de Google Cloud que deseas usar como proyecto de producciónDEV_CLUSTER_ZONE
: Es la zona de Compute Engine en la que deseas crear el clúster de desarrollo. Un ejemplo esus-central1-c
.PROD_CLUSTER_ZONE
: Es la zona de Compute Engine en la que deseas crear tu clúster de producción.
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 llamadoprod
en el proyecto de producción. Esta secuencia de comandos también habilita la API de GKE Enterprise y se conecta a tus clústeresdev
yprod
para que puedas acceder a sus APIs conkubectl
.Resultado de ejemplo:
kubeconfig entry generated for dev. Fetching cluster endpoint and auth data. kubeconfig entry generated for prod. ⭐️ Done creating clusters.
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ústeresdev
yprod
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:
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 ```
Usa
kubectl
para cambiar al clúster de desarrollo:kubectl config use-context "gke_${DEV_PROJECT}_${DEV_CLUSTER_ZONE}_dev"
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
¿Qué sigue?
- Obtén más información sobre los lanzamientos seguros con el Sincronizador de configuración.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.