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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| ConfigMap | un objeto que guarda ajustes en pares de clave y valor | |
| Clave y valor | el nombre de un ajuste y lo que vale | TITULO=Feria de libros |
| Variable de entorno | un ajuste que un programa lee al arrancar | |
| Reinicio gradual | sustituir los pods de uno en uno | rollout 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
kubectl create namespace carteleraSe 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
kubectl create configmap ajustes --from-literal=TITULO="Feria de libros" -n carteleraSe 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
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 ConfigMap | En el pod | Dentro del programa |
|---|---|---|
| clave TITULO | variable TITULO | lee el valor al arrancar |
| valor Feria de libros | texto Feria de libros | lo muestra en la cartelera |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Crea el Deployment cartel
kubectl create deployment cartel --image=busybox:1.37.0 -n cartelera -- sleep 3600Se 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
kubectl set env deployment/cartel --from=configmap/ajustes -n carteleraSe 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
kubectl rollout status deployment/cartel -n carteleraSe 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
kubectl exec -n cartelera deploy/cartel -- printenv TITULOSe 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
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
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
kubectl exec -n cartelera deploy/cartel -- printenv TITULOSe 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
kubectl rollout restart deployment/cartel -n carteleraSe 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
kubectl rollout status deployment/cartel -n carteleraSe 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
kubectl exec -n cartelera deploy/cartel -- printenv TITULOSe 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
kubectl delete namespace carteleraSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.