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:
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
yprod
, 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.
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:
En la Google Cloud consola Google Cloud , en la página del selector de proyectos, elige o crea dos proyectos.
-
Verify that billing is enabled for your Google Cloud project.
Actualiza tu CLI de Google Cloud a la versión más reciente.
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.
Clona el repositorio de muestra:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Ve a la carpeta que contiene los recursos que necesitas para este tutorial:
cd anthos-config-management-samples/multi-environments-kustomize/
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 CloudPROD_PROJECT_ID
: el ID del proyecto deGoogle Cloud que quieras usar como proyecto de producciónDEV_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
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 llamadoprod
en el proyecto de producción. Esta secuencia de comandos también habilita la API de GKE y se conecta a tus clústeresdev
yprod
para que puedas acceder a sus APIs conkubectl
.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 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ústeresdev
yprod
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:
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 ```
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 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
- 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.
Siguientes pasos
- Consulta información sobre los despliegues seguros con Config Sync.