¿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

ConfigMaps en Kubernetes

Después de esta lección: Puedo cambiar un ajuste de un programa sin construir nada de nuevo.

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

Una ConfigMap guarda ajustes fuera del programa

Una ConfigMap es un objeto de Kubernetes que guarda ajustes como pares de clave y valor, fuera de la imagen del programa. Cambiar un ajuste no obliga a construir nada de nuevo.

Una librería cambia cada mes el título de su cartelera. Si el título viviera dentro de la imagen, cada cambio sería una construcción nueva. Con una ConfigMap, basta con cambiar un valor.

Al final de esta lección

Nota

Puedo cambiar un ajuste de un programa sin construir nada de nuevo.

Palabras clave

PalabraQué significaEjemplo
ConfigMapun objeto que guarda ajustes en pares de clave y valor
Clave y valorel nombre de un ajuste y lo que valeTITULO=Feria de libros
Variable de entornoun ajuste que un programa lee al arrancar
Reinicio gradualsustituir los pods de uno en unorollout restart

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

¿Para qué sirve una ConfigMap?

Un programa necesita ajustes: un título, un idioma, una dirección. Si los escribes dentro de la imagen, cambiar uno obliga a construirla otra vez.

Una ConfigMap los guarda aparte, como pares de clave y valor: la clave es el nombre del ajuste y el valor es lo que vale. El mismo programa se comporta distinto con otra ConfigMap, sin cambiar de imagen.

Crea el namespace cartelera

Comando
kubectl create namespace cartelera

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

Crea una ConfigMap con un ajuste

Comando
kubectl create configmap ajustes --from-literal=TITULO="Feria de libros" -n cartelera

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

Lee el valor guardado

Comando
kubectl get configmap ajustes -n cartelera -o jsonpath='{.data.TITULO}'

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

El pod lee la ConfigMap como variables

La ConfigMap no sirve de nada hasta que se la das a un pod. Una forma sencilla es convertir cada clave en una variable de entorno: un ajuste que el programa lee cuando arranca.

Por costumbre, esos nombres se escriben en mayúsculas, y por eso la clave es TITULO. Al cambiar las variables de un Deployment, Kubernetes sustituye sus pods por otros nuevos.

Ejemplo: de la ConfigMap al pod

En la ConfigMapEn el podDentro del programa
clave TITULOvariable TITULOlee el valor al arrancar
valor Feria de librostexto Feria de libroslo muestra en la cartelera

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

Crea el Deployment cartel

Comando
kubectl create deployment cartel --image=busybox:1.37.0 -n cartelera -- sleep 3600

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

Dale la ConfigMap como variables de entorno

Comando
kubectl set env deployment/cartel --from=configmap/ajustes -n cartelera

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 el pod nuevo esté listo

Comando
kubectl rollout status deployment/cartel -n cartelera

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

Pide al pod el valor de TITULO

Comando
kubectl exec -n cartelera deploy/cartel -- printenv TITULO

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

Un pod en marcha no ve el cambio

Ahora cambia el valor de la ConfigMap. La ConfigMap guarda el valor nuevo enseguida. Pero el pod leyó su variable al arrancar y no vuelve a leerla.

Hace falta sustituirlo por otro pod. El reinicio gradual lo hace sin cortar el servicio: arranca el pod nuevo y, cuando está listo, para el viejo.

Cambia el valor en la ConfigMap

Comando
kubectl patch configmap ajustes -n cartelera --type merge -p '{"data":{"TITULO":"Feria de otono"}}'

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

Lee el valor guardado otra vez

Comando
kubectl get configmap ajustes -n cartelera -o jsonpath='{.data.TITULO}'

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

Pregunta al pod en marcha qué ve

Comando
kubectl exec -n cartelera deploy/cartel -- printenv TITULO

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 cambiar la ConfigMap cambia los pods que ya corren. La ConfigMap cambia, pero un pod en marcha conserva el valor con el que arrancó. Para que lo vea, sustitúyelo: es lo que hace un reinicio gradual.

Sustituye los pods del Deployment

Comando
kubectl rollout restart deployment/cartel -n cartelera

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 el pod nuevo esté listo

Comando
kubectl rollout status deployment/cartel -n cartelera

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

Pregunta al pod nuevo qué ve

Comando
kubectl exec -n cartelera deploy/cartel -- printenv TITULO

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 cartelera

Comando
kubectl delete namespace cartelera

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.