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 (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 aplicación de ejemplo (este instructivo)
- Supervisa con Google Cloud Managed Service para Prometheus
- Escala las cargas de trabajo
- Simula una falla
Descripción general y objetivos
Cymbal Bank usa Python y Java para ejecutar los diversos servicios y, además, incluye un backend de PostgreSQL. No necesitas experiencia con estos lenguajes o la plataforma de bases de datos para completar la serie de instructivos, ya que Cymbal Bank es solo una aplicación de ejemplo para mostrar cómo GKE puede satisfacer las necesidades de tu empresa.
En este instructivo, aprenderás a crear un solo clúster de GKE y a implementar una aplicación de muestra basada en microservicios llamada Cymbal Bank en un clúster de GKE. Aprenderás a completar las siguientes tareas:
Crear un clúster de GKE que use Autopilot.
Implementa una aplicación de muestra basada en microservicios llamada Cymbal Bank.
Usa la consola de Google Cloud para explorar los recursos de GKE que usa la aplicación de ejemplo de Cymbal Bank.
Costos
Habilitar GKE e implementar la aplicación de ejemplo Cymbal Bank para esta serie de instructivos significa que se generan cargos por clúster para GKE en Google Cloud, como se indica en nuestra página de precios hasta que inhabilites GKE 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
En este primer instructivo de la serie, completa todos los siguientes pasos de configuración para “comenzar” antes de comenzar. Solo necesitas completar los siguientes pasos “Antes de comenzar” una vez.
Configura la shell y las herramientas
En esta serie de instructivos, usarás las siguientes herramientas para implementar y administrar tu entorno:
- gcloud CLI: crea y administra clústeres y flotas de GKE, junto con otros servicios de Google Cloud.
kubectl
: Administra Kubernetes, el sistema de organización de clústeres que usa GKE.
Para ejecutar los comandos de esta página, configura Google Cloud CLI y kubectl
en uno de los siguientes entornos de desarrollo:
Cloud Shell
Para usar una terminal en línea con gcloud CLI ykubectl
ya configurada, activa Cloud Shell.
En la parte inferior de esta página, se inicia una sesión de Cloud Shell y se muestra una instrucción de línea de comandos. La sesión puede tardar unos segundos en inicializarse.
Shell local
Para usar un entorno de desarrollo local, sigue estos pasos:
- Instala gcloud CLI.
- Inicializa gcloud CLI.
Instala
kubectl
gcloud CLI:gcloud components install kubectl
Configura tu proyecto
Sigue los pasos que se indican a continuación para configurar un proyecto de Google Cloud, incluida la habilitación de la facturación y los servicios de GKE. Este es el proyecto en el que habilitarás GKE.
Es posible que necesites que un administrador de Google Cloud de tu organización te otorgue acceso para crear o usar un proyecto y habilitar APIs.
En la consola de Google Cloud, ve a la página Google Kubernetes Engine:
Crea o selecciona un proyecto. Este es el proyecto en el que habilitas GKE Enterprise.
Si se te solicita, habilita la API de GKE.
Espera a que la API y los servicios relacionados se habiliten. Esto puede tomar varios minutos.
Make sure that billing is enabled for your Google Cloud project.
Asigna roles de IAM
Si eres el propietario del proyecto (por ejemplo, si lo creaste tú mismo), ya tienes todos los permisos necesarios para completar estos instructivos. Si no eres el propietario, asegúrate de que tu cuenta de Google Cloud tenga las funciones de IAM necesarias para el proyecto seleccionado para este conjunto de instructivos. Una vez más, es posible que necesites un administrador de Google Cloud en tu organización que te ayude a otorgar los roles necesarios.
En los siguientes comandos, reemplaza PROJECT_ID
por el ID generado de forma automática del proyecto que creaste o seleccionaste en la sección anterior. El ID del proyecto a menudo es diferente del nombre del proyecto. Por ejemplo, tu proyecto puede ser scalable-apps, pero tu ID del proyecto puede ser scalable-apps.
Grant roles to your user account. Run the following command once for each of the following
IAM roles:
roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iam.securityAdmin, roles/serviceusage.serviceUsageAdmin, roles/container.admin, roles/logging.logWriter, roles/gkehub.admin, roles/viewer, roles/monitoring.viewer
$ gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
Clona la aplicación de ejemplo
Clona el repositorio de Git que incluye todos los manifiestos de muestra para Cymbal Bank:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos
cd bank-of-anthos/
Crea un clúster
Una vez que hayas completado todos los pasos de requisitos previos de las secciones anteriores, puedes comenzar a crear un clúster de GKE y, luego, implementar una aplicación de muestra.
GKE es un servicio administrado de Kubernetes que puedes usar para implementar y operar aplicaciones en contenedores. Un entorno de GKE consta de nodos, que son máquinas virtuales (VMs) de Compute Engine, que se agrupan para formar un clúster.
Crea un clúster de GKE que usarás en el resto de los instructivos de esta serie:
gcloud container clusters create-auto scalable-apps \ --project=PROJECT_ID \ --region=REGION
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 scalable-apps, pero tu ID del proyecto puede ser scalable-apps.REGION
por la región en la que deseas crear el clúster, comous-central1
.
Tarda unos minutos en crear el clúster y verificar que todo funcione correctamente.
En este conjunto de instructivos, usarás clústeres en modo Autopilot y algunos rangos de direcciones IP predeterminados cuando crees clústeres. Una implementación de producción de tus propias aplicaciones requiere una planificación más cuidadosa de las direcciones IP. En el modo Autopilot, Google administra la configuración de tu clúster, incluido el escalamiento, la seguridad y otros parámetros de configuración ya establecidos. Los clústeres en modo Autopilot están optimizados para ejecutar la mayoría de las cargas de trabajo de producción y aprovisionar recursos de procesamiento según tus manifiestos de Kubernetes.
Implementa Cymbal Bank
Empaquetas tus apps (también llamadas cargas de trabajo) en contenedores. Implementas conjuntos de contenedores como Pods en tus nodos.
En esta serie de instructivos, implementarás una aplicación de ejemplo basada en microservicios llamada Cymbal Bank en uno o más clústeres de GKE. Cymbal Bank usa Python y Java para ejecutar los diversos servicios y, además, incluye un backend de PostgreSQL. No necesitas experiencia con estos lenguajes ni la plataforma de bases de datos para completar la serie de instructivos. Cymbal Bank es solo una aplicación de ejemplo para mostrar cómo GKE puede satisfacer las necesidades de tu empresa.
Cuando usas Cymbal Bank como parte de este conjunto de instructivos, se implementan los siguientes servicios en tu clúster de GKE:
Servicio | Idioma | Descripción |
---|---|---|
frontend |
Python | Expone un servidor HTTP para entregar el sitio web. Contiene una página de acceso, una página de registro y una página principal. |
ledger-writer |
Java | Acepta y valida las transacciones entrantes antes de escribirlas en el registro. |
balance-reader |
Java | Proporciona una caché legible y eficiente de los saldos de usuario, como se lee desde ledger-db . |
transaction-history |
Java | Proporciona una caché legible y eficiente de las transacciones pasadas, como se lee desde ledger-db . |
ledger-db |
PostgreSQL | Registros de todas las transacciones. Opción para prepropagar transacciones para usuarios de demostración. |
user-service |
Python | Administra las cuentas de usuario y la autenticación. Firma los JWT que usan otros servicios para la autenticación. |
contacts |
Python | Almacena una lista de otras cuentas asociadas con un usuario. Se usa para el menú desplegable en los formularios "Enviar pago" y "Depositar". |
accounts-db |
PostgreSQL | Base de datos de cuentas de usuario y datos asociados. Opción para prepropagar con usuarios de demostraciones. |
loadgenerator |
Python/Locust | Envía solicitudes de forma continua que imitan a los usuarios al frontend. Crea cuentas nuevas de forma periódica y simula transacciones entre ellas. |
Para implementar Cymbal Bank en tu clúster de GKE, completa los siguientes pasos:
Cymbal Bank usa tokens web JSON (JWT) para controlar la autenticación de los usuarios. Los JWT usan pares de claves asimétricas para firmar y verificar tokens. En Cymbal Bank,
userservice
crea y firma tokens con una clave privada RSA cuando un usuario accede, y los otros servicios usan la clave pública correspondiente para validar al usuario.Crea un JWT RS256 con una resistencia de 4,096 bits:
openssl genrsa -out jwtRS256.key 4096 openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
Si es necesario, descarga y, luego, instala las herramientas de OpenSSL para tu plataforma.
Un secreto de Kubernetes puede almacenar datos sensibles, como claves o contraseñas. Las cargas de trabajo que se ejecutan en tu clúster pueden acceder al Secret para obtener los datos sensibles en lugar de codificarlos como parte de la aplicación.
Crea un Secret de Kubernetes a partir del archivo de claves que creaste en el paso anterior para que Cymbal Bank lo use con solicitudes de autenticación:
kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
Implementar Cymbal Bank en tu clúster. Con el siguiente comando, se implementan todos los archivos de manifiesto en el directorio
kubernetes-manifests
. Cada archivo de manifiesto implementa y configura uno de los servicios:kubectl apply -f kubernetes-manifests/accounts-db.yaml kubectl apply -f kubernetes-manifests/balance-reader.yaml kubectl apply -f kubernetes-manifests/config.yaml kubectl apply -f kubernetes-manifests/contacts.yaml kubectl apply -f extras/postgres-hpa/kubernetes-manifests/frontend.yaml kubectl apply -f kubernetes-manifests/ledger-db.yaml kubectl apply -f kubernetes-manifests/ledger-writer.yaml kubectl apply -f extras/postgres-hpa/loadgenerator.yaml kubectl apply -f kubernetes-manifests/transaction-history.yaml kubectl apply -f kubernetes-manifests/userservice.yaml
Es posible que veas mensajes en el resultado de
kubectl
a medida que se aplican los manifiestos a tu clúster sobre los límites de Autopilot. Autopilot usa las solicitudes de recursos que especificas en la configuración de tu carga de trabajo para configurar los nodos que ejecutan tus cargas de trabajo. Autopilot aplica las solicitudes de recursos mínimas y máximas según la clase de procesamiento o la configuración de hardware que usan tus cargas de trabajo. Si no especificas solicitudes para algunos contenedores, Autopilot asigna valores predeterminados para permitir que esos contenedores se ejecuten de forma correcta.Revisa el siguiente manifiesto de muestra para el Service
frontend
:Este manifiesto para
frontend
las solicitudes de Service100m
de CPU y64Mi
, y establece límites de250m
de CPU y128Mi
por Pod.Cuando implementas una carga de trabajo en un clúster de Autopilot, GKE valida la configuración de la carga de trabajo con los valores mínimos y máximos permitidos para la clase de procesamiento seleccionada o la configuración de hardware (como las GPU). Si tus solicitudes son menores que el mínimo, Autopilot modifica automáticamente la configuración de tu carga de trabajo para mover tus solicitudes dentro del rango permitido. Estos mensajes indican que se están asignando automáticamente los límites adecuados.
Espera a que los Pods estén listos. Usa
kubectl
para verificar el estado de los Pods:kubectl get pods
La columna
STATUS
cambia dePending
aContainerCreating
. Toma unos minutos que todos los Pods estén en estadoRunning
, como se muestra en el siguiente resultado de ejemplo:NAME READY STATUS RESTARTS AGE accounts-db-6f589464bc-6r7b7 1/1 Running 0 99s balancereader-797bf6d7c5-8xvp6 1/1 Running 0 99s contacts-769c4fb556-25pg2 1/1 Running 0 98s frontend-7c96b54f6b-zkdbz 1/1 Running 0 98s ledger-db-5b78474d4f-p6xcb 1/1 Running 0 98s ledgerwriter-84bf44b95d-65mqf 1/1 Running 0 97s loadgenerator-559667b6ff-4zsvb 1/1 Running 0 97s transactionhistory-5569754896-z94cn 1/1 Running 0 97s userservice-78dc876bff-pdhtl 1/1 Running 0 96s
Cuando todos los Pods estén en el estado
Running
, continúa con el siguiente paso. Una vez más, todos los Pods tardan unos minutos en estar en el estadoRunning
. Es normal que algunos de los Pods informen un estadoREADY
de0/1
hasta que Cymbal Bank esté listo para entregar tráfico de forma correcta.El servicio
frontend
expone un servidor HTTP para entregar el sitio web de Cymbal Bank, incluida la página de acceso, la página de registro y la página principal. Un objeto Ingress define reglas para enrutar el tráfico HTTP(S) a las aplicaciones que se ejecutan en un clúster mediante un balanceador de cargas de HTTP(S) de Google Cloud.Obtén la dirección IP externa del Ingress de
frontend
:kubectl get ingress frontend | awk '{print $4}'
En una ventana del navegador web, abre la dirección IP que se muestra en el resultado del comando
kubectl get ingress
para acceder a tu instancia de Cymbal Bank.Las credenciales predeterminadas se propagan automáticamente, de modo que puedas acceder a la app y explorar algunas de las transacciones y los saldos de muestra. No hay que realizar ninguna acción específica, excepto para confirmar que Cymbal Bank se ejecuta de forma correcta. Es posible que todos los objetos Service demoren uno o dos minutos en comunicarse de forma correcta y permitirte acceder.
Explora tu implementación
Después de crear un clúster de GKE e implementar cargas de trabajo, es posible que necesites cambiar la configuración o revisar el rendimiento de tu aplicación. En esta sección, aprenderás a usar la consola de Google Cloud para revisar los recursos que forman parte de tu clúster y la aplicación de ejemplo de Cymbal Bank.
Clústeres
En este instructivo, creaste un clúster de GKE e implementaste las cargas de trabajo de Cymbal Bank.
En la página Google Kubernetes Engine de la consola de Google Cloud, ve a la página Clústeres.
Haz clic en el clúster scalable-apps recién implementado. En la página de detalles del clúster que se abre, puedes ver los detalles básicos del clúster junto con las configuraciones de red y seguridad del clúster. También puedes ver qué funciones de GKE están habilitadas en este clúster en la sección Funciones.
Observabilidad
Puedes ver las métricas básicas del estado y el rendimiento de tu clúster. En el siguiente instructivo de esta serie, habilitarás Google Cloud Managed Service para Prometheus para supervisión y observabilidad más detalladas.
Selecciona tu clúster de la página Clústeres de Google Kubernetes Engine de la consola de Google Cloud y, luego, ve a la pestaña Observabilidad.
Examina algunos de los gráficos de métricas, como CPU y Memoria. Esta vista te permite supervisar el rendimiento de las diferentes partes de las cargas de trabajo del clúster sin necesidad de implementar capacidades de supervisión adicionales.
Para ver los registros que se transmiten desde tu clúster, selecciona la pestaña Registros. Puedes filtrar por Gravedad de los registros o crear tus propios filtros para ver espacios de nombres, servicios o Pods específicos. Al igual que con las advertencias y los eventos de los Pods, esta vista recopilada de los registros de tu clúster puede ayudar a depurar problemas rápidamente con la consola de Google Cloud.
Es normal ver entradas de registro cuando se implementa Cymbal Bank por primera vez, ya que algunos servicios aún no pueden comunicarse.
Selecciona la pestaña Errores de la app. A medida que se ejecutan tus cargas de trabajo, puedes ver las advertencias y los eventos recopilados en la consola de Google Cloud. Este enfoque puede ayudar a depurar problemas sin tener que conectarse al clúster, los nodos o los Pods de forma individual.
Una vez más, es normal ver que los eventos registrados cuando Cymbal Bank se implementa por primera vez cuando algunos servicios aún no pueden comunicarse.
Cargas de trabajo
La página de GKE de la consola de Google Cloud tiene una sección Cargas de trabajo que muestra una vista agregada de las cargas de trabajo que se ejecutan en todos tus clústeres de GKE.
En la página de Google Kubernetes Engine de la consola de Google Cloud, ve a la página Cargas de trabajo.
Ir a la página Cargas de trabajo
En la pestaña Descripción general, se muestra una lista de las cargas de trabajo y los espacios de nombres del clúster de GKE. Puedes filtrar por espacios de nombres para ver qué cargas de trabajo se ejecutan en cada uno.
Ingress y Service
En la vista Ingress y Service, se muestran los recursos Ingress y Service del proyecto. Un Service expone un conjunto de pods como un servicio de red con un extremo, mientras que un Ingress administra el acceso externo a los servicios en un clúster.
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 Entrada y busca la entrada con el nombre
frontend
. Un objeto Ingress administra el tráfico entrante para tu aplicación. Puedes ver información sobre el balanceador de cargas, los puertos y los extremos externos.Haz clic en la dirección IP para la entrada
frontend
, como198.51.100.143:80
. Esta dirección abrirá la interfaz web de Cymbal Bank.
Realiza una limpieza
El conjunto de instructivos para Cymbal Bank está diseñado para completarse uno tras otro. A medida que avanzas en el conjunto de instructivos, adquieres habilidades nuevas y usas productos y servicios adicionales de Google Cloud.
Si deseas tomar un descanso antes de continuar con el siguiente instructivo y evitar que se generen cargos en tu cuenta de Google Cloud por los recursos que se usaron 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.
¿Qué sigue?
En el siguiente instructivo, aprenderás a supervisar tus cargas de trabajo en GKE con Google Cloud Managed Service para Prometheus y Cloud Monitoring.