Este lab se desarrolló junto con nuestro socio MongoDB. Es posible que tu información personal se comparta con MongoDB, el patrocinador del lab, si aceptaste recibir actualizaciones, anuncios y ofertas de productos en el perfil de tu cuenta.
GSP022

Descripción general
Kubernetes es una herramienta de organización de contenedores de código abierto que simplifica la ejecución de aplicaciones alojadas en contenedores. Puedes ejecutar aplicaciones de Kubernetes con Kubernetes Engine, un servicio de procesamiento de Google Cloud que ofrece diferentes integraciones y personalizaciones. En este lab, obtendrás algo de experiencia práctica con Kubernetes. Para ello, aprenderás a configurar una base de datos de MongoDB con un StatefulSet. Ejecutar una aplicación con estado (una base de datos) en un servicio sin estado (un contenedor) puede parecer contradictorio, pero te darás cuenta rápidamente de que no es así después de practicar con este lab. De hecho, si usas algunas herramientas de código abierto, verás cómo Kubernetes y los servicios sin estado se complementan perfectamente.
Aprendizajes esperados
En este lab, aprenderás lo siguiente:
- Cómo implementar un clúster de Kubernetes, un Service sin interfaz gráfica y un StatefulSet
- Cómo conectar un clúster de Kubernetes a un conjunto de réplicas de MongoDB
- Cómo escalar las instancias de un conjunto de réplicas de MongoDB
- Cómo limpiar el entorno y cerrar los servicios anteriores
Requisitos previos
Este es un lab de nivel avanzado. Se recomienda tener conocimiento de Kubernetes o aplicaciones alojadas en contenedores, y experiencia con Google Cloud Shell/SDK y MongoDB. Si deseas avanzar con estos servicios, realiza los siguientes labs:
Cuando tengas todo listo, desplázate hacia abajo para configurar el entorno del lab.
Configuración
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, 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.
Nota: Usa una ventana del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
- Tiempo para completar el lab (recuerda que, una vez que comienzas un lab, no puedes pausarlo).
Nota: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá un diálogo para que selecciones la forma de pago.
A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón para 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.
-
Haz 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 acceder a los productos y servicios de Google Cloud, haz clic en el menú de navegación o escribe el nombre del servicio o producto en el campo Buscar.
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.
-
Haz clic para avanzar por las siguientes ventanas:
- Continúa en la ventana de información de Cloud Shell.
- Autoriza a Cloud Shell para que use tus credenciales para realizar llamadas a la API 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:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
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):
gcloud auth list
- Haz clic en Autorizar.
Resultado:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Puedes solicitar el ID del proyecto con este comando (opcional):
gcloud config list project
Resultado:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Nota: Para obtener toda la documentación de gcloud, en Google Cloud, consulta la guía con la descripción general de gcloud CLI.
Tarea 1: Establece una zona de procesamiento
A lo largo de este lab, utilizaremos la herramienta de línea de comandos de gcloud para aprovisionar nuestros servicios.
- Antes de poder crear nuestro clúster de Kubernetes, deberemos configurar una zona de procesamiento para que las máquinas virtuales del clúster se creen en la misma región. Para ello, usaremos el comando
gcloud config set. Ejecuta el siguiente comando en Cloud Shell para establecer la zona en :
gcloud config set compute/zone {{{project_0.default_zone | ZONE}}}
Nota: Consulta la Guía de regiones y zonas para obtener más información al respecto.
Tarea 2: Crea un clúster
Ahora que nuestra zona está configurada, crearemos un clúster de contenedores.
- Ejecuta el siguiente comando para crear una instancia de un clúster llamado
hello-world:
gcloud container clusters create hello-world --num-nodes=2
Con este comando, se crea un clúster con dos nodos o máquinas virtuales. Puedes configurar este comando con marcas adicionales para cambiar la cantidad de nodos, los permisos predeterminados y otras variables. Obtén más información en la referencia de gcloud container clusters create.
Iniciar el clúster puede tardar unos minutos. Una vez que esté activo, deberías recibir un resultado similar al siguiente:
NAME Location MATER_VERSION MASTER_IP ...
hello-world {{{project_0.default_zone | ZONE}}} 1.9.7-gke.3 35.184.131.251 ...
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear un clúster
Tarea 3: Establece la configuración
Ahora que tenemos nuestro clúster activo y en funcionamiento, es hora de integrarlo a MongoDB. Usaremos un conjunto de réplicas para que nuestros datos tengan alta disponibilidad y sean redundantes, un elemento indispensable para ejecutar aplicaciones de producción.
Para establecer la configuración, debemos seguir estos pasos:
- Ejecutar el siguiente comando para clonar el conjunto de réplicas de MongoDB/Kubernetes desde el repositorio de GitHub:
gsutil -m cp -r gs://spls/gsp022/mongo-k8s-sidecar
- Una vez que se haya clonado, navega al directorio
StatefulSet con el siguiente comando:
cd ./mongo-k8s-sidecar/example/StatefulSet/
Una vez que hayas verificado que los archivos se descargaron y que estás en el directorio correcto, avancemos y creemos una StorageClass de Kubernetes.
Crea la StorageClass
Una StorageClass le indica a Kubernetes qué tipo de almacenamiento quieres utilizar para los nodos de la base de datos. En Google Cloud, tienes dos opciones de almacenamiento: SSD y discos duros (HDD).
Si observas el contenido del directorio StatefulSet (puedes hacerlo ejecutando el comando ls), verás los archivos de configuración de SSD y HDD para Azure y Google Cloud.
- Ejecuta el siguiente comando para revisar el archivo
googlecloud_ssd.yaml:
cat googlecloud_ssd.yaml
Resultado:
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
Esta configuración crea una StorageClass llamada "fast" basada en volúmenes de SSD.
- Ejecuta el siguiente comando para implementar la StorageClass:
kubectl apply -f googlecloud_ssd.yaml
Ahora que nuestra StorageClass está configurada, el StatefulSet puede solicitar un volumen que se creará automáticamente.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear la StorageClass
Tarea 4: Implementa el Service sin interfaz gráfica y el StatefulSet
Busca e inspecciona los archivos
- Antes de detenernos en el significado de "Service sin interfaz gráfica" y "StatefulSet", abramos el archivo de configuración (
mongo-statefulset.yaml) donde se encuentran ambos:
nano mongo-statefulset.yaml
Deberías recibir el siguiente resultado (sin las flechas que indican el contenido del Service sin interfaz gráfica y el StatefulSet):
apiVersion: v1 <----------- Configuración del Service sin interfaz gráfica
kind: Service
metadata:
name: mongo
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo
---
apiVersion: apps/v1 <------- Configuración del StatefulSet
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: "mongo"
replicas: 3
selector:
matchLabels:
role: mongo
template:
metadata:
labels:
role: mongo
environment: test
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongo
image: mongo
command:
- mongod
- "--replSet"
- rs0
- "--smallfiles"
- "--noprealloc"
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db
- name: mongo-sidecar
image: cvallance/mongo-k8s-sidecar
env:
- name: MONGO_SIDECAR_POD_LABELS
value: "role=mongo,environment=test"
volumeClaimTemplates:
- metadata:
name: mongo-persistent-storage
annotations:
volume.beta.kubernetes.io/storage-class: "fast"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 50Gi
-
Quita las siguientes marcas del archivo (líneas 49 y 50):
- "--smallfiles"
- "--noprealloc"
- Asegúrate de que esta sección del archivo sea similar a lo siguiente:
containers:
- name: mongo
image: mongo
command:
- mongod
- "--replSet"
- rs0
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db
- Sal del editor nano presionando Ctrl + X > Y > Intro.
Descripción general del Service sin interfaz gráfica
La primera sección de mongo-statefulset.yaml hace referencia a un Service sin interfaz gráfica. En Kubernetes, los Services describen políticas o reglas para acceder a Pods específicos. En resumen, un Service sin interfaz gráfica es uno que no prescribe un balanceo de cargas. Cuando se combina con StatefulSets, otorga DNS individuales para acceder a los Pods y, a la vez, un modo de conectarse a cada uno de nuestros nodos de MongoDB. En el archivo yaml, verifica que el campo clusterIP esté configurado como None para así garantizar que el Service no tenga interfaz gráfica.
Descripción general del StatefulSet
La configuración de StatefulSet es la segunda sección de mongo-statefulset.yaml. Se trata de un elemento básico de la aplicación: es la carga de trabajo que ejecuta MongoDB y organiza tus recursos de Kubernetes. Si revisas el archivo yaml, verás que, en la primera sección, se describe el objeto StatefulSet. Luego, verás la sección metadata, en la que se especifican las etiquetas y la cantidad de réplicas.
Luego, vienen las especificaciones del Pod. terminationGracePeriodSeconds se usa para realizar un cierre ordenado del Pod cuando reduzcas verticalmente la cantidad de réplicas. Luego, se muestran los parámetros de configuración de ambos contenedores. El primero ejecuta MongoDB con marcas de línea de comandos que configuran el nombre del conjunto de réplicas y activa el volumen de almacenamiento persistente en /data/db (la ubicación donde MongoDB guarda sus datos). El segundo es un contenedor sidecar que configura automáticamente el conjunto de réplicas de MongoDB. Como se mencionó anteriormente, un "sidecar" es un contenedor auxiliar que ayuda al principal a ejecutar sus trabajos y tareas.
Por último, está volumeClaimTemplates, que se comunica con la StorageClass que creamos antes para aprovisionar el volumen. Aprovisiona un disco de 100 GB para cada réplica de MongoDB.
Implementa el Service sin interfaz gráfica y el StatefulSet
Ahora que contamos con una comprensión básica sobre el Service sin interfaz gráfica y el StatefulSet, vamos a implementarlos.
- Como ambos están empaquetados en
mongo-statefulset.yaml, podemos usar el siguiente comando para ejecutarlos:
kubectl apply -f mongo-statefulset.yaml
Deberías recibir el siguiente resultado:
service/mongo created
statefulset.apps/mongo created
Haz clic en Revisar mi progreso para verificar el objetivo.
Implementar el Service sin interfaz gráfica y el StatefulSet
Tarea 5: Conéctate al conjunto de réplicas de MongoDB
Ahora que tenemos un clúster en ejecución y nuestro conjunto de réplicas implementado, sigamos adelante y conectémonos a él.
Espera a que el conjunto de réplicas de MongoDB se implemente por completo
Los StatefulSets de Kubernetes implementan cada Pod de manera secuencial. Espera a que un miembro del conjunto de réplicas de MongoDB se inicie completamente y cree el disco de respaldo antes de iniciar el siguiente miembro.
- Ejecuta el siguiente comando para ver y confirmar que los tres miembros estén activos:
kubectl get statefulset
Resultado: Los tres miembros están activos.
NAME READY AGE
mongo 3/3 103s
Inicia y visualiza el conjunto de réplicas de MongoDB
En este punto, el clúster debería tener tres Pods, que corresponden a los tres nodos del conjunto de réplicas de MongoDB.
- Ejecuta este comando para verlos:
kubectl get pods
Resultado:
NAME READY STATUS RESTARTS AGE
mongo-0 2/2 Running 0 3m
mongo-1 2/2 Running 0 3m
mongo-2 2/2 Running 0 3m
-
Espera a que se creen los tres miembros antes de continuar.
-
Conéctate al primer miembro del conjunto de réplicas:
kubectl exec -ti mongo-0 -- mongosh
Ahora tienes un entorno REPL conectado a MongoDB.
- Creemos una instancia del conjunto de réplicas con una configuración predeterminada ejecutando el comando
rs.initiate():
rs.initiate()
- Para mostrar la configuración del conjunto de réplicas; ejecuta el comando
rs.conf():
rs.conf()
Este comando genera los detalles del miembro actual del conjunto de réplicas rs0. En este lab, solo ves un miembro. Para obtener detalles de todos los miembros, debes exponer el conjunto de réplicas a través de servicios adicionales, como nodeport o el balanceador de cargas.
rs0:OTHER> rs.conf()
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "localhost:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5c526b6501fa2d29fc65c48c")
}
}
- Escribe "exit" y presiona Intro para salir de
REPL.
Tarea 6: Escala el conjunto de réplicas de MongoDB
Una gran ventaja de Kubernetes y los StatefulSets es que puedes escalar la cantidad de réplicas de MongoDB con un solo comando.
- Para escalar verticalmente la cantidad de miembros del conjunto de réplicas de 3 a 5, ejecuta este comando:
kubectl scale --replicas=5 statefulset mongo
En pocos minutos, habrá 5 Pods de MongoDB.
- Ejecuta este comando para verlos:
kubectl get pods
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE
mongo-0 2/2 Running 0 41m
mongo-1 2/2 Running 0 39m
mongo-2 2/2 Running 0 37m
mongo-3 2/2 Running 0 4m
mongo-4 2/2 Running 0 2m
- Para reducir verticalmente la cantidad de miembros del conjunto de réplicas de 5 a 3, ejecuta este comando:
kubectl scale --replicas=3 statefulset mongo
En pocos segundos, tendrás 3 Pods de MongoDB.
- Ejecuta este comando para verlos:
kubectl get pods
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE
mongo-0 2/2 Running 0 41m
mongo-1 2/2 Running 0 39m
mongo-2 2/2 Running 0 37m
Haz clic en Revisar mi progreso para verificar el objetivo.
Escalar el conjunto de réplicas de MongoDB
Tarea 7: Usa el conjunto de réplicas de MongoDB
Cada Pod de un StatefulSet que cuente con un Service sin interfaz gráfica tendrá un nombre de DNS estable. La plantilla sigue este formato: <nombre-del-Pod>.<nombre-del-Service>
Por lo tanto, los nombres de DNS del conjunto de réplicas de MongoDB son los siguientes:
mongo-0.mongo
mongo-1.mongo
mongo-2.mongo
Puedes usar estos nombres directamente en el URI de cadena de conexión de tu app.
El uso de una base de datos está fuera del alcance de este lab, pero, en este caso, el URI de cadena de conexión sería el siguiente:
"mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo:27017/dbname_?"
Tarea 8: Realiza una limpieza
Ya que estás trabajando en un entorno de lab, tu proyecto y todos los recursos se limpiarán y se descartarán automáticamente cuando termines el lab. Sin embargo, queremos mostrarte cómo limpiar los recursos por tu cuenta para reducir los costos y usar la nube con cortesía cuando utilices tu propio entorno.
Para limpiar los recursos implementados, ejecuta los siguientes comandos, que borrarán el StatefulSet, el Service sin interfaz gráfica y los volúmenes aprovisionados.
- Borra el StatefulSet:
kubectl delete statefulset mongo
- Borra el Service:
kubectl delete svc mongo
- Borra los volúmenes:
kubectl delete pvc -l role=mongo
- Por último, puedes borrar el clúster de prueba:
gcloud container clusters delete "hello-world"
- Presiona Y seguido de Intro para continuar y borrar el clúster de prueba.
¡Felicitaciones!
Kubernetes Engine ofrece una manera eficaz y flexible de ejecutar contenedores en Google Cloud. Los StatefulSets permiten ejecutar cargas de trabajo con estado, como bases de datos, en Kubernetes. Aprendiste lo siguiente:
- Cómo crear un conjunto de réplicas de MongoDB con StatefulSets de Kubernetes
- Cómo conectarse al conjunto de réplicas de MongoDB
- Cómo escalar el conjunto de réplicas
Finaliza la Quest
Este lab de autoaprendizaje forma parte de la Quest Arquitectura de la nube. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completas una Quest, obtendrás una insignia como reconocimiento por tu logro. Puedes hacer públicas tus insignias y agregar vínculos a ellas en tu currículum en línea o en tus cuentas de redes sociales. Inscríbete en cualquier Quest que contenga este lab y obtén un crédito inmediato de finalización. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.
Realiza tu próximo lab
Continúa tu Quest con el siguiente lab o consulta estas sugerencias:
Próximos pasos y más información
Google Cloud Training & Certification
Aproveche al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarlo a ponerse en marcha rápidamente y a seguir aprendiendo. Para que pueda realizar nuestros cursos cuando más le convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: según demanda, presenciales y virtuales. Las certificaciones lo ayudan a validar y demostrar sus habilidades y experiencia en las tecnologías de Google Cloud.
Última actualización del manual: 9 de octubre de 2023
Prueba más reciente del lab: 9 de octubre de 2023
Copyright 2026 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.