Este conjunto de instructivos es para administradores y operadores de TI que deseen implementar, ejecutar y administrar entornos de aplicaciones modernos que se ejecutan en la edición Enterprise de Google Kubernetes Engine (GKE). A medida que avanzas con este conjunto de instructivos, aprenderás a configurar la supervisión y las alertas, escalar cargas de trabajo y simular fallas, todo con la aplicación de microservicios de muestra de Cymbal Bank:
- Crea un clúster y, luego, implementa una app de ejemplo
- Supervisa con Google Cloud Managed Service para Prometheus
- Escala las cargas de trabajo
- Simula una falla
- Centraliza la administración de cambios (este instructivo)
Descripción general y objetivos
A medida que compilas servicios y aplicaciones nuevos, es posible que desees probar los cambios en diferentes entornos. A medida que tu organización crezca, es posible que necesites configuraciones de clústeres diferentes para diferentes equipos. Administrar varios clústeres con diferentes configuraciones puede ser un desafío. Puedes usar herramientas de GitOps, como el Sincronizador de configuración, para ayudarte a administrar estos desafíos.
En el instructivo para crear un clúster, creaste un clúster y, luego, implementaste la aplicación de Cymbal Bank en él.
En este instructivo, aprenderás a almacenar los manifiestos de Kubernetes para tu aplicación en un repositorio de Git centralizado y a usar herramientas como el Sincronizador de configuración para implementar una aplicación en varios clústeres de una flota. Aprenderás a completar las siguientes tareas:
Crea un repositorio de Git y conéctalo a Cloud Build
Crea un clúster, regístralo en una flota y, luego, instala el Sincronizador de configuración en tu flota de clústeres
Usa un paquete de flota para implementar Cymbal Bank y otros recursos en un clúster o en una flota
Costos
Habilitar GKE Enterprise e implementar la aplicación de ejemplo Cymbal Bank para esta serie de instructivos significa que se generan cargos por clúster para GKE Enterprise en Google Cloud , como se indica en nuestra página de precios, hasta que inhabilites GKE Enterprise o borres el proyecto.
También eres responsable de otros costos de Google Cloud generados mientras ejecutas la aplicación de ejemplo de Cymbal Bank, como los cargos por las VMs de Compute Engine y los balanceadores de cargas.
Antes de comenzar
Si quieres aprender a almacenar, realizar cambios y, también, implementar recursos desde un repositorio de Git, debes completar el primer instructivo para crear un clúster de GKE que use el modo Autopilot y, luego, implementar la aplicación basada en microservicios de muestra de Cymbal Bank.
Te recomendamos que completes este conjunto de instructivos para Cymbal Bank en orden. A medida que avanzas en el conjunto de instructivos, adquieres habilidades nuevas y usas productos y servicios adicionales de Google Cloud .
Para usar el Sincronizador de configuración y, así, implementar manifiestos de Kubernetes desde un repositorio de Git a tus clústeres, debes habilitar las siguientes APIs:
gcloud services enable configdelivery.googleapis.com cloudbuild.googleapis.com developerconnect.googleapis.com
Crea un repositorio de Git y conéctalo a Cloud Build
Un paquete de flota es una colección de manifiestos de recursos de Kubernetes. Si agrupas esos manifiestos como un paquete, puedes implementar una aplicación en varios clústeres de una flota directamente desde un repositorio de Git. Con este flujo de trabajo, obtienes los siguientes beneficios:
- Mejora la escalabilidad mediante la implementación de recursos en una flota en lugar de aplicarlos de forma manual clúster por clúster.
- Actualizaciones más seguras con lanzamientos progresivos
- Flujos de trabajo adicionales a partir de archivos de configuración de origen centralizados en Git, como el control de versión y las aprobaciones.
Para demostrar cómo almacenar y realizar cambios en Git, crea una bifurcación del repositorio de Cymbal Bank y conéctala a Cloud Build.
Bifurca el repositorio de Cymbal Bank
En este instructivo, realizarás cambios en tu repositorio de Git para demostrar cómo el Sincronizador de configuración te ayuda a administrar de forma segura los cambios en los recursos de Kubernetes y a implementarlos. Para realizar esos cambios directamente, debes bifurcar el repositorio de Git en lugar de clonarlo.
Para crear una bifurcación del repositorio, sigue estos pasos:
En GitHub, ve al repositorio de muestra de Cymbal Bank (
bank-of-anthos
).Haz clic en Bifurcar para obtener una copia del repositorio con los archivos de origen.
Si es necesario, accede a tu cuenta de GitHub. Si tienes acceso a otras organizaciones o equipos en GitHub, asegúrate de bifurcar el repositorio en tu cuenta personal.
Ahora tienes una bifurcación del repositorio de Cymbal Bank. Todos los manifiestos de Kubernetes que implementes se encuentran en la carpeta /kubernetes-manifests
.
Conecta el repositorio a Cloud Build
Cloud Build es un servicio que puede ejecutar compilaciones en Google Cloud, que puedes usar para la entrega contínua de estilo GitOps. El servicio de paquetes de flota del Sincronizador de configuración usa Cloud Build para recuperar los recursos de Kubernetes de tu repositorio de Git y, luego, implementarlos en tus clústeres. Cuando usas un paquete de flota, debes configurar Cloud Build solo una vez por cada repositorio que quieras sincronizar. La API del paquete de flota crea automáticamente los activadores de compilación a través de Cloud Build.
Para conectar tu repositorio de GitHub a Cloud Build:
Abre la página de Cloud Build en la consola de Google Cloud y, luego, selecciona Repositorios.
Asegúrate de estar en la página Repositorios de 2ª gen. Si es necesario, selecciona Ver repositorios (2ª gen.).
Haz clic en Crear conexión de host.
En el menú Región, selecciona us-central1 (Iowa) como tu región.
En el campo Nombre, escribe
cymbal-bank-connection
como el nombre de tu conexión.Haz clic en Conectar.
Si es la primera vez que conectas Cloud Build a tu cuenta de GitHub, completa los siguientes pasos:
- Acepta la solicitud de tu token de OAuth de GitHub. El token se almacena en Secret Manager para usarlo con la conexión de GitHub de Cloud Build. Haga clic en Continuar.
- Instala Cloud Build en tu repositorio de GitHub. Selecciona Instalar en una cuenta nueva.
- En la nueva ventana de GitHub que se abre, selecciona la cuenta de GitHub en la que creaste la bifurcación de Cymbal Bank antes. En un entorno de producción, puedes seleccionar otras cuentas o repositorios a los que hayas delegado el acceso.
- Sigue las indicaciones de autenticación para confirmar tu identidad en GitHub.
- En la ventana de GitHub para el acceso al repositorio de Cloud Build, elige Solo repositorios seleccionados.
- En el menú desplegable que muestra los repositorios, selecciona tu bifurcación de
bank-of-anthos
. - Haz clic en Guardar.
En la página de Cloud Build de la consola de Google Cloud , haz clic en Link repository para conectar un nuevo repositorio de Git a Cloud Build.
En el menú Conexión, selecciona
cymbal-bank-connection
.En el menú Repositorios, selecciona tu bifurcación de
bank-of-anthos
.Selecciona Vincular.
Crea clústeres
En el primer instructivo de esta serie, creaste un clúster y, luego, implementaste la aplicación de Cymbal Bank en él. En una situación real, es poco probable que tengas solo un clúster para administrar. GKE te permite agrupar clústeres en una flota: un grupo lógico de clústeres que se pueden administrar en conjunto. Dentro de una flota, puedes agrupar más tus clústeres con algunos que representen diferentes entornos o que pertenezcan a diferentes equipos. Por ejemplo, puedes tener un clúster de desarrollo, un clúster de etapa de pruebas y un clúster de producción. En una organización grande, los equipos individuales pueden tener sus propios clústeres para diferentes entornos. Como administradores u operadores de TI, esto podría significar que tienes que administrar decenas de clústeres.
Cuando se trata de implementar aplicaciones o recursos individuales, como políticas personalizadas, en todos estos clústeres, las funciones de GKE Enterprise, como el Sincronizador de configuración, pueden ayudarte a administrar esas implementaciones a gran escala.
Para demostrar cómo implementar recursos en diferentes ambientes o en una flota de clústeres, creas un clúster nuevo y, luego, implementas la aplicación de 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
Reemplaza lo siguiente:
PROJECT_ID
por el ID generado de forma automática del proyecto que creaste en la sección anterior. El ID del proyecto a menudo es diferente del nombre del proyecto. Por ejemplo, tu proyecto puede ser sscaleable-apps, pero tu ID del proyecto puede ser scalable-apps-567123.REGION
por la región en la que deseas crear el clúster, comous-central1
.
Las etiquetas son pares clave-valor que puedes agregar a los recursos de GKE para ayudarte a organizarlos. En el caso de los paquetes de flota, puedes usar etiquetas de membresía de flota para personalizar a qué clústeres se segmenta el paquete de flota. No se admiten otros tipos de etiquetas.
Agrega una etiqueta a la membresía de 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 instructivo, esta etiqueta asegurará que los recursos solo se implementen en el clúster
scalable-apps-dev
y no en el clústerscalable-apps
del primer instructivo de esta serie.
Instalar el Sincronizador de configuración
Instala el Sincronizador de configuración en ambos clústeres:
- En la consola de Google Cloud , ve a la página Configuración en la sección Funciones.
- Haz clic en add Instalar el Sincronizador de configuración.
- Mantén seleccionada la opción Actualizaciones manuales.
- El menú de versiones debería mostrar la versión más reciente del Sincronizador de configuración de forma predeterminada. Si es necesario, selecciona la versión más reciente.
- En Opciones de instalación, selecciona Instalar el Sincronizador de configuración en toda la flota (recomendado).
- Haz clic en Instalar el Sincronizador de configuración.
- En la pestaña Configuración del Sincronizador de configuración, consulta el campo Estado de la lista de clústeres. Después de unos minutos, el estado aparecerá como “Pendiente” hasta que el clúster se configure correctamente para el Sincronizador de configuración. El estado puede tardar hasta 10 minutos en cambiar a Habilitado.
Implementa Cymbal Bank
En el primer instructivo de esta serie, usaste comandos de kubectl
para aplicar las configuraciones de la aplicación a tu clúster. En este instructivo, usarás la función de paquetes de flota del Sincronizador de configuración para implementar esas mismas configuraciones en un clúster nuevo. En una sección posterior, verás un ejemplo de cómo agregar un recurso nuevo a tu repositorio de GitHub y, luego, implementar esos recursos en una flota de clústeres.
Configura una cuenta de servicio para Cloud Build
Una cuenta de servicio es un tipo especial de cuenta que, por lo general, es usada por una aplicación, en lugar de una persona. Como práctica recomendada, cuando crees cuentas de servicio, debes crearlas para un solo servicio o tarea específicos y otorgarles roles detallados. En este instructivo, crearás una cuenta de servicio para otorgar permisos a Cloud Build para recuperar recursos de Kubernetes desde tu repositorio de Git y, luego, implementarlos en tus clústeres.
Para crear la cuenta de servicio y otorgar los permisos necesarios, completa los siguientes pasos:
Cree la cuenta de servicio:
gcloud iam service-accounts create "cymbal-bank-service-account"
Para otorgarle permiso a la cuenta de servicio para recuperar recursos de tu repositorio de Git, agrega una vinculación de política de IAM para el rol de publicador 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 solicita, selecciona
None
como la condición de la política.Para otorgarle permiso a la cuenta de servicio para escribir registros, agrega una vinculación de políticas de IAM para el rol de 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 solicita, selecciona
None
como la condición de la política.
Crea una versión para la aplicación de Cymbal Bank
Un paquete de flota requiere una etiqueta de versión semántica para saber desde qué versión del repositorio se debe implementar. Es una buena idea crear versiones nuevas cuando realices cambios en tu repositorio, ya que esto ayuda con el control de versiones y facilita la reversión a una versión estable si es necesario.
En una ventana del navegador web de tu bifurcación de GitHub de Cymbal Bank, en la sección Versiones de la barra lateral, haz clic en Crear nueva versión.
Selecciona el menú Elegir una etiqueta y escribe
v1.0.0
como etiqueta. Haz clic en Crear etiqueta nueva.Haz clic en Publicar versión.
Configura la autenticación
Al igual que en el primer instructivo de esta serie, debes crear un JWT para controlar la autenticación del usuario y un Secret de Kubernetes para almacenar el JWT del clúster nuevo que creaste. Es conveniente 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 Secret de Kubernetes:
kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
Implementa la aplicación de Cymbal Bank con un paquete de flota
Un recurso FleetPackage
es una API declarativa para implementar varios manifiestos de Kubernetes en una flota de clústeres.
Para crear un paquete de flota, debes definir una especificación FleetPackage
que apunte al repositorio con los recursos de Kubernetes que conectaste a Cloud Build. Luego, aplicas el recurso FleetPackage
, que recupera los recursos de Git y los implementa en toda la flota.
En Cloud Shell, establece la ubicación predeterminada para los comandos de
configdelivery
Google Cloud CLI. Al igual que con la conexión de tu repositorio a Cloud Build, debes usarus-central1
mientras la función de paquetes de flotas 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
Reemplaza
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 membresía de la flota que creaste antes. Esto garantiza que la aplicación de Cymbal Bank solo se implemente en el clúster
scalable-apps-dev
. El clústerscalable-apps
del primer instructivo no se verá afectado. En la siguiente sección, verás un ejemplo de un paquete de flota que se orienta 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 implementarás en un clúster, por lo que este campo no cambiará la forma en que se realizará el lanzamiento. Sin embargo, si tienes muchos clústeres, este parámetro de configuración garantiza que todos los archivos de recursos se apliquen a un clúster antes de pasar al siguiente. Esto te permite supervisar 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. Después de unos segundos, el campo
MESSAGE
se actualiza 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 vínculo proporcionado para ver los registros de transmisión 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 de forma correcta, 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 comienza a implementar los recursos de Kubernetes en tu flota.
En la página de Google Kubernetes Engine de la consola de Google Cloud , selecciona tu clúster de
scalable-apps-dev
y, luego, ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se implementan 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. Después de unos minutos, deberías ver que tus pods comienzan a ejecutarse con el estado OK.
Para ver la interfaz web de Cymbal Bank, completa los siguientes pasos:
En la página de Google Kubernetes Engine de la consola de Google Cloud , ve a la página Puertas de enlace, Ingress y servicios.
Para encontrar la entrada de Cymbal Bank, haz clic en la pestaña “Servicios” y busca el servicio con el nombre
frontend
.Haz clic en el vínculo Extremo para la entrada
frontend
, como198.51.100.143:80
, para abrir la interfaz web de Cymbal Bank.
Implementa recursos en una flota
A continuación, imagina una situación en la que quieras extender tu aplicación de Cymbal Bank con un microservicio nuevo. Quieres implementar este microservicio en todos tus clústeres actuales y en cualquier clúster futuro que se agregue a la flota. Cuando usas un paquete de flota, puedes implementar en varios clústeres y obtener una implementación automática en clústeres nuevos.
Agrega recursos nuevos a tu repositorio de Git
Para demostrar cómo agregar un servicio nuevo a tu aplicación, crea una implementación básica de nginx y agrégala a tus clústeres:
En una ventana del navegador web de tu bifurcación de Cymbal Bank en GitHub, haz clic en Agregar archivo y, luego, en Crear nuevo archivo.
Asigna el nombre
new-resource/nginx.yaml
al archivo y pégale 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 sucursal
main
y, luego, haz clic en Confirmar cambios.En la página principal del repositorio bifurcado de Cymbal Bank, selecciona Versiones en la barra lateral.
En la parte superior de la página, elige Crear un borrador de una nueva versión.
Selecciona el menú Elegir una etiqueta y escribe
v1.1.0
como etiqueta. Haz clic en Crear etiqueta nueva.Haz clic en Publicar versión.
Implementa un recurso en clústeres con un paquete de flota
Para implementar el recurso nuevo, crea un paquete de flota nuevo:
Este paquete de flota se orienta a todos los clústeres de tu flota, ya que no contiene un campo de selector. Esto también significa que a cualquier clúster futuro que se agregue a la flota se le agregará automáticamente la implementación de nginx.
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 el lanzamiento:
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 vínculo proporcionado para ver los registros de transmisión del trabajo de Cloud Build.
El paquete de flota comienza a implementar los recursos de Kubernetes en tu flota. El lanzamiento puede tardar unos minutos en comenzar y completarse.
En la página de Google Kubernetes Engine de la consola de Google Cloud , ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se implementan en todos tus clústeres de GKE:
Puedes seguir explorando diferentes estrategias de implementación con paquetes de flotas. Por ejemplo, puedes intentar agregar diferentes tipos de recursos a tu repositorio bifurcado y usar diferentes parámetros de configuración de paquetes de flota para implementarlos. También puedes usar un paquete de flota para borrar los recursos que implementaste en tus clústeres. Para obtener más información sobre los paquetes de flota, consulta Implementa paquetes de flota en la documentación del Sincronizador de configuración.
Borra recursos de una flota
Al igual que puedes implementar recursos en una flota, también puedes borrar recursos en una flota con un paquete de flota.
Para quitar recursos individuales, sigue estos pasos generales:
- Borra el recurso de tu repositorio de Git.
- Crea una nueva versión de Git y una etiqueta nueva.
- Actualiza el campo
tag
del paquete de flota. - Ejecuta el comando de actualización de paquetes de flota.
Como alternativa, puedes borrar el paquete de flota, lo que también borrará los recursos que administraba.
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
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este instructivo, borra el proyecto que creaste.
- 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.
Para borrar tu repositorio bifurcado, sigue estos pasos:
En una ventana del navegador web de la bifurcación de Cymbal Bank en GitHub, en el nombre de tu repositorio, haz clic en Configuración.
En la página Configuración general (que está seleccionada de forma predeterminada), vete a la sección Zona de peligro y haz clic en Borrar este repositorio.
Haz clic en Quiero borrar este repositorio.
Lee las advertencias y haz clic en Leí y comprendo estos efectos.
Para verificar que estás borrando el repositorio correcto, en el campo de texto, escribe el nombre del repositorio bifurcado de Cymbal Bank.
Haz clic en Borrar este repositorio.
¿Qué sigue?
Antes de comenzar a crear tu propio entorno de clúster de GKE similar al que aprendiste en este conjunto de instructivos, revisa algunas de las consideraciones de producción.