Qué es un ConfigMap en Kubernetes: guía completa con ejemplos

| Última modificación: 4 de junio de 2026 | Tiempo de Lectura: 6 minutos
Premios Blog KeepCoding 2025

Contribuyo a acercar la realidad del sector tecnológico a nuevos profesionales, combinando conocimiento práctico, visión de mercado y experiencia directa en procesos de transformación profesional.

Uno de los principios fundamentales del diseño de aplicaciones en contenedores es que la imagen del contenedor debe ser independiente del entorno donde se ejecuta.

La misma imagen debe funcionar igual en desarrollo, en staging y en producción. Lo que cambia entre entornos no es el código, sino la configuración: la URL de la base de datos, el nivel de logging, las feature flags o los parámetros de conexión.

ConfigMap es el objeto de Kubernetes diseñado específicamente para resolver ese problema. Almacena la configuración separada del contenedor y permite que los Pods la consuman sin que el código de la aplicación sepa si está en un entorno u otro.

Es uno de los objetos más usados en cualquier clúster de Kubernetes, junto con Deployments, Services y Secrets.


Qué es un ConfigMap en Kubernetes

Un ConfigMap es un objeto de la API de Kubernetes que almacena datos de configuración no confidenciales en formato clave-valor. El nombre es explícito: es un mapa de configuración. Un conjunto de pares clave-valor que la aplicación puede leer en tiempo de ejecución.

El propósito central de un ConfigMap es desacoplar la configuración de la imagen del contenedor. Sin ConfigMap, la configuración va dentro del Dockerfile o de la imagen, lo que significa que cualquier cambio de configuración requiere reconstruir la imagen y redesplegar. Con ConfigMap, la imagen es genérica y la configuración se inyecta externamente al arrancar el Pod.

Esto tiene una consecuencia práctica muy directa: el mismo Deployment puede usarse en desarrollo, staging y producción cambiando únicamente el ConfigMap que lo alimenta, sin tocar la imagen Docker.

Una restricción importante: un ConfigMap tiene un límite de tamaño de 1 MiB. Si la configuración supera ese límite, se debe dividir en múltiples ConfigMaps o usar un mecanismo externo como un servicio de configuración distribuida.

🔴 ¿Quieres entrar de lleno al mundo DevOps & Cloud Computing? 🔴

Descubre el DevOps & Cloud Computing Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en DevOps & Cloud Computing por una semana

ConfigMap no cifra sus datos. Para almacenar información sensible como contraseñas, tokens de API o certificados TLS, se usa un Secret, no un ConfigMap. Para entender la arquitectura de contenedores sobre la que opera Kubernetes, el artículo sobre qué es Docker explica los fundamentos de contenedores e imágenes.

Estructura de un ConfigMap en YAML


La forma más recomendada de crear ConfigMaps en entornos de producción es mediante archivos YAML declarativos, que se pueden versionar en Git y gestionar como código de infraestructura.

Un ConfigMap básico tiene esta estructura:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
  namespace: production
data:
  # Variables de entorno simples
  APP_ENV: "production"
  APP_PORT: "8080"
  LOG_LEVEL: "info"
  DATABASE_HOST: "postgres-service.production.svc.cluster.local"
  # Archivo de configuración completo
  app.yaml: |
    server:
      port: 8080
      timeout: 30s
    features:
      login: true
      metrics: true

Los campos principales son:

  • apiVersion: v1 — versión de la API de Kubernetes para ConfigMaps.
  • kind: ConfigMap — tipo de objeto.
  • metadata.name — nombre del ConfigMap. Debe ser único dentro del namespace.
  • metadata.namespace — namespace donde vive el ConfigMap. Un Pod solo puede referenciar ConfigMaps del mismo namespace.
  • data — los pares clave-valor de configuración. Los valores son texto UTF-8.
  • binaryData — para contenido binario codificado en base64 (certificados, fuentes, etc.).

Cómo crear un ConfigMap con kubectl

Además de la forma declarativa con YAML, kubectl permite crear ConfigMaps directamente desde la línea de comandos en tres formas distintas.

Desde literales:

# Una sola clave-valor
kubectl create configmap app-config --from-literal=APP_ENV=production

# Múltiples claves
kubectl create configmap app-config \
  --from-literal=APP_ENV=production \
  --from-literal=APP_PORT=8080 \
  --from-literal=LOG_LEVEL=info

Desde un archivo de configuración:

# El nombre del archivo se convierte en la clave
kubectl create configmap nginx-config --from-file=nginx.conf

# Con nombre de clave personalizado
kubectl create configmap nginx-config --from-file=config=nginx.conf

Desde un directorio:

# Todos los archivos del directorio se añaden como claves
kubectl create configmap app-configs --from-file=./configs/

Aplicar un YAML:

kubectl apply -f configmap.yaml

Para listar los ConfigMaps del clúster y verificar que se han creado correctamente:

# Listar ConfigMaps del namespace actual
kubectl get configmaps

# Ver el contenido completo de un ConfigMap
kubectl describe configmap app-config

# Ver el YAML completo
kubectl get configmap app-config -o yaml

Cómo usar un ConfigMap en un Pod

Hay tres formas de consumir los datos de un ConfigMap en un Pod: como variables de entorno individuales, como todas las claves del ConfigMap de una vez con envFrom, o como archivos montados en un volumen.

Opción 1: Variables de entorno con configMapKeyRef

Inyecta claves específicas del ConfigMap como variables de entorno en el contenedor:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mi-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mi-app
  template:
    metadata:
      labels:
        app: mi-app
    spec:
      containers:
        - name: mi-app
          image: mi-app:latest
          env:
            - name: APP_ENV          # nombre de la variable en el contenedor
              valueFrom:
                configMapKeyRef:
                  name: app-config   # nombre del ConfigMap
                  key: APP_ENV       # clave dentro del ConfigMap
            - name: APP_PORT
              valueFrom:
                configMapKeyRef:
                  name: app-config
                  key: APP_PORT

Opción 2: Todas las claves de una vez con envFrom

Inyecta todas las claves del ConfigMap como variables de entorno, sin tener que listarlas una a una. Es más conciso pero menos explícito:

spec:
  containers:
    - name: mi-app
      image: mi-app:latest
      envFrom:
        - configMapRef:
            name: app-config    # todas las claves del ConfigMap pasan a ser variables de entorno

Con envFrom se puede añadir un prefijo a las variables para evitar colisiones entre varios ConfigMaps:

envFrom:
  - prefix: APP_        # las claves LOG_LEVEL → APP_LOG_LEVEL, PORT → APP_PORT
    configMapRef:
      name: app-config

Opción 3: Montar el ConfigMap como volumen

Monta los datos del ConfigMap como archivos en un directorio del contenedor. Cada clave del ConfigMap se convierte en un archivo cuyo contenido es el valor correspondiente:

spec:
  containers:
    - name: mi-app
      image: mi-app:latest
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config    # directorio donde se montan los archivos
  volumes:
    - name: config-volume
      configMap:
        name: app-config            # cada clave → un archivo en /etc/config/

Para montar solo claves específicas, no todo el ConfigMap:

volumes:
  - name: config-volume
    configMap:
      name: app-config
      items:
        - key: app.yaml              # solo se monta esta clave
          path: application.yaml    # con este nombre de archivo

Actualización automática: volúmenes sí, variables de entorno no

Este es uno de los comportamientos más importantes de los ConfigMaps y el que genera más confusión.

ConfigMap montado como volumen

Los cambios en el ConfigMap se propagan automáticamente a los archivos montados en el contenedor en unos minutos, sin reiniciar el Pod. La aplicación debe estar diseñada para releer el archivo de configuración cuando cambia.

ConfigMap como variables de entorno

Los cambios en el ConfigMap NO se propagan automáticamente. El Pod debe reiniciarse para recoger los nuevos valores. Se puede forzar con kubectl rollout restart deployment/nombre o modificando una anotación del Pod template.

En la práctica, esto significa que si necesitas que los cambios de configuración se apliquen sin downtime, la forma más apropiada es montar el ConfigMap como volumen y diseñar la aplicación para que recargue su configuración al detectar cambios en el archivo.

ConfigMaps inmutables

A partir de Kubernetes 1.21, los ConfigMaps pueden marcarse como inmutables con el campo immutable: true:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config-v2
immutable: true
data:
  APP_ENV: "production"
  APP_PORT: "8080"

Las ventajas de los ConfigMaps inmutables son significativas en clústeres grandes:

  • Kubernetes deja de monitorizar cambios en el ConfigMap, reduciendo la carga del API server.
  • Protege contra cambios accidentales que podrían afectar a aplicaciones en producción.
  • Mejora el rendimiento del clúster en entornos con decenas de miles de ConfigMaps.

La contrapartida: una vez marcado como inmutable, no se pueden modificar los datos. Para actualizar la configuración hay que crear un nuevo ConfigMap con un nombre diferente (por ejemplo, usando versionado: app-config-v2, app-config-v3) y actualizar el Deployment para que lo referencie.

Diferencia entre ConfigMap y Secret

ConfigMap vs Secret en Kubernetes
Característica ConfigMap Secret
Tipo de datos Configuración no sensible Datos sensibles (contraseñas, tokens)
Almacenamiento Texto plano en etcd Base64 en etcd (cifrado en reposo si se configura)
Visibilidad Accesible con kubectl get Control de acceso más restrictivo
Uso típico URLs, feature flags, parámetros de app Contraseñas, API keys, certificados TLS
Sintaxis kind: ConfigMap kind: Secret

La regla es simple: si el valor es algo que podrías ver en un log sin problema, va en un ConfigMap. Si es algo que no debería aparecer en un log ni en el código fuente, va en un Secret.

Buenas prácticas con ConfigMaps

ConfigMap en Kubernetes
  • Gestiona los ConfigMaps como código. Declara los ConfigMaps en archivos YAML, guárdalos en el repositorio Git junto con el resto de los manifiestos de Kubernetes y aplícalos con kubectl apply o con un sistema de CD como ArgoCD o Flux.
  • Usa namespaces para aislar entornos. Un ConfigMap de desarrollo y uno de producción con el mismo nombre en namespaces distintos permiten que el mismo Deployment funcione en ambos entornos sin cambios.
  • Versiona los ConfigMaps que no deberían cambiar. Para configuración estable, usa nombres versionados (app-config-v1) y marca el ConfigMap como inmutable. Actualizar la versión es un cambio explícito y controlado.
  • No almacenes secretos en ConfigMaps. Aunque sea más cómodo, las contraseñas o tokens en un ConfigMap son visibles para cualquiera con acceso de lectura al namespace.
  • Prefiere volúmenes para configuración que puede cambiar. Si la configuración puede actualizarse sin reiniciar los Pods, monta el ConfigMap como volumen. Si la aplicación no necesita recargar configuración en caliente, las variables de entorno son más simples.
Conoce la historia de Rubén Martínez Gómez
«

Rubén trabajaba como ingeniero de aplicaciones cuando decidió dar el salto al ecosistema DevOps. Hizo el Bootcamp DevOps de KeepCoding para entender el ecosistema completo: Docker, Kubernetes, Terraform y los procesos reales de gestión de infraestructura.

Hoy trabaja como SRE en Red Hat, donde gestiona clústeres de Kubernetes en producción. ConfigMaps, Secrets y la gestión de configuración como código son parte del trabajo cotidiano en ese tipo de rol. Lo que más valoró fue aprender a razonar sobre la infraestructura, no solo a ejecutar comandos.

«
Leer el caso de éxito completo de Rubén Martínez Gómez

ConfigMap en el contexto de un flujo DevOps real

En un flujo de DevOps maduro, los ConfigMaps son parte del pipeline de despliegue. El proceso habitual es:

  • Los ConfigMaps de cada entorno viven en directorios separados del repositorio de manifiestos (o en un sistema de gestión de secretos como Vault para los valores sensibles).
  • Un sistema de CD como ArgoCD monitoriza el repositorio y aplica los cambios automáticamente al clúster cuando se hace merge en la rama del entorno correspondiente.
  • Los Deployments referencian los ConfigMaps por nombre. Si el ConfigMap cambia, ArgoCD detecta la diferencia y hace el rollout del Deployment.

Este patrón, conocido como GitOps, hace que la configuración del clúster sea reproducible, auditable y reversible. Cualquier cambio de configuración queda registrado en el historial de commits.

Para entender cómo se construye la infraestructura de contenedores sobre la que opera Kubernetes, el artículo sobre qué es Docker Compose explica la orquestación de contenedores en el nivel anterior a Kubernetes.


Conclusión

bootcamp devops

ConfigMap es uno de los objetos más usados en Kubernetes precisamente porque resuelve un problema fundamental del despliegue de aplicaciones en contenedores: cómo separar la configuración del código para que la misma imagen funcione en cualquier entorno. Bootcamp en DevOps & Cloud Computing Full Stack Bootcamp.

Dominar ConfigMap no es solo saber crear el YAML. Es entender cuándo usar variables de entorno frente a volúmenes montados según si se necesita actualización automática, cuándo marcar un ConfigMap como inmutable para mejorar el rendimiento del clúster, y cómo integrar la gestión de ConfigMaps en un pipeline GitOps reproducible.

La documentación oficial más completa sobre ConfigMaps, con todos los campos disponibles y los patrones de uso avanzados, está en kubernetes.io/es/docs/concepts/configuration/configmap/.

Noticias recientes del mundo tech

¡CONVOCATORIA ABIERTA!

Bootcamp devops & cloud computing

Clases en Directo | Acceso a +600 empresas | Empleabilidad de 99,36%

Descárgate también el informe de tendencias en el mercado laboral 2026.

Fórmate con planes adaptados a tus objetivos y logra resultados en tiempo récord.
KeepCoding Bootcamps
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.