¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Una app completa en Kubernetes

Después de esta lección: Puedo poner en marcha una app pequeña con un Deployment, un Service y una ConfigMap.

Lección de 60 min14 comandosLaboratorio de Kubernetes: un clúster k3s de un nodo para cada alumno en una VM Ubuntu privada

Una app son varias piezas que se apuntan

Una aplicación en Kubernetes casi nunca es un solo objeto. Un Deployment mantiene los pods, un Service les da nombre y una ConfigMap guarda sus ajustes.

Si una pieza apunta mal a otra, todo parece en marcha y nada funciona. Hoy montas la carta digital de un comedor universitario y aprendes dónde se rompen las uniones.

Al final de esta lección

Nota

Puedo poner en marcha una app pequeña con un Deployment, un Service y una ConfigMap.

Palabras clave

PalabraQué significaEjemplo
Manifiestola descripción de un objeto, escrita en YAML
Volumenuna carpeta que el pod ve, llena desde otro sitio
Selectorlas etiquetas con las que un objeto elige pods
Puerto de destinoel puerto del pod al que envía el Service8080
Reinicio gradualsustituir los pods de uno en unorollout restart

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un manifiesto describe un objeto

Kubernetes guarda cada objeto como un manifiesto: un texto en YAML con su tipo, su nombre y lo que quieres. Las órdenes de kubectl lo escriben por ti. Con --dry-run=client -o yaml ves el manifiesto sin crear nada.

Mira dos cosas: selector y labels del Deployment, que deben coincidir, y image, que aquí es siempre busybox.

Mira el manifiesto de un Deployment sin crearlo

Comando
kubectl create deployment menu --image=busybox:1.37.0 --replicas=2 --dry-run=client -o yaml -- httpd -f -p 8080 -h /www

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo: lo que debe coincidir entre piezas

PiezaApunta aDebe coincidir con
DeploymentSus propios podsEl selector está en las etiquetas del pod
ServiceLos pods del DeploymentSu selector está en las etiquetas del pod
ServiceEl puerto del programaEl puerto de destino es el que escucha el pod
PodLa ConfigMapEl nombre existe en el namespace

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La carta del comedor sale de una ConfigMap

La app es un servidor web con dos pods. La página que sirve vive en una ConfigMap llamada carta, y un Service la reparte.

Para que el pod vea la ConfigMap hay que montarla como volumen: una carpeta cuyos archivos son las claves. La clave index.html aparece como el archivo index.html, que httpd sirve.

Crea el namespace comedor

Comando
kubectl create namespace comedor

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea la ConfigMap con la página de hoy

Comando
kubectl create configmap carta --from-literal=index.html="Menu del dia: lentejas" -n comedor

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea el Deployment con dos pods

Comando
kubectl create deployment menu --image=busybox:1.37.0 --replicas=2 -n comedor -- httpd -f -p 8080 -h /www

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Monta la ConfigMap en la carpeta /www

Comando
kubectl patch deployment menu -n comedor -p '{"spec":{"template":{"spec":{"volumes":[{"name":"web","configMap":{"name":"carta"}}],"containers":[{"name":"busybox","volumeMounts":[{"name":"web","mountPath":"/www"}]}]}}}}'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Espera a que los pods nuevos estén listos

Comando
kubectl rollout status deployment/menu -n comedor

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea el Service que reparte entre los pods

Comando
kubectl expose deployment menu --port=80 --target-port=8080 -n comedor

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lista las tres piezas de la app

Comando
kubectl get deployments,services,configmaps -n comedor -o name

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide la carta desde un pod de visita

Comando
kubectl run visita -n comedor --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://menu

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que si todos los pods están en Running, la app funciona. Running solo dice que el programa arrancó. El Service puede no elegir ningún pod o apuntar al puerto equivocado. Comprueba siempre pidiendo la página, como hace un cliente.

Cambiar la carta es cambiar la ConfigMap

Mañana toca otro plato. Cambias el valor de la ConfigMap, y no tocas ni la imagen ni el Deployment.

Después sustituyes los pods con un reinicio gradual, para que arranquen con la carta nueva. Si el wget falla una vez con un error de ruta justo después, espera unos segundos y repite.

Cambia la página en la ConfigMap

Comando
kubectl patch configmap carta -n comedor --type merge -p '{"data":{"index.html":"Menu del dia: paella"}}'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sustituye los pods del Deployment

Comando
kubectl rollout restart deployment/menu -n comedor

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Espera a que los pods nuevos estén listos

Comando
kubectl rollout status deployment/menu -n comedor

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide otra vez la carta

Comando
kubectl run visita -n comedor --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://menu

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Borra el namespace comedor

Comando
kubectl delete namespace comedor

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sobre este laboratorio y su código: Laboratorio de Kubernetes: un clúster k3s de un nodo para cada alumno en una VM Ubuntu privada

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.