Descripción general
En este lab, explorarás los conceptos básicos del uso de manifiestos de implementación. Los manifiestos son archivos que contienen las configuraciones necesarias para una implementación que puede usarse en diferentes Pods. Los manifiestos son fáciles de cambiar.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
- Crear manifiestos de implementación, realizar implementaciones en el clúster y verificar la reprogramación de Pods cuando se inhabilitan los nodos
- Activar el aumento y la reducción manual del escalamiento vertical de Pods en las implementaciones
- Activar el lanzamiento (actualización progresiva a la versión nueva) y las reversiones de la implementación
- Realizar una implementación de versiones canary
Configuración del lab
Accede al lab
En cada lab, recibirás un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
-
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá una ventana emergente para que selecciones tu 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 debes 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: Ordena 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 Cloud para este lab 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.
Nota: Para ver un menú con una lista de productos y servicios de Google Cloud, haz clic en el menú de navegación que se encuentra en la parte superior izquierda o escribe el nombre del servicio o producto en el campo Búsqueda.
Después de completar los pasos iniciales de acceso, aparecerá el panel del proyecto.
Activa Google Cloud Shell
Google 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.
Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
-
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.

-
Haz clic en Continuar.
El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.
- Puedes solicitar el nombre de la cuenta activa con este comando:
gcloud auth list
Resultado:
Credentialed accounts:
- @.com (active)
Resultado de ejemplo:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Puedes solicitar el ID del proyecto con este comando:
gcloud config list project
Resultado:
[core]
project =
Resultado de ejemplo:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Nota:
La documentación completa de gcloud está disponible en la
guía de descripción general de gcloud CLI
.
Tarea 1: Crea manifiestos de implementación y realiza implementaciones en el clúster
En esta tarea, crearás un manifiesto de implementación para un Pod dentro del clúster.
Conéctate al clúster de GKE del lab
- En Cloud Shell, escribe el siguiente comando para establecer la variable de entorno para la zona y el nombre del clúster:
export my_region={{{ project_0.default_region | REGION }}}
export my_cluster=dev-cluster
- Configura el completado de línea de comando de kubectl en Cloud Shell:
source <(kubectl completion bash)
- En Cloud Shell, configura el acceso a tu clúster para la herramienta de línea de comandos de kubectl con el siguiente comando:
gcloud container clusters get-credentials $my_cluster --region $my_region
Crea un manifiesto de implementación
Crearás una implementación con un manifiesto de implementación de muestra denominado nginx-deployment.yaml. Esta implementación está configurada para ejecutar tres réplicas de Pod con un solo contenedor nginx en cada Pod que escucha en el puerto TCP 80.
- Crea y abre un archivo llamado
nginx-deployment.yaml con nano usando el siguiente comando:
nano nginx-deployment.yaml
- Una vez que nano se abra, pega lo siguiente en el archivo
nginx-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.0
ports:
- containerPort: 80
-
Presiona Ctrl + O y, luego, Intro para guardar el archivo editado.
-
Presiona Ctrl + X para salir del editor de texto nano.
-
Para implementar tu manifiesto, ejecuta el siguiente comando:
kubectl apply -f ./nginx-deployment.yaml
- Para ver una lista de implementaciones, ejecuta el siguiente comando:
kubectl get deployments
El resultado debería verse como este ejemplo.
Resultado:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/3 3 0 3s
- Espera unos minutos y repite el comando hasta que la cantidad de implementaciones en CURRENT informada por el comando coincida con la cantidad de implementaciones indicada en DESIRED.
El resultado final debe verse como el ejemplo.
Resultado:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 42s
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear e implementar el manifiesto nginx-deployment
Tarea 2: Aumenta y reduce manualmente la escala de la cantidad de Pods en las implementaciones
A veces, deseas cerrar una instancia de Pod. Otras veces, quieres contar con diez Pods en ejecución. En Kubernetes, puedes escalar un Pod específico para alcanzar la cantidad de instancias deseada. Para cerrarlos, reduce la escala a cero.
En esta tarea, aumentarás y reducirás la escala de los Pods verticalmente en la consola de Google Cloud y Cloud Shell.
Aumenta y reduce la escala de los Pods verticalmente en la consola
- Cambia a la pestaña de la consola de Google Cloud.
- En el menú de navegación (
), haz clic en Kubernetes Engine > Cargas de trabajo.
- Haz clic en nginx-deployment (tu implementación) para abrir la página Detalles de la implementación.
- En la parte superior, haz clic en Acciones > Escalar > Editar réplicas.
- Escribe 1 y haz clic en Escalar.
Esta acción reduce tu clúster. Deberías ver el estado del Pod que se actualiza en Pods administrados. Es posible que tengas que hacer clic en Actualizar.
Aumenta y reduce la escala de los Pods en la shell
- Regresa a la pestaña del navegador de Cloud Shell.
- En Cloud Shell, ejecuta el siguiente comando para ver una lista de Pods en las implementaciones:
kubectl get deployments
Resultado:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 1 3m
- Para escalar el Pod hasta tres réplicas, ejecuta el siguiente comando:
kubectl scale --replicas=3 deployment nginx-deployment
- Para ver una lista de Pods en las implementaciones, ejecuta el siguiente comando:
kubectl get deployments
Resultado:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 4m
Tarea 3: Activa un lanzamiento y una reversión de la implementación
El lanzamiento de una implementación se activa solo si se modifica la plantilla del Pod de la implementación (es decir, .spec.template), por ejemplo, si se actualizan las etiquetas o las imágenes de contenedor de la plantilla. Otras actualizaciones, como escalar la implementación, no activan un lanzamiento.
En esta tarea, activarás el lanzamiento de la implementación y, a continuación, activarás tu reversión.
Activa el lanzamiento de una implementación
- Para actualizar la versión de nginx en la implementación, ejecuta el siguiente comando:
kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.28.0
Esto actualiza la imagen de contenedor en tu implementación a nginx v1.28.0.
- Ejecuta el siguiente comando para anotar el lanzamiento con detalles sobre el cambio:
kubectl annotate deployment nginx-deployment kubernetes.io/change-cause="version change to 1.28.0" --overwrite=true
- Para ver el estado del lanzamiento, ejecuta el siguiente comando:
kubectl rollout status deployment.v1.apps/nginx-deployment
El resultado debería verse como el ejemplo.
Resultado:
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 1 old replicas pending termination...
Waiting for rollout to finish: 1 old replicas pending termination...
deployment "nginx-deployment" successfully rolled out
- Para verificar el cambio, obtén la lista de implementaciones:
kubectl get deployments
El resultado debería verse como el ejemplo.
Resultado:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 6m
Haz clic en Revisar mi progreso para verificar el objetivo.
Actualizar la versión de nginx en la implementación
- Consulta el historial de lanzamientos de la implementación.
kubectl rollout history deployment nginx-deployment
El resultado debería verse como el ejemplo. Es posible que tu resultado no sea exactamente igual.
Resultado:
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1
2 version change to 1.28.0
Activa una reversión de la implementación
Para revertir el lanzamiento de un objeto, puedes usar el comando kubectl rollout undo.
- Para revertir a la versión anterior de la implementación de nginx, ejecuta el siguiente comando:
kubectl rollout undo deployments nginx-deployment
- Mira el historial de lanzamientos actualizado de la implementación:
kubectl rollout history deployment nginx-deployment
El resultado debería verse como el ejemplo. Es posible que tu resultado no sea exactamente igual.
Resultado:
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
2 version change to 1.28.0
3
Nota: La actualización más reciente está en blanco para CHANGE-CAUSE, ya que no usamos el comando kubectl annotate.
- Mira los detalles de la última revisión de la implementación:
kubectl rollout history deployment/nginx-deployment --revision=3
El resultado debería verse como el ejemplo. Es posible que tu resultado no sea exactamente igual, pero mostrará que la revisión actual se revirtió a nginx:1.27.0.
Resultado:
deployments "nginx-deployment" with revision #3
Pod Template:
Labels: app=nginx
pod-template-hash=3123191453
Containers:
nginx:
Image: nginx:1.27.0
Port: 80/TCP
Host Port: 0/TCP
Environment:
Mounts:
Volumes:
Tarea 4: Define el tipo de servicio en el manifiesto
En esta tarea, crearás y verificarás un servicio que controla el tráfico entrante a una aplicación. Los servicios se pueden configurar como ClusterIP, NodePort o LoadBalancer. En este lab, configurarás un LoadBalancer.
Define los tipos de servicio en el manifiesto
Se te proporcionó un archivo de manifiesto llamado service-nginx.yaml que implementa un tipo de servicio LoadBalancer. Este servicio está configurado para distribuir el tráfico entrante en el puerto TCP 60000 al puerto 80 en cualquier contenedor que tenga la etiqueta app: nginx.
- Crea y abre un archivo llamado
service-nginx.yaml con nano usando el siguiente comando:
nano service-nginx.yaml
- Una vez que nano se abra, pega lo siguiente en el archivo
service-nginx.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
-
Presiona Ctrl + O y, luego, Intro para guardar el archivo editado.
-
Presiona Ctrl + X para salir del editor de texto nano.
-
En Cloud Shell, ejecuta el siguiente comando para implementar tu manifiesto:
kubectl apply -f ./service-nginx.yaml
Este manifiesto define un servicio y lo aplica a Pods que corresponden al selector. En este caso, el manifiesto se aplica al contenedor nginx que implementaste en la tarea 1. Este servicio también se aplica a cualquier otro Pod con la etiqueta app: nginx, incluidos los que se crean después del servicio.
Verifica la creación de LoadBalancer
- Para ver los detalles del servicio de nginx, ejecuta el siguiente comando:
kubectl get service nginx
El resultado debería verse como el ejemplo.
Resultado:
NAME Type CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.X.X.X X.X.X.X 60000:31798/TCP 1m
- Cuando aparezca la IP externa, abre
http://[EXTERNAL_IP]:60000/ en una pestaña del navegador nueva para ver cómo el servidor recibe contenido a través del balanceo de cargas de red.
Nota: Es posible que los datos del campo ExternalIP de tu servicio demoren algunos segundos en propagarse. Esto es normal. Simplemente vuelve a ejecutar el comando kubectl get services nginx cada algunos segundos hasta que los datos del campo se propaguen.
Haz clic en Revisar mi progreso para verificar el objetivo.
Implementar el archivo de manifiesto que implementa el tipo de servicio LoadBalancer
Tarea 5: Realiza una implementación de versiones canary
Una implementación de versiones canary es una implementación separada que se utiliza para probar una nueva versión de tu aplicación. Un solo servicio apunta a las implementaciones de versiones canary y a las normales. Además, puede dirigir un subconjunto de usuarios a la versión canary para mitigar el riesgo de nuevos lanzamientos.
En esta tarea, crearás una implementación de versiones canary para implementar un solo pod que ejecuta una versión más reciente de nginx que tu implementación principal.
- Crea y abre un archivo llamado
nginx-canary.yaml con nano usando el siguiente comando:
nano nginx-canary.yaml
- Una vez que nano se abra, pega lo siguiente en el archivo
nginx-canary.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-canary
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
track: canary
Version: 1.28.0
spec:
containers:
- name: nginx
image: nginx:1.28.0
ports:
- containerPort: 80
-
Presiona Ctrl + O y, luego, Intro para guardar el archivo editado.
-
Presiona Ctrl + X para salir del editor de texto nano.
El manifiesto para el servicio de nginx que implementaste en la tarea anterior utiliza un selector de etiquetas para apuntar a los Pods con la etiqueta app: nginx. Tanto la implementación normal como esta nueva implementación de versiones canary tienen la etiqueta app: nginx. El servicio distribuirá las conexiones entrantes a los Pods de implementación normal y de versiones canary. La implementación de versiones canary tiene menos réplicas (Pods) que la implementación normal y, por lo tanto, está disponible para menos usuarios que esta última.
- Crea la implementación de versiones canary basada en el archivo de configuración:
kubectl apply -f ./nginx-canary.yaml
- Cuando se complete la implementación, verifica que estén presentes las implementaciones nginx y nginx-canary:
kubectl get deployments
- Regresa a la pestaña del navegador que está conectada a la IP externa del servicio LoadBalancer y actualiza la página. Deberías seguir viendo la página estándar
Welcome to nginx.
- Regresa a Cloud Shell y reduce verticalmente la escala de la implementación principal a 0 réplicas:
kubectl scale --replicas=0 deployment nginx-deployment
- Verifica que la única réplica en ejecución sea ahora la implementación de versiones canary:
kubectl get deployments
- Regresa a la pestaña del navegador que está conectada a la IP externa del servicio LoadBalancer y actualiza la página. Deberías seguir viendo la página estándar
Welcome to nginx, que muestra que el servicio está balanceando automáticamente el tráfico a la implementación de versiones canary.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear una implementación de versiones canary
Afinidad de sesión
La configuración del servicio utilizada en el lab no garantiza que todas las solicitudes de un solo cliente siempre se conectarán al mismo Pod. Cada solicitud se trata por separado y se puede conectar a la implementación nginx normal o a la implementación nginx-canary.
Esta posibilidad de hacer cambios entre diferentes versiones puede causar problemas si hay modificaciones significativas en la funcionalidad del lanzamiento Canary. Para evitar esto, puedes establecer el campo sessionAffinity como ClientIP en la especificación del servicio si necesitas la primera solicitud de un cliente para determinar qué Pod se utilizará para todas las conexiones posteriores.
Por ejemplo:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
sessionAffinity: ClientIP
selector:
app: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
Finalice su lab
Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.
Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.
La cantidad de estrellas indica lo siguiente:
- 1 estrella = Muy insatisfecho
- 2 estrellas = Insatisfecho
- 3 estrellas = Neutral
- 4 estrellas = Satisfecho
- 5 estrellas = Muy satisfecho
Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.
Copyright 2020 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.