Este conjunto de tutoriales está dirigido a administradores de TI y operadores que quieran desplegar, ejecutar y gestionar entornos de aplicaciones modernas que se ejecuten en Google Kubernetes Engine. A lo largo de esta serie de tutoriales, aprenderás a configurar la monitorización y las alertas, escalar cargas de trabajo y simular errores. Todo ello con la aplicación de microservicios de ejemplo Cymbal Bank:
- Crear un clúster y desplegar una aplicación de ejemplo
- Monitorizar con Google Cloud Managed Service para Prometheus
- Escalar cargas de trabajo
- Simular un fallo
- Centralizar la gestión de cambios (este tutorial)
Descripción general y objetivos
A medida que crees nuevos servicios y aplicaciones, puede que quieras probar los cambios en diferentes entornos. A medida que tu organización crezca, es posible que necesites configuraciones de clúster diferentes para distintos equipos. Gestionar varios clústeres con configuraciones diferentes puede ser complicado. Puedes usar herramientas de GitOps como Config Sync para gestionar estos retos.
En el tutorial para crear un clúster, creaste un clúster y desplegaste la aplicación Cymbal Bank en él.
En este tutorial, aprenderás a almacenar los manifiestos de Kubernetes de tu aplicación en un repositorio de Git centralizado y a usar herramientas como Config Sync para desplegar una aplicación en varios clústeres de una flota. Aprenderás a completar las siguientes tareas:
Crear un repositorio de Git y conectarlo a Cloud Build
Crear un clúster, registrarlo en una flota e instalar Config Sync en la flota de clústeres
Usar un paquete de flota para desplegar Cymbal Bank y otros recursos en un clúster o en una flota
Crear clústeres
En el primer tutorial de esta serie, creaste un clúster e implementaste la aplicación Cymbal Bank en ese clúster. En un escenario real, es poco probable que solo tengas un clúster que gestionar. GKE te permite agrupar clústeres en una flota, que es un grupo lógico de clústeres que se pueden gestionar conjuntamente. Dentro de una flota, puedes agrupar aún más tus clústeres. Por ejemplo, puedes tener clústeres que representen diferentes entornos o que pertenezcan a distintos equipos. Por ejemplo, puedes tener un clúster de desarrollo, un clúster de staging y un clúster de producción. En una organización grande, los equipos pueden tener sus propios clústeres para diferentes entornos. Como administradores de TI u operadores, esto puede significar que tenéis que gestionar decenas de clústeres.
Cuando se trata de desplegar aplicaciones o recursos individuales, como políticas personalizadas, en todos estos clústeres, las funciones de GKE, como Config Sync, pueden ayudarte a gestionar esos despliegues a gran escala.
Para mostrar cómo desplegar recursos en diferentes entornos o en una flota de clústeres, crea un clúster y despliega la aplicación Cymbal Bank en él:
Crea un clúster de GKE que simule un entorno de desarrollo:
gcloud container clusters create-auto scalable-apps-dev \ --project=PROJECT_ID \ --region=REGION \ --fleet-project=PROJECT_ID \ --release-channel=rapid
Haz los cambios siguientes:
PROJECT_ID
por el ID generado automáticamente del proyecto que has creado en la sección anterior. El ID del proyecto suele ser diferente del nombre del proyecto. Por ejemplo, tu proyecto podría llamarse scalable-apps, pero su ID podría ser scalable-apps-567123.REGION
con la región en la que quieras crear el clúster, comous-central1
.
Las etiquetas son pares clave-valor que puedes añadir a los recursos de GKE para organizarlos. En el caso de los paquetes de flota, puedes usar etiquetas de pertenencia a la flota para personalizar los clústeres a los que se dirige el paquete de flota. No se admiten otros tipos de etiquetas.
Añade una etiqueta a la pertenencia a la flota:
gcloud container fleet memberships update scalable-apps-dev \ --update-labels=env=dev
Cuando crees el paquete de flota más adelante en este tutorial, esta etiqueta se asegurará de que los recursos solo se implementen en el clúster
scalable-apps-dev
y no en el clústerscalable-apps
del primer tutorial de esta serie.
Instalar Config Sync
Instala Config Sync en ambos clústeres:
- En la Google Cloud consola, ve a la página Configuración de la sección Funciones.
- Haz clic en add Instalar Config Sync.
- Deja seleccionada la opción Actualizaciones manuales.
- El menú de versiones debería tener la versión más reciente de Config Sync de forma predeterminada. Si es necesario, selecciona la versión más reciente.
- En Opciones de instalación, selecciona Instalar Config Sync en toda la flota (recomendado).
- Haz clic en Instalar Config Sync.
- En la pestaña Configuración de Config Sync, consulta el campo Estado de la lista de clústeres. Al cabo de unos minutos, el estado será "Pendiente" hasta que el clúster se configure correctamente para Config Sync. El estado puede tardar hasta 10 minutos en cambiar a Habilitado.
Implementar Cymbal Bank
En el primer tutorial de esta serie, usaste comandos de kubectl
para aplicar las configuraciones de la aplicación a tu clúster. En este tutorial, usarás la función de paquetes de flota de Config Sync para desplegar esas mismas configuraciones en un nuevo clúster. En una sección posterior, verás un ejemplo de cómo añadir un nuevo recurso a tu repositorio de Git e implementar esos recursos en una flota de clústeres.
Configurar una cuenta de servicio para Cloud Build
Una cuenta de servicio es un tipo especial de cuenta que suele utilizar una aplicación en lugar de una persona. Como práctica recomendada al crear cuentas de servicio, debes crear cuentas de servicio para un único servicio o tarea específicos y asignarles roles granulares. En este tutorial, crearás una cuenta de servicio para conceder permisos a Cloud Build para obtener recursos de Kubernetes de tu repositorio de Git y desplegarlos en tus clústeres.
Para crear la cuenta de servicio y conceder los permisos necesarios, sigue estos pasos:
Crea la cuenta de servicio:
gcloud iam service-accounts create "cymbal-bank-service-account"
Concede a la cuenta de servicio permiso para obtener recursos de tu repositorio de Git añadiendo un enlace de política de gestión de identidades y accesos para el rol Editor de paquetes de recursos:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/configdelivery.resourceBundlePublisher'
Si se te pide, selecciona
None
como condición de la política.Concede a la cuenta de servicio el permiso para escribir registros añadiendo un enlace de política de gestión de identidades y accesos para el rol Escritor de registros:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role='roles/logging.logWriter'
Si se te pide, selecciona
None
como condición de la política.
Crear una versión de la aplicación Cymbal Bank
Un paquete de flota requiere una etiqueta de versión semántica para saber desde qué versión de tu repositorio se va a implementar. Es recomendable crear nuevas versiones cuando hagas cambios en tu repositorio, ya que esto te ayudará a controlar las versiones y te facilitará volver a una versión estable si es necesario.
En una ventana del navegador web de tu fork de GitHub de Cymbal Bank, en la sección Releases (Lanzamientos) de la barra lateral, haz clic en Create a new release (Crear lanzamiento).
Seleccione el menú Elegir una etiqueta y escriba
v1.0.0
como etiqueta. Haz clic en Crear etiqueta.Haz clic en Publicar versión.
Configurar la autenticación
Al igual que en el primer tutorial de esta serie, debes crear un JWT para gestionar la autenticación de usuarios y un secreto de Kubernetes para almacenar el JWT del nuevo clúster que has creado. Es recomendable que cada clúster tenga un JWT único para la autenticación.
En Cloud Shell, crea el JWT:
openssl genrsa -out jwtRS256.key 4096 openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
Crea el secreto de Kubernetes:
kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
Desplegar la aplicación Cymbal Bank con un paquete de flota
Un recurso FleetPackage
es una API declarativa para desplegar varios manifiestos de Kubernetes en una flota de clústeres.
Para crear un paquete de flota, debes definir una especificación de FleetPackage
que apunte al repositorio con tus recursos de Kubernetes que hayas conectado a Cloud Build. A continuación, aplica el recurso FleetPackage
, que obtiene los recursos de Git y los implementa en toda la flota.
En Cloud Shell, define la ubicación predeterminada de los comandos de
configdelivery
Google Cloud CLI. Al igual que cuando conectas tu repositorio a Cloud Build, debes usarus-central1
mientras la función de paquetes de la flota esté en versión preliminar:gcloud config set config_delivery/location us-central1
Crea un archivo llamado
fleetpackage-spec.yaml
con el siguiente contenido:resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME tag: v1.0.0 serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com path: kubernetes-manifests target: fleet: project: projects/PROJECT_ID selector: matchLabels: env: dev rolloutStrategy: rolling: maxConcurrent: 1
Sustituye
REPOSITORY_NAME
por el nombre de tu repositorio, tal como aparece en la conexión de Cloud Build.Los campos del selector coinciden con la etiqueta de pertenencia a la flota que has creado antes. De esta forma, la aplicación Cymbal Bank solo se desplegará en el clúster
scalable-apps-dev
. El clústerscalable-apps
del primer tutorial no se verá afectado. En la siguiente sección, verás un ejemplo de un paquete de flota que se dirige a todos los clústeres de una flota.El campo de estrategia de lanzamiento controla cómo se implementan los recursos en los clústeres. En este ejemplo, solo vas a implementar en un clúster, por lo que este campo no cambia la forma en que se lleva a cabo el lanzamiento. Sin embargo, si tienes muchos clústeres, este ajuste asegura que los archivos de recursos se apliquen a un clúster antes de pasar al siguiente. De esta forma, puedes monitorizar el progreso del lanzamiento.
Crea el paquete de flota:
gcloud alpha container fleet packages create cymbal-bank-fleet-package \ --source=fleetpackage-spec.yaml \ --project=PROJECT_ID
Verifica que se haya creado el paquete de flota:
gcloud alpha container fleet packages list
En el resultado se muestra el estado del activador de compilación. Al cabo de unos segundos, el campo
MESSAGE
se actualizará con un resultado similar al siguiente:MESSAGES: Build status: WORKING. The release is still being built; see the build status on the following page:
Puedes hacer clic en el enlace proporcionado para ver los registros de streaming del trabajo de Cloud Build. Cloud Build puede tardar unos minutos en procesar el activador de compilación.
Cuando el activador de compilación se completa correctamente, el resultado de
gcloud alpha container fleet packages list
es similar al siguiente:NAME: cymbal-bank-fleet-package STATE: ACTIVE CREATE_TIME: 2024-07-09T15:15:56 ACTIVE_ROLLOUT: rollout-20240709-153621 LAST_COMPLETED_ROLLOUT: MESSAGES:
El paquete de flota empieza a desplegar los recursos de Kubernetes en tu flota.
En la página Google Kubernetes Engine de la Google Cloud consola, selecciona tu clúster
scalable-apps-dev
y, a continuación, ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se están desplegando en todos tus clústeres de GKE:Abre la página Cargas de trabajo.
Es posible que veas algunos errores mientras Autopilot ajusta tus pods para satisfacer las solicitudes de recursos. Al cabo de unos minutos, verás que tus pods empiezan a ejecutarse con el estado OK.
Para ver la interfaz web de Cymbal Bank, sigue estos pasos:
En la página Google Kubernetes Engine de la Google Cloud consola, ve a la página Gateways, Services & Ingress (Gateways, servicios y entrada).
Para encontrar el ingreso de Cymbal Bank, haz clic en la pestaña "Servicios" y busca el servicio con el nombre
frontend
.Haga clic en el enlace Endpoint (Endpoint) de la entrada
frontend
, como198.51.100.143:80
, para abrir la interfaz web de Cymbal Bank.
Desplegar recursos en una flota
Ahora, imagina que quieres ampliar tu aplicación Cymbal Bank con un nuevo microservicio. Quieres desplegar este microservicio en todos tus clústeres actuales y en los que añadas a la flota en el futuro. Si usas un paquete de flota, puedes desplegarlo en varios clústeres y obtener un despliegue automático en los clústeres nuevos.
Añadir recursos a tu repositorio de Git
Para mostrar cómo se añade un nuevo servicio a una aplicación, se crea una implementación básica de nginx y se añade a los clústeres:
En una ventana del navegador web de tu fork de GitHub de Cymbal Bank, haz clic en Add file (Añadir archivo) y, a continuación, en Create new file (Crear archivo).
Ponle el nombre
new-resource/nginx.yaml
al archivo y pega el siguiente contenido:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:1.14.2 name: nginx ports: - containerPort: 80
Haz clic en Confirmar cambios...
En el cuadro de diálogo de confirmación, mantén seleccionada la opción Confirmar directamente en la rama
main
y haz clic en Confirmar cambios.En la página principal del repositorio de Cymbal Bank bifurcado, selecciona Lanzamientos en la barra lateral.
En la parte superior de la página, selecciona Crear borrador.
Seleccione el menú Elegir una etiqueta y escriba
v1.1.0
como etiqueta. Haga clic en Crear etiqueta.Haz clic en Publicar versión.
Desplegar un recurso en clústeres con un paquete de flota
Para implementar el nuevo recurso, crea un paquete de flota:
Este paquete de flota se dirige a todos los clústeres de tu flota, ya que no contiene ningún campo de selector. Esto también significa que cualquier clúster que se añada a la flota en el futuro tendrá la implementación de nginx añadida automáticamente.
En Cloud Shell, crea un archivo llamado
new-deployment-fleet-package.yaml
con el siguiente contenido:resourceBundleSelector: cloudBuildRepository: name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME tag: v1.1.0 serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com path: kubernetes-manifests/new-resource target: fleet: project: projects/PROJECT_ID rolloutStrategy: rolling: maxConcurrent: 1
Crea el paquete de flota para iniciar la implementación:
gcloud alpha container fleet packages create new-deployment-fleet-package \ --source=new-deployment-fleet-package.yaml \ --project=PROJECT_ID
Verifica que se haya creado el paquete de flota:
gcloud alpha container fleet packages list
Puedes hacer clic en el enlace proporcionado para ver los registros de streaming del trabajo de Cloud Build.
El paquete de flota empieza a desplegar los recursos de Kubernetes en tu flota. El lanzamiento puede tardar unos minutos en iniciarse y completarse.
En la página de Google Kubernetes Engine de la Google Cloud consola, ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se están desplegando en todos tus clústeres de GKE:
Puedes seguir explorando diferentes estrategias de implementación con paquetes de flota. Por ejemplo, puedes probar a añadir diferentes tipos de recursos a tu repositorio bifurcado y usar diferentes configuraciones de paquetes de flota para desplegarlos. También puedes usar un paquete de flota para eliminar los recursos que hayas implementado en tus clústeres. Para obtener más información sobre los paquetes de flota, consulta el artículo Implementar paquetes de flota de la documentación de Config Sync.
Eliminar recursos de una flota
Al igual que puedes implementar recursos en una flota, puedes eliminar recursos en una flota con un paquete de flota.
Para quitar recursos concretos, sigue estos pasos generales:
- Elimina el recurso de tu repositorio de Git.
- Crea una versión de Git y una etiqueta.
- Actualiza el campo
tag
del paquete de flota. - Ejecuta el comando de actualización de paquetes de flota.
También puedes eliminar el paquete de flota, lo que también eliminará los recursos que gestionara.
Por ejemplo, si quieres quitar la implementación de nginx de la sección anterior, ejecuta el siguiente comando:
gcloud alpha container fleet packages delete new-deployment-fleet-package --force