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 Google Kubernetes Engine. 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 creas nuevos servicios y aplicaciones, es posible que desees probar los cambios en diferentes entornos. A medida que tu organización crezca, es posible que necesites diferentes configuraciones de clústeres para los distintos 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 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 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
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 solo tengas 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, es posible que los equipos individuales tengan 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, como 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 los clústeres a los que se dirige 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 garantizará 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 Config Sync en ambos clústeres:
- En la Google Cloud consola, ve a la página Config en la sección Features.
- Haz clic en add Instalar Config Sync.
- Mantén seleccionada la opción Actualizaciones manuales.
- El menú de versiones debe establecer de forma predeterminada la versión más reciente del Sincronizador de configuración. 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 se mostrará como "Pendiente" hasta que el clúster esté configurado correctamente para 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 Git y cómo 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 creas cuentas de servicio, debes crear cuentas de servicio para un solo servicio o tarea específicos, y otorgar a la cuenta de servicio 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ítica 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 de tu repositorio se realizará la implementación. 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ú Elige una etiqueta y escribe
v1.0.0
como la 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 una buena idea 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 anteriormente. 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 ve 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 implementas en un clúster, por lo que este campo no cambia la forma en que se realiza el lanzamiento. Sin embargo, si tuvieras 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 la flota:
gcloud alpha container fleet packages list
El resultado 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 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 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 Endpoint 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. Si usas un paquete de flota, puedes realizar implementaciones en varios clústeres y obtener implementaciones automáticas 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
a tu archivo y pega el siguiente contenido en él: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 Redactar un nuevo lanzamiento.
Selecciona el menú Elige una etiqueta y escribe
v1.1.0
como la 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 cualquier clúster futuro que se agregue a la flota tendrá la implementación de nginx agregada 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 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 la 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 en una flota
Al igual que puedes implementar recursos en toda una flota, también puedes borrarlos 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 nueva etiqueta.
- Actualiza el campo
tag
del paquete de flota. - Ejecuta el comando de actualización del paquete de flota.
Como alternativa, puedes borrar el paquete de flota, lo que también borrará los recursos que administraba.
Por ejemplo, si deseas 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