
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
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
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.
En este lab, aprenderás a hacer lo siguiente:
kubectl
para implementar y administrar contenedores de DockerLee 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:
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:
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.
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
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.
También puedes encontrar la contraseña en el panel Detalles del lab.
Haz clic en Siguiente.
Haga clic para avanzar por las páginas siguientes:
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
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.
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.
Haz clic en Autorizar.
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
Resultado:
Resultado de ejemplo:
gcloud
, consulta la guía con la descripción general de gcloud CLI en Google Cloud.
gcloud container clusters get-credentials io
para volver a autenticarte.
La muestra tiene el siguiente diseño:
Ya puedes usar el código para probar Kubernetes.
La forma más fácil de comenzar a usar Kubernetes es utilizar el comando kubectl create
.
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.
kubectl get pods
para ver el contenedor nginx en ejecución: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.
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.
Listo. Kubernetes admite un flujo de trabajo inmediato y fácil de usar con los comandos kubectl
run y expose.
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.
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.
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.
En el resultado, se muestra el archivo de configuración abierto:
Observa lo siguiente:
kubectl
para crear el Pod de la aplicación monolítica:kubectl get pods
para crear una lista de todos los Pods que se ejecutan en el espacio de nombres predeterminado: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.
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 comandos curl
.
Para configurar la redirección de puertos, ejecuta el siguiente comando en la 2ª terminal:
curl
en la 1ª terminal para empezar a comunicarte con el Pod:¡Sí! Recibiste un simpático saludo de tu contenedor.
curl
para ver qué sucede cuando accedes a un extremo seguro:¡Vaya!
password
para acceder.El hecho de acceder hace que se imprima un token JWT.
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.
kubectl logs
para ver los registros del Pod de la aplicación monolítica
.-f
para obtener una transmisión de los registros en tiempo real: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: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:ping
para probar la conectividad externa: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.
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:
Antes de poder crear Services, primero crea un Pod seguro que pueda manejar el tráfico HTTPS.
~/orchestrate-with-kubernetes/kubernetes
:Ahora que tienes un Pod seguro, es hora de exponer de forma externa el Pod secure-monolith. Para ello, crea un Service de Kubernetes.
(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).
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):
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.
gcloud compute firewall-rules
para permitir el tráfico hacia el Service de la aplicación monolítica en el puerto del nodo expuesto: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.
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.
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.
Observa que esta consulta de etiquetas no genera resultados. Parece que debes agregarles la etiqueta “secure=enabled”.
kubectl label
para agregar la etiqueta secure=enabled
faltante al Pod secure-monolith. A continuación, puedes comprobar y revisar que se hayan actualizado las etiquetas.Ya lograste obtener uno.
Listo. Se estableció la conexión.
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.
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.
Dividirás la aplicación monolítica en tres partes:
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.
(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.
kubectl create
para crear el Service auth:EXTERNAL-IP
es pending.Recibirás un saludo como respuesta.
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! 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.
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 2025 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.
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
One lab at a time
Confirm to end all existing labs and start this one