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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Manifiesto | la descripción de un objeto, escrita en YAML | |
| Volumen | una carpeta que el pod ve, llena desde otro sitio | |
| Selector | las etiquetas con las que un objeto elige pods | |
| Puerto de destino | el puerto del pod al que envía el Service | 8080 |
| Reinicio gradual | sustituir los pods de uno en uno | rollout 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
kubectl create deployment menu --image=busybox:1.37.0 --replicas=2 --dry-run=client -o yaml -- httpd -f -p 8080 -h /wwwSe 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
| Pieza | Apunta a | Debe coincidir con |
|---|---|---|
| Deployment | Sus propios pods | El selector está en las etiquetas del pod |
| Service | Los pods del Deployment | Su selector está en las etiquetas del pod |
| Service | El puerto del programa | El puerto de destino es el que escucha el pod |
| Pod | La ConfigMap | El 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
kubectl create namespace comedorSe 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
kubectl create configmap carta --from-literal=index.html="Menu del dia: lentejas" -n comedorSe 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
kubectl create deployment menu --image=busybox:1.37.0 --replicas=2 -n comedor -- httpd -f -p 8080 -h /wwwSe 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
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
kubectl rollout status deployment/menu -n comedorSe 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
kubectl expose deployment menu --port=80 --target-port=8080 -n comedorSe 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
kubectl get deployments,services,configmaps -n comedor -o nameSe 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
kubectl run visita -n comedor --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://menuSe 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
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
kubectl rollout restart deployment/menu -n comedorSe 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
kubectl rollout status deployment/menu -n comedorSe 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
kubectl run visita -n comedor --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://menuSe 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
kubectl delete namespace comedorSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.