Puntos de control
Create a Kubernetes cluster and launch Nginx container
/ 25
Create Monolith pods and service
/ 25
Allow traffic to the monolith service on the exposed nodeport
/ 5
Adding Labels to Pods
/ 20
Creating Deployments (Auth, Hello and Frontend)
/ 25
Cómo organizar la nube con Kubernetes
- GSP021
- Descripción general
- Objetivos
- Configuración y requisitos
- Tarea 1: Obtén el código de muestra
- Tarea 2: Demostración rápida de Kubernetes
- Tarea 3: Pods
- Tarea 4: Crea Pods
- Tarea 5: Interactúa con los Pods
- Tarea 6: Services
- Tarea 7: Crea un Service
- Tarea 8: Agrega etiquetas a los Pods
- Tarea 9: Implementa aplicaciones con Kubernetes
- Tarea 10: Crea Deployments
- ¡Felicitaciones!
GSP021
Descripción general
Kubernetes es un proyecto de código abierto (disponible en kubernetes.io) que se puede ejecutar en distintos entornos, desde laptops hasta clústeres multinodos con alta disponibilidad, desde nubes públicas hasta implementaciones locales y desde máquinas virtuales hasta equipos físicos.
En este lab, el uso de un entorno administrado como Kubernetes Engine te permite concentrarte en experimentar con Kubernetes, en vez de configurar la infraestructura subyacente. Kubernetes Engine es un entorno administrado para implementar aplicaciones alojadas en contenedores. Ofrece las innovaciones más recientes en materia de productividad para desarrolladores, eficiencia de recursos, automatización de operaciones y flexibilidad de código abierto, lo que permite acelerar el tiempo de salida al mercado.
Objetivos
En este lab, aprenderás a hacer lo siguiente:
- Usar Kubernetes Engine para aprovisionar un clúster completo de Kubernetes
- Usar
kubectl
para implementar y administrar contenedores de Docker - Usar los objetos Deployment y Service de Kubernetes para dividir una aplicación en microservicios
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón Abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debe usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta. -
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}} También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}} También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia Cuenta de Google podría generar cargos adicionales. -
Haga clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Activa Cloud Shell
Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
- Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. El resultado contiene una línea que declara el PROJECT_ID para esta sesión:
gcloud
es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
- Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
-
Haz clic en Autorizar.
-
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
- Puedes solicitar el ID del proyecto con este comando (opcional):
Resultado:
Resultado de ejemplo:
gcloud
, consulta la guía con la descripción general de gcloud CLI en Google Cloud.
Google Kubernetes Engine
- En el entorno de Cloud Shell, escribe el siguiente comando para configurar la zona:
- Inicia un clúster para usarlo en este lab con el comando siguiente:
gcloud container clusters get-credentials io
para volver a autenticarte.
Tarea 1: Obtén el código de muestra
- Copia el código fuente desde la línea de comandos de Cloud Shell:
- Cambia al directorio necesario para este lab con este comando:
- Crea una lista de los archivos con los que trabajarás a través del siguiente comando:
La muestra tiene el siguiente diseño:
Ya puedes usar el código para probar Kubernetes.
Tarea 2: Demostración rápida de Kubernetes
La forma más fácil de comenzar a usar Kubernetes es utilizar el comando kubectl create
.
- Úsalo para iniciar una sola instancia del contenedor nginx:
Kubernetes ya creó un objeto Deployment (hablaremos sobre ellos más adelante). Por el momento, todo lo que necesitas saber es que los Deployments mantienen los Pods en funcionamiento, incluso cuando fallan los nodos en los que se ejecutan.
En Kubernetes, todos los contenedores se ejecutan en un Pod.
- Usa el comando
kubectl get pods
para ver el contenedor nginx en ejecución:
- Una vez que el contenedor nginx alcance el estado Running, podrás exponerlo por fuera de Kubernetes con el comando
kubectl expose
:
¿Qué acaba de suceder? En segundo plano, Kubernetes creó un balanceador de cargas externo vinculado a una dirección IP pública. Los clientes que accedan a esa dirección IP pública serán redirigidos a los Pods del Service. En este caso, esto correspondería al pod de nginx.
- Crea una lista de nuestros Services con el comando
kubectl get services
:
ExternalIP
se complete para el Service. Esto es normal; solo vuelve a ejecutar el comando kubectl get services
cada algunos segundos hasta que se complete el campo.
- Para acceder al contenedor Nginx de forma remota, agrega la IP externa a este comando:
Listo. Kubernetes admite un flujo de trabajo inmediato y fácil de usar con los comandos kubectl
run y expose.
Prueba la tarea completada
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab. Si creaste un clúster de Kubernetes con éxito y, también, implementaste un contenedor Nginx, verás una puntuación de evaluación.
Ahora que terminaste de revisar esta breve demostración de Kubernetes, es momento de profundizar en cada uno de los componentes y las abstracciones.
Tarea 3: Pods
Los Pods son uno de los conceptos centrales de Kubernetes.
Representan y contienen una colección de uno o más contenedores. En general, si tienes varios contenedores que dependen en gran medida entre sí, debes empaquetarlos en un solo Pod.
En este ejemplo, tenemos un Pod con los contenedores monolith y nginx.
Los Pods también tienen volúmenes. Son discos de datos que funcionan mientras los Pods estén activos, y los pueden usar los contenedores del Pod correspondiente. Los Pods proporcionan un espacio de nombres compartido para sus contenidos. Esto significa que los dos contenedores de nuestro Pod de ejemplo se pueden comunicar entre sí y, además, comparten los volúmenes adjuntos.
Los Pods también comparten un espacio de nombres de red, lo que significa que hay una dirección IP por Pod.
A continuación, profundizaremos en los Pods.
Tarea 4: Crea Pods
Los Pods se pueden crear con archivos de configuración de Pod. Tómate un momento para explorar el archivo de configuración del Pod de la aplicación monolítica.
- Ve al directorio siguiente:
- Ejecuta lo siguiente:
En el resultado, se muestra el archivo de configuración abierto:
Observa lo siguiente:
- Que tu Pod consta de un contenedor (la aplicación monolítica)
- Que cuando se inicia el contenedor, se le pasan algunos argumentos
- Que estás abriendo el puerto 80 para el tráfico HTTP
- Usa
kubectl
para crear el Pod de la aplicación monolítica:
- Examina tus Pods. Usa el comando
kubectl get pods
para crear una lista de todos los Pods que se ejecutan en el espacio de nombres predeterminado:
- Para obtener más información sobre el Pod de la aplicación monolítica, usa el comando
kubectl describe
cuando se ejecute el Pod:
Verás mucha información sobre el Pod de la aplicación monolítica, como la dirección IP y el registro de eventos. Esta información será de utilidad para solucionar problemas.
Con Kubernetes, es fácil crear Pods con solo describirlos en los archivos de configuración y también es fácil ver información sobre ellos mientras se ejecutan. En este momento, tienes la capacidad de crear todos los Pods que requiere tu objeto Deployment.
Tarea 5: Interactúa con los Pods
De manera predeterminada, se asigna a los Pods una dirección IP privada a la que no se puede acceder desde fuera del clúster. Usa el comando kubectl port-forward
para asignar un puerto local a un puerto dentro del Pod de la aplicación monolítica.
-
Abre una segunda terminal de Cloud Shell. Ahora tienes dos terminales, una para ejecutar el comando
kubectl port-forward
y otra para emitir comandoscurl
. -
Para configurar la redirección de puertos, ejecuta el siguiente comando en la 2ª terminal:
- Ahora, usa el comando
curl
en la 1ª terminal para empezar a comunicarte con el Pod:
¡Sí! Recibiste un simpático saludo de tu contenedor.
- A continuación, usa el comando
curl
para ver qué sucede cuando accedes a un extremo seguro:
¡Vaya!
- Intenta acceder para que la aplicación monolítica proporcione un token de autenticación:
- En el mensaje de acceso, usa la contraseña supersecreta
password
para acceder.
El hecho de acceder hace que se imprima un token JWT.
- Crea una variable de entorno para el token, ya que Cloud Shell no copia bien las cadenas largas.
-
Vuelve a escribir la contraseña supersecreta
password
cuando se te solicite para la contraseña de host. -
Usa este comando para copiar y usar el token con el objetivo de acceder el extremo seguro con
curl
:
En este punto, deberías recibir una respuesta de nuestra aplicación que informa que todo funciona como corresponde de nuevo.
- Usa el comando
kubectl logs
para ver los registros del Pod de laaplicación monolítica
.
-
Abre una tercera terminal y usa la marca
-f
para obtener una transmisión de los registros en tiempo real:
- Si usas
curl
en la 1ª terminal para interactuar con la aplicación monolítica, verás que se actualizan los registros ubicados en la 3ª terminal:
- Usa el comando
kubectl exec
para ejecutar una shell interactiva dentro del Pod de la aplicación monolítica, lo que puede ser útil para solucionar problemas en un contenedor:
- Por ejemplo, una vez que tienes una shell en el contenedor monolith, puedes usar el comando
ping
para probar la conectividad externa:
- Asegúrate de salir cuando termines de usar esta shell interactiva.
Como puedes ver, interactuar con los Pods es tan sencillo como usar el comando kubectl
. Kubernetes proporciona todo lo necesario para empezar a usar el servicio, ya sea que necesites obtener una shell de acceso o acceder a un contenedor de forma remota.
Tarea 6: Services
Los Pods no están diseñados para ser persistentes. Pueden detenerse o iniciarse por diversos motivos, como verificaciones de disponibilidad y actividad fallidas, lo que genera el siguiente problema:
¿Qué sucede si deseas comunicarte con un conjunto de Pods? Es posible que la dirección IP cambie cuando se reinicien.
Ahora es cuando los Services cobran importancia. Los Services proporcionan extremos estables para los Pods.
Los Services usan etiquetas para determinar en qué Pods operan. Si los Pods tienen las etiquetas correctas, nuestros Services los seleccionan y exponen automáticamente.
El tipo de Service determina el nivel de acceso que proporciona a un conjunto de Pods. Estos son los tres tipos disponibles actualmente:
-
ClusterIP
(interno): Este tipo predeterminado significa que el Service solo se puede ver dentro del clúster. -
NodePort
: Proporciona una IP accesible de forma externa a cada nodo del clúster. -
LoadBalancer
: Agrega un balanceador de cargas del proveedor de servicios en la nube que reenvía el tráfico del Service a los nodos que contiene.
A continuación, aprenderás lo siguiente:
- Cómo crear un Service
- Cómo usar los selectores de etiquetas para exponer de forma externa un conjunto limitado de Pods
Tarea 7: Crea un Service
Antes de poder crear Services, primero crea un Pod seguro que pueda manejar el tráfico HTTPS.
- Si cambiaste de directorio, asegúrate de volver al directorio
~/orchestrate-with-kubernetes/kubernetes
:
- Explora el archivo de configuración del Service de la aplicación monolítica con el siguiente comando:
- Crea los Pods secure-monolith y sus datos de configuración con este comando:
Ahora que tienes un Pod seguro, es hora de exponer de forma externa el Pod secure-monolith. Para ello, crea un Service de Kubernetes.
- Explora el archivo de configuración del Service de la aplicación monolítica con el siguiente comando:
(Resultado):
* Hay un selector que se usa para buscar y exponer automáticamente cualquier Pod con las etiquetas `app: monolith` y `secure: enabled`.
* Ahora debes exponer el puerto del nodo aquí, ya que es la forma en que reenviarás el tráfico externo del puerto 31000 a nginx (en el puerto 443).
- Usa el comando
kubectl create
para crear el Service de la aplicación monolítica a partir del archivo de configuración del Service de la aplicación:
(Resultado):
Prueba la tarea completada
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab. Si creaste con éxito los Pods y el Service de la aplicación monolítica, verás una puntuación de evaluación.
Estás usando un puerto para exponer el Service. Esto significa que es posible tener conflictos de puerto si otra aplicación intenta vincularse al puerto 31000 en uno de tus servidores.
Normalmente, Kubernetes se encarga de la asignación de puertos. En este lab, elegiste un puerto para configurar fácilmente las verificaciones de estado más adelante.
- Usa el comando
gcloud compute firewall-rules
para permitir el tráfico hacia el Service de la aplicación monolítica en el puerto del nodo expuesto:
Prueba la tarea completada
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab. Si creaste con éxito una regla de firewall que permite el tráfico de TCP en el puerto 31000, verás una puntuación de evaluación.
Ahora que todo está configurado, deberías poder acceder al Service de secure-monolith desde fuera del clúster sin usar la redirección de puertos.
- Primero, obtén una dirección IP externa para uno de los nodos.
- A continuación, usa el comando
curl
para acceder al Service de secure-monolith:
¡Vaya! Se agotó el tiempo de espera. ¿Cuál es el problema?
Nota: Es momento de realizar una verificación de conocimientos rápida.
Usa estos comandos para responder las siguientes preguntas:kubectl get services monolith
kubectl describe services monolith
Preguntas:
Pista: la respuesta está relacionada con las etiquetas. Solucionarás el problema en la siguiente sección.
Tarea 8: Agrega etiquetas a los Pods
De momento, el Service de la aplicación monolítica no posee extremos. Una forma de solucionar un problema como este es usar el comando kubectl get pods
con una consulta de etiquetas.
- Puedes ver que hay pocos Pods ejecutándose con la etiqueta monolith.
- Sin embargo, ¿qué sucede con “app=monolith” y “secure=enabled”?
Observa que esta consulta de etiquetas no genera resultados. Parece que debes agregarles la etiqueta “secure=enabled”.
- Usa el comando
kubectl label
para agregar la etiquetasecure=enabled
faltante al Pod secure-monolith. A continuación, puedes comprobar y revisar que se hayan actualizado las etiquetas.
- Ahora que los Pods están bien etiquetados, observa la lista de extremos en el Service de la aplicación monolítica con este comando:
Ya lograste obtener uno.
- Para probarlo, vuelve a acceder a uno de los nodos.
Listo. Se estableció la conexión.
Prueba la tarea completada
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab. Si agregaste etiquetas con éxito a los Pods de la aplicación monolítica, verás una puntuación de evaluación.
Tarea 9: Implementa aplicaciones con Kubernetes
El objetivo de este lab es prepararte para escalar y administrar los contenedores en producción. Ahora es cuando los Deployments cobran importancia. Los Deployments son una forma declarativa de garantizar que la cantidad de Pods en ejecución sea igual a la cantidad deseada de Pods que especifica el usuario.
La ventaja principal de los Deployments es abstraer los detalles de bajo nivel de la administración de los Pods. En segundo plano, los Deployments usan conjuntos de réplicas para administrar el inicio y la detención de los Pods. Un objeto Deployment permite actualizar o escalar los Pods si es necesario. También permite reiniciar los Pods si se desconectan por algún motivo.
Observa un ejemplo breve:
Los Pods están sujetos al ciclo de vida del nodo en el que se crearon. En el ejemplo anterior, Node3 se desconectó, por lo que también se desconectó un Pod. En vez de crear un Pod nuevo de forma manual y buscar un nodo para él, el Deployment creó un Pod nuevo y lo inició en Node2.
Eso es muy práctico.
Es momento de aplicar todo lo que aprendiste sobre los Pods y Services para dividir la aplicación monolítica en Services más pequeños a través de Deployments.
Tarea 10: Crea Deployments
Dividirás la aplicación monolítica en tres partes:
- auth: Genera tokens JWT para usuarios autenticados.
- hello: Saluda a los usuarios autenticados.
- frontend: Enruta el tráfico hacia los Services auth y hello.
Ya cuentas con lo necesario para crear Deployments, uno por Service. Luego de esto, definirás los Services internos para los Deployments auth y hello, además de un Service externo destinado al Deployment del frontend. Una vez que termines, podrás interactuar con los microservicios al igual que con la aplicación monolítica, solo que ahora podrás implementar y escalar cada parte de forma independiente.
- Empieza por examinar el archivo de configuración del Deployment auth.
(Resultado)
El Deployment creará 1 réplica, y estás usando la versión 2.0.0. del contenedor auth.
Cuando ejecutes el comando kubectl create
para crear el Deployment auth, se creará un Pod que se ajusta a los datos del manifiesto de Deployment. Esto significa que puedes escalar la cantidad de Pods con solo modificar la cantidad especificada en el campo Réplicas.
- De cualquier manera, crea tu objeto Deployment con el comando siguiente:
- Es hora de crear un Service para tu Deployment auth. Usa el comando
kubectl create
para crear el Service auth:
- Ahora, haz lo mismo para crear y exponer el Deployment hello:
- Y haz lo mismo una vez más para crear y exponer el Deployment frontend.
- Usa la IP externa del frontend y ejecuta el comando curl para interactuar con él:
EXTERNAL-IP
es pending.Recibirás un saludo como respuesta.
Prueba la tarea completada
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab. Si creaste con éxito los Deployments Auth, Hello y Frontend, verás una puntuación de evaluación.
¡Felicitaciones!
¡Felicitaciones! Desarrollaste una aplicación de varios servicios con Kubernetes. Las habilidades que aprendiste te permitirán usar una colección de Deployments y Services para implementar aplicaciones complejas en Kubernetes.
Próximos pasos y más información
- Sigue las novedades de Kubernetes en X y en el blog de la comunidad.
- Recuerda que Kubernetes es un proyecto de código abierto (http://kubernetes.io/) alojado en GitHub. Tus comentarios y contribuciones son siempre bienvenidos.
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 29 de abril de 2024
Prueba más reciente del lab: 29 de abril de 2024
Copyright 2024 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.