ConfigMap en Kubernetes


Aprende a usar los ConfigMap en Kubernetes, donde cargaremos variables de entorno que usaremos en un pod

oscar Escrito por oscar 13 August 2025 50 0

En Kubernetes, un ConfigMap es un objeto que almacena datos de configuración en pares clave-valor para que los Pods y contenedores los puedan usar sin necesidad de modificar la imagen del contenedor.

En otras palabras:

  • Es como una cajita donde guardas configuraciones (texto, variables, archivos pequeños).
  • Separa la configuración del código, para que no tengas que reconstruir imágenes cada vez que cambies un parámetro.

¿Para qué sirve?

Un ConfigMap es útil cuando:

  • Tienes variables de entorno que cambian según el entorno (dev, staging, producción).
  • Necesitas archivos de configuración (por ejemplo: app.properties, nginx.conf).
  • Quieres mantener tu contenedor genérico y pasarle los valores externos al ejecutarlo.

Qué NO es un ConfigMap

  • No almacena datos sensibles (para eso existe Secret).
  • No es persistente como un volumen; es más como un recurso en memoria gestionado por Kubernetes.
  • No es para datos binarios grandes (está pensado para texto o configuraciones pequeñas).

Forma de crear un ConfigMap

1️⃣ Crear un ConfigMap a partir de literales

kubectl create configmap config-from-literal --from-literal=clave=valor --from-literal=ENV=PRODUCCION

Este comando crea un ConfigMap llamado config-from-literal, con las claves clave y ENV y sus respectivos valores.

2️⃣ Crear un ConfigMap a partir de un archivo

Primero vamos a crear un directorio llamado 📁 configs luego creamos el archivo 📃 game.properties donde colocamos los siguientes datos de tipo clave valor.

enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30

Luego, en el mismo directorio en donde creamos game.properties ejecutamos 

kubectl create configmap config-from-file --from-file=game.properties

Respuesta: configmap/config-from-file created

3️⃣ Crear un ConfigMap a partir de un directorio

Usaremos de ejemplo el anterior punto en donde creamos un directorio llamado 📁 configs, ahora usaremos el archivo  📃 game.properties y crearemos uno nuevo llamado ui.properties

📃 ui.properties

color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

Nos deberá quedar algo de la siguiente forma

configs
|_game.properties
|_ui.properties

Luego ejecutamos

kubectl create configmap config-folder --from-file=configs/

Respuesta: configmap/config-folder created

4️⃣ Crear el ConfigMap con YAML

Creamos el archivo 📃 configmap.yaml y añadimos lo siguiente:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-yaml
data:
  APP_MODE: "production"
  APP_PORT: "8080"
  mensaje.txt: |
    Bienvenido a la aplicación
    Esto está en un archivo generado por un ConfigMap

Luego ejecutamos

kubectl apply -f configmap.yaml

Respuesta: configmap/config-yaml created

Comandos para gestionar ConfigMaps

1️⃣ Listar ConfigMaps 

Podemos listar los configmaps creados con:

kubectl get configmaps

2️⃣ Describir un ConfigMap

kubectl describe configmap <NOMBRE_CONFIGMAP>

3️⃣ Ver contenido de un ConfigMap

kubectl get configmap <NOMBRE_CONFIGMAP> -o json
kubectl get configmap <NOMBRE_CONFIGMAP> -o yaml

4️⃣ Editar un ConfigMap

kubectl edit configmap mi-config

(abre el editor de Kubernetes en consola, generalmente vi o nano)

5️⃣ Actualizar un ConfigMap

Si tienes un archivo YAML:

kubectl apply -f configmap.yaml

Si quieres reemplazar completamente:

kubectl replace -f configmap.yaml

6️⃣ Eliminar un ConfigMap

kubectl delete configmap mi-config

Respuesta: configmap "mi-config" deleted

Ejemplo de uso de ConfigMaps

Escenario, Tendremos:

  • Un ConfigMap llamado config-from-yaml en el archivo configmap.yaml que contiene:
    • Una variable APP_MODE=production
    • Una variable APP_PORT=8080
  • Un Pod llamado app-pod en el archivo pod.yaml que:
    • Leerá esas variables como variables de entorno.
    • Montará también el ConfigMap como un archivo en /config.

Creamos el archivo 📃 configmap.yaml y añadimos lo siguiente:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-yaml
data:
  APP_MODE: "production"
  APP_PORT: "8080"
  mensaje.txt: |
    Bienvenido a la aplicación
    Esto está en un archivo generado por un ConfigMap

Crear el Pod con YAML llamado 📃 pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: busybox
    command: ["/bin/sh", "-c", "env && echo 'Contenido de /config/mensaje.txt:' && cat /config/mensaje.txt && sleep 3600"]
    envFrom:
      - configMapRef:
          name: config-yaml
    volumeMounts:
      - name: config-volume
        mountPath: /config
  volumes:
    - name: config-volume
      configMap:
        name: mi-config

Explicación:

  • envFrom: carga todas las claves del ConfigMap como variables de entorno.
  • volumeMounts: monta el ConfigMap en /config.
  • El contenedor imprime las variables y el contenido del archivo, y luego se queda activo 1 hora para que puedas inspeccionarlo.

Crear el ConfigMap

kubectl apply -f configmap.yaml

Crear el Pod

kubectl apply -f pod.yaml

Verificar que el Pod esté corriendo

kubectl get pods

Respuesta:

NAME      READY   STATUS    RESTARTS       AGE
app-pod   1/1     Running   7 (113s ago)   5d21h

 

Ver logs del Pod (para ver las variables y archivo)

kubectl logs app-pod

Respuesta

KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=app-pod
SHLVL=1
HOME=/root
APP_PORT=8080
APP_MODE=production
LOADBALANCER_PORT_3000_TCP_ADDR=10.104.71.25
LOADBALANCER_PORT_3000_TCP_PORT=3000
LOADBALANCER_PORT_3000_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
LOADBALANCER_PORT_3000_TCP=tcp://10.104.71.25:3000
LOADBALANCER_SERVICE_HOST=10.104.71.25
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
mensaje.txt=Bienvenido a la aplicación
Esto está en un archivo generado por un ConfigMap

LOADBALANCER_PORT=tcp://10.104.71.25:3000
LOADBALANCER_SERVICE_PORT=3000
Contenido de /config/mensaje.txt:
Bienvenido a la aplicación
Esto está en un archivo generado por un ConfigMap

 

💻 Ingresamos al pod a su consola shell

kubectl exec -it app-pod -- sh

Una ves dentro, ejecutamos lo siguiente, buscamos las variables de entrono y como filtro colocamos APP_

env | grep APP_

Respuesta

APP_PORT=8080
APP_MODE=production

 Luego procedemos a ver el archivo mesaje.txt en el directorio donde se ha almacenado

cat /config/mensaje.txt

Respuesta

Bienvenido a la aplicación
Esto está en un archivo generado por un ConfigMap

Con esto podemos ver los datos de variables de entorno creadas en el pod que seran usadas por cualquier aplicacion que necesitemos

Por ultimo ejecutamos lo siguiete para borar las pruebas creadas

kubectl delete configmap config-yaml
kubectl delete pod app-pod

Comentario

Debe aceptar antes de enviar