Puntos de control
Create your cluster
/ 20
Create your pod
/ 30
Create a Kubernetes Service
/ 30
Scale up your service
/ 20
Hello Node Kubernetes
- GSP005
- Descripción general
- Configuración y requisitos
- Tarea 1. Crea tu aplicación de Node.js
- Tarea 2. Crea una imagen de contenedor de Docker
- Tarea 3. Crea tu clúster
- Tarea 4. Crea tu Pod
- Tarea 5. Permite el tráfico externo
- Tarea 6. Escala tu servicio verticalmente
- Tarea 7. Implementa una actualización para tu servicio
- Tarea 8. Pon a prueba tus conocimientos
- Felicitaciones
GSP005
Descripción general
El objetivo de este lab práctico es que conviertas el código que desarrollaste en una aplicación replicada alojada en contenedores que se ejecute en Kubernetes Engine. Para este lab, el código será una simple aplicación node.js Hello World.
A continuación, encontrarás un diagrama de las diversas piezas en juego en este lab para ayudarte a comprender de qué manera encajan entre sí. Úsalo como referencia a medida que avanzas en el lab. Todo tendría que cobrar sentido cuando llegues al final (pero puedes ignorarlo por el momento).
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.
A los fines de este lab, utilizar un entorno administrado como Kubernetes Engine (una versión de Kubernetes alojada en Google que se ejecuta en Compute Engine) te permite concentrarte en experimentar con Kubernetes, en vez de configurar la infraestructura subyacente.
Qué aprenderás
- Crear un servidor Node.js
- Crear una imagen de contenedor de Docker
- Crear un clúster de contenedor
- Crear un Pod de Kubernetes
- Escalar verticalmente tus servicios
Requisitos previos
- Se recomienda tener experiencia con editores de texto estándares de Linux, como
vim
,emacs
onano
.
Se incentiva a los estudiantes a que ellos mismos escriban los comandos, ya que eso los ayuda a aprender los conceptos básicos. Muchos labs incluyen un bloque de código que contiene los comandos necesarios. Durante el lab, puedes copiar y pegar fácilmente los comandos del bloque de código en los lugares apropiados.
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.
Tarea 1. Crea tu aplicación de Node.js
1. Con Cloud Shell, escribe un servidor Node.js simple para implementarlo en Kubernetes Engine:
- Inicia el editor:
- Agrega este contenido al archivo:
vi
, pero nano
y emacs
también están disponibles en Cloud Shell. También puedes usar la función de editor web de Cloud Shell, como se describe en la guía Cómo funciona Cloud Shell.
- Para guardar el archivo
server.js
, presiona Esc y, luego, escribe lo siguiente:
- Ya que Cloud Shell tiene instalado el ejecutable
node
, ejecuta este comando para iniciar el servidor del nodo (el comando no muestra ningún resultado):
- Utiliza la función Vista previa en la Web incorporada de Cloud Shell para abrir una nueva pestaña del navegador y enviar una solicitud a través de un proxy a la instancia que acabas de iniciar en el puerto
8080
.
Se abrirá una pestaña nueva del navegador en la que se mostrarán los resultados:
- Antes de continuar, vuelve a Cloud Shell y presiona Ctrl+C para detener la ejecución del servidor del nodo.
A continuación, empaquetarás esta aplicación en un contenedor de Docker.
Tarea 2. Crea una imagen de contenedor de Docker
- Ahora, genera un
Dockerfile
que describa la imagen que quieres crear. Las imágenes de contenedor de Docker pueden extenderse desde otras imágenes existentes, por lo que, para esta imagen, haremos una extensión desde una imagen de nodo existente:
- Inicia el editor:
- Agrega este contenido:
La “receta” para la imagen de Docker hará lo siguiente:
- Comenzará desde la imagen
node
que se encuentra en el concentrador de Docker. - Expondrá el puerto
8080
. - Copiará el archivo
server.js
en la imagen. - Iniciará el servidor del nodo como ya hicimos manualmente.
- Para guardar este
Dockerfile
, presiona Esc y, luego, escribe lo siguiente:
- Compila la imagen con lo siguiente y reemplaza
PROJECT_ID
por tu ID del proyecto que se encuentra en la consola y en la sección Detalles del lab:
La descarga y extracción tardará un tiempo, pero puedes ver las barras de progreso a medida que se compila la imagen.
Cuando se complete, prueba la imagen de forma local. Para ello, ejecuta un contenedor de Docker como daemon en el puerto 8080 desde la imagen de contenedor que creaste recientemente.
- Ejecuta el siguiente comando, pero reemplaza
PROJECT_ID
por tu ID del proyecto que se encuentra en la consola y en la sección Detalles del lab:
El resultado debería ser similar a este:
- Para ver tus resultados, usa la función Vista previa en la Web de Cloud Shell. También puedes utilizar
curl
desde la ventana de Cloud Shell:
Este es el resultado que deberías ver:
docker run
en la referencia de docker run.
A continuación, detén el contenedor en ejecución.
- Para encontrar el ID del contenedor de Docker, ejecuta lo siguiente:
El resultado debería verse así:
- Para detener el contenedor, ejecuta el siguiente comando y reemplaza
[CONTAINER ID]
por el valor proporcionado en el paso anterior:
El resultado de tu consola debería ser similar al siguiente (el ID de tu contenedor):
Ahora que la imagen funciona como es debido, envíala a Google Container Registry, un repositorio privado para tus imágenes de Docker accesible desde tus proyectos de Google Cloud.
- Ejecuta el siguiente comando para configurar la autenticación de Docker.
Cuando se te pregunte, Do you want to continue (Y/N)?, ingresa Y.
- Ejecuta este comando, pero reemplaza
PROJECT_ID
por tu ID del proyecto que se encuentra en la consola o en la sección Detalles del lab:
El envío inicial podría tardar unos minutos en completarse. Verás las barras de progreso a medida que se completa la operación.
- La imagen del contenedor aparecerá en la consola. Haz clic en el menú de navegación > Container Registry.
Ahora posees una imagen de Docker disponible para todo el proyecto, a la que Kubernetes puede acceder y que puede organizar.
gcr.io
). En tu propio entorno, puedes ser más específico acerca de la zona y el bucket que deseas utilizar. Para obtener más información, consulta .
Tarea 3. Crea tu clúster
Ahora tienes todo listo para crear tu clúster de Kubernetes Engine. Un clúster consiste en un servidor de API de la instancia principal de Kubernetes alojado por Google y en un conjunto de nodos trabajadores. Los nodos trabajadores son máquinas virtuales de Compute Engine.
- Asegúrate de haber configurado tu proyecto con
gcloud
(reemplazaPROJECT_ID
por el ID de tu proyecto, que se encuentra en la consola y en la sección Detalles del lab):
- Crea un clúster con dos nodos n1-standard-1 (esto tardará unos minutos en completarse):
Puedes ignorar de forma segura las advertencias que aparecen cuando se compila el clúster.
El resultado de la consola debería ser similar al siguiente:
Como alternativa, puedes crear este clúster a través de la consola. Para ello, abre el menú de navegación y selecciona Kubernetes Engine > Clústeres de Kubernetes > Crear.
Si seleccionas el menú de navegación > Kubernetes Engine, verás que ahora tienes un clúster de Kubernetes completamente funcional con la tecnología de Kubernetes Engine:
Es hora de implementar tu propia aplicación alojada en contenedores en el clúster de Kubernetes. A partir de ahora, usa la línea de comandos kubectl
(que ya está configurada en tu entorno de Cloud Shell).
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab.
Tarea 4. Crea tu Pod
Un pod de Kubernetes es un grupo de contenedores unidos para funciones administrativas y de herramientas de redes. Puede tener uno o muchos contenedores. Aquí, deberás usar un contenedor compilado con tu imagen de Node.js almacenada en tu Container Registry privado. Entregará contenido en el puerto 8080.
- Crea un Pod con el comando
kubectl run
(reemplazaPROJECT_ID
por el ID de tu proyecto, que se encuentra en la consola y en la sección Detalles de la conexión del lab):
Resultado:
Como puedes ver, creaste un objeto Deployment. Las implementaciones son la forma recomendada para crear y escalar pods. Aquí, una nueva implementación administra una única réplica de pod que ejecuta la imagen hello-node:v1
.
- Ejecuta el siguiente comando para ver la implementación:
Resultado:
- Para ver el Pod creado por la implementación, ejecuta lo siguiente:
Resultado:
Ahora es un buen momento para revisar algunos comandos kubectl
interesantes. Ninguna de estas opciones cambiará el estado del clúster. Para ver la documentación de referencia completa, consulta Herramienta de línea de comandos (kubectl):
Y para la solución de problemas:
Ahora debes hacer que tu Pod sea accesible públicamente.
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab.
Tarea 5. Permite el tráfico externo
Según la configuración predeterminada, el Pod únicamente es accesible a través de su IP interna dentro del clúster. Para hacer accesible el contenedor hello-node
desde afuera de la red virtual de Kubernetes, tienes que exponer el Pod como un servicio de Kubernetes.
- Desde Cloud Shell, puedes exponer el Pod al Internet público con el comando
kubectl expose
y la marca--type="LoadBalancer"
. Esta marca es necesaria para la creación de una IP accesible de forma externa:
Resultado:
La marca utilizada en este comando especifica que se usa el balanceador de cargas proporcionado por la infraestructura subyacente (en este caso, el balanceador de cargas de Compute Engine). Ten en cuenta que se expone directamente la implementación, no el Pod. Esto hará que el servicio resultante balancee la carga de tráfico en todos los Pods administrados por la implementación (en este caso, solo 1 Pod, pero luego podrás agregar más réplicas).
La instancia principal de Kubernetes crea el balanceador de cargas y las reglas de reenvío de Compute Engine relacionadas, los grupos de destino y las reglas de firewall para que el servicio se vuelva completamente accesible desde el exterior de Google Cloud.
- Para obtener la dirección IP públicamente accesible del servicio, solicita que
kubectl
muestre todos los servicios del clúster:
Este es el resultado que deberías ver:
Se mencionan 2 direcciones IP para tu servicio hello-node, y ambas entregan contenido al puerto 8080. CLUSTER-IP
corresponde a la IP interna que solo es visible dentro de tu red virtual de Cloud, mientras que EXTERNAL-IP
corresponde a la IP externa de balanceo de cargas.
EXTERNAL-IP
podría tardar varios minutos en estar disponible y visible. Si falta la EXTERNAL-IP
, espera unos minutos y vuelve a ejecutar el comando.
- Ahora deberías poder acceder al servicio dirigiendo tu navegador a esta dirección:
http://<EXTERNAL_IP>:8080
En este punto, pasarse a los contenedores y a Kubernetes ya te brindó varios beneficios: no necesitas especificar en qué host ejecutar tu carga de trabajo y también te beneficias de la supervisión y el reinicio del servicio. Ahora, descubre qué más puedes obtener de tu nueva infraestructura de Kubernetes.
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab.
Tarea 6. Escala tu servicio verticalmente
Una de las características avanzadas que ofrece Kubernetes es la gran facilidad para escalar tu aplicación. Supongamos que, de repente, necesitas más capacidad. Puedes indicarle al controlador de replicación que administre una nueva cantidad de réplicas para tu Pod:
- Establece la cantidad de réplicas para tu Pod:
Resultado:
- Solicita una descripción de la implementación actualizada:
Resultado:
Vuelve a ejecutar el comando anterior hasta que veas que se crearon las 4 réplicas.
- Enumera todos los Pods:
Este es el resultado que deberías ver:
Aquí se usa un enfoque declarativo. En vez de iniciar o detener nuevas instancias, debes declarar cuántas instancias deberían estar en ejecución constantemente. Los bucles de conciliación de Kubernetes garantizan que la realidad coincida con lo que solicitaste y, de ser necesario, ejecutan acciones.
Aquí tienes un diagrama que resume el estado de tu clúster de Kubernetes:
Haz clic en Revisar mi progreso a continuación para revisar tu progreso en el lab.
Tarea 7. Implementa una actualización para tu servicio
En algún momento, la aplicación que implementaste en producción requerirá la corrección de errores o funciones adicionales. Kubernetes te ayuda a implementar una nueva versión en la producción sin afectar a tus usuarios.
- Primero, abre
server.js
para modificar la aplicación:
- Luego, actualiza el mensaje de respuesta:
- Para guardar el archivo
server.js
, presiona Esc y, luego, escribe lo siguiente:
Ahora puedes compilar y publicar una nueva imagen de contenedor en el registro con una etiqueta incrementada (en este caso, v2
):
- Ejecuta los siguientes comandos y reemplaza
PROJECT_ID
por el ID del proyecto de tu lab:
Kubernetes actualizará sin problemas tu controlador de replicación a la nueva versión de la aplicación. Para cambiar la etiqueta de la imagen de tu contenedor en ejecución, deberás editar hello-node deployment
y cambiar la imagen de gcr.io/PROJECT_ID/hello-node:v1
a gcr.io/PROJECT_ID/hello-node:v2
.
- Para hacerlo, utiliza el comando
kubectl edit
:
Con esto se abre un editor de texto que muestra la configuración yaml completa de la implementación. No es necesario entender toda la configuración yaml por ahora, solo basta con comprender que cuando se actualiza el campo spec.template.spec.containers.image
de la configuración, le indicas a la implementación que actualice los Pods con la nueva imagen.
- Busca
Spec
>containers
>image
y cambia el número de versión de v1 a v2:
- Luego de realizar el cambio, guarda y cierra el archivo. Para ello, presiona Esc y, luego, escribe lo siguiente:
Este es el resultado que deberías ver:
- Ejecuta lo siguiente para actualizar la implementación con la nueva imagen:
Se crearán nuevos Pods con la nueva imagen, y los Pods anteriores se borrarán.
Este es el resultado que deberías ver (es posible que debas volver a ejecutar el comando anterior para ver lo siguiente):
Mientras esto se aplica, los usuarios de tus servicios no deberían sufrir ninguna interrupción. Luego de un rato, comenzarán a acceder a la nueva versión de tu aplicación. Puedes encontrar más detalles sobre las actualizaciones progresivas en la documentación para realizar una actualización progresiva.
Esperamos que con estas funciones de implementación, escalamiento y actualización, una vez que hayas configurado tu clúster de Kubernetes Engine, estés de acuerdo en que Kubernetes te ayudará a enfocarte más en la aplicación que en la infraestructura.
Tarea 8. Pon a prueba tus conocimientos
Para poner a prueba sus conocimientos sobre Google Cloud Platform, realice nuestro cuestionario (seleccione varias opciones correctas).
Felicitaciones
De esta manera, finaliza este lab práctico con Kubernetes. Solo vimos una mínima parte de esta tecnología. Por eso, te invitamos a explorar con tus propios Pods, controladores de replicación y servicios, y también consultar los sondeos de funcionamiento (verificaciones de estado) y considera usar directamente la API de Kubernetes.
Realiza tu próximo lab
Intenta administrar implementaciones con Kubernetes Engine o consulta las siguientes sugerencias:
Próximos pasos y más información
- Luego de que hayas completado este lab, revisa Minikube, que te ofrece una configuración sencilla de un clúster de Kubernetes de un solo nodo para desarrollo y pruebas: http://kubernetes.io/docs/getting-started-guides/minikube/.
- Kubernetes es un proyecto de código abierto (http://kubernetes.io/) alojado en GitHub. Tus comentarios y contribuciones son siempre bienvenidos.
- Puedes mantenerte al tanto de las novedades de Kubernetes en X y en el blog de la comunidad.
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: 14 de marzo de 2024
Prueba más reciente del lab: 14 de marzo 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.