Ejemplo de ConfigMap en Kubernetes: guía total con casos reales

Zadnje ažuriranje: 11/17/2025
  • ConfigMaps separan la configuración del código y permiten cambios dinámicos sin reconstruir imágenes
  • Cuatro consumos clave: env, args, ficheros en volúmenes y lectura vía API con suscripción a cambios
  • Actualización automática en volúmenes y reinicio necesario para env; límite de 1 MiB y sin cifrado por defecto
  • Buenas pácticas: versionado, Kustomize con hash, RBAC, evitar secretos y usar inmutables cuando proceda

Primjer ConfigMap Kubernetes

Ako radite s Kubernetesom y necesitas separar la configuración del código, los ConfigMaps son tu mejor aliado. Permiten inyectar pares clave-valor no sensibles en tus Pods sin hornear esa configuración dentro de la imagen, lo que facilita despliegues limpios, portables y fáciles de mantener.

Además de lo básico, hay matices importantes: límites de tamaño, actualización automática al montarlos como volumen, cómo afectan los cambios a variables de entorno, buenas practicas de seguridad y hasta estrategias de observabilidad. Este recorrido práctico ya fondo reúne todo lo que necesitas para dominar los ConfigMaps sin dejarte nada en el tintero.

Qué es un ConfigMap y por qué usarlo

ConfigMap je objekt Kubernetesovog API-ja napisan za almacenar datos de configuración no confidenciales en pares clave-valor. Su objetivo es desacoplar la configuración específica del entorno de las imágenes de contenedor, evitando que tengas que reconstruirlas cada vez que cambie un parámetro.

Los Pods pueden consumir ConfigMaps como variables de entorno, argumentos de arranque, checheros montados en lumenes or leyéndolos directamente desde la API. Este diseño encaja con el factor config de las 12‑Factor Apps y mejora la portabilidad entre desarrollo, pruebas y producción.

Zamislite da vaša aplikacija koristi varijablu DATABASE_HOST. En local apuntas a localhost, y en la nube usas el nombre de un Service que expone la base de datos. Con un ConfigMap puedes alternar esos valores sin tocar la imagen ni el binario, depurando el mismo código en cualquier entorno.

Ima ključno ograničenje: un ConfigMap nema više od 1 MiB. Si necesitas más, divide la configuración en varios ConfigMaps o korištenju un servicio externo, un volumen o una base de datos de configuración.

Upotreba ConfigMap u Kubernetesu

Objeto ConfigMap: polja, nazivi i klaves valjani

A diferencia de la mayoría de objetos con campo spec, ConfigMap definira su contenido en los campos data y binaryData. tekstni podaci u UTF‑8; binaryData dopušta sadržaj binarnog koda u base64, idealno za formate bez UTF‑8.

Naziv ConfigMap ima validan DNS subdominio y las claves bajo data or binaryData deben contener characters alfanumericos, guion, guion bajo ili punto. Las claves de data no pueden solaparse con las de binaryData, así que organizalas con criterio para evitar conflictos.

Desde Kubernetes v1.19 puedes crear ConfigMaps infutables añadiendo el campo immutable: true. La inmutabilidad, estable desde v1.21, evita cambios incidentales y reduce carga en el API server cerrando los watches, a costa de que, si necesitas cambiar algo, tendrás que borrar y recrear el objeto.

ConfigMaps y Pods: cuatro formas de consumo

Para que un Pod use un ConfigMap, ambos deben estar en el mismo namespace. Hay cuatro maneras principales de consumirlos según lo que necesite tu applicación.

  1. Pasar values ​​en command y args del contenedor, referenciando datos del ConfigMap. Útil para binarios que leen configuración solo por argumentos.
  2. Exponer pares clave-valor como variables de entorno dentro del contenedor. La opción más común para apps que leen del entorno.
  3. Montar el ConfigMap como ficheros en un volumen de solo lectura. Perfecto para aplicaciones que esperan archivos de configuración.
  4. Pogledajte ConfigMap od API-ja s vašim propio kodom. Dozvolite pretplatu na cambios y reaccionar en caliente, incluso desde drugih imenskih prostora si usas la API.

Cuando se usa como volume, Kubernetes crea archivos por clave. Si definira stavke en el volumen, puedes seleccionar y renombrar claves concretas; si no, se proyectan todas. También puedes elegir rutas específicas y permisos POSIX para cada fichero.

Actualización de ConfigMaps montados y varijable de entorno

Detaljna kritika: cuando montas un ConfigMap en un volumen, los cambios se propagan automáticamente con un pequeño retraso. El kubelet comprueba el contenido en cada sincronización y se apoya en una caché local.

Ova komponenta ovisi o configMapAndSecretChangeDetectionStrategy, koja se može gledati, bazirana na TTL ili izravnom API poslužitelju. El retardo total será la suma del periodo de sync del kubelet más la propagación de caché; por defecto, 1 minuta sinkronizacije i 1 minuta TTL pueden suponer hasta 2 minute kašnjenja.

Umjesto toga, las variables de entorno derivadas de ConfigMaps no se actualizan automáticamente. Necesitarás reiniciar el Pod o hacer un rollout para que el processo recoja los nuevos valores. Un truco común para forzar una recarga en Deployments es modificar una anotación del Pod Template, provocando un nuevo ReplicaSet.

Izradi ConfigMaps s kubectl-om

Puedes crearlos con kubectl create configmap, or mediante generadores de Kustomize en kustomization.yaml. kubectl admite varias fuentes: directorios, ficheros individuales, literales y env‑files.

Od direktorija

kubectl empaqueta todos los ficheros regulares con nombre válido del directorio, usando el nombre de cada archivo como clave y su contenido como valor. Entradas que no son ficheros regulares se ignoran como subdirectorios o enlaces simbólicos.

kubectl create configmap game-config --from-file=configure-pod-container/configmap/

Al describir el ConfigMap verás, por ejemplo, game.properties y ui.properties bajo data, with su originalni tekst. Es la forma más cómoda de llevar ficheros de configuración tal cual al cluster.

Od betonskih žica

También puedes pasar varios – repetidos iz datoteke za kombinirane fuentes. Por defecto la clave es el nombre base del archivo, aunque puedes asignar una clave distinta.

kubectl create configmap game-config-2 
  --from-file=configure-pod-container/configmap/game.properties 
  --from-file=configure-pod-container/configmap/ui.properties

Si quieres definir otra clave para el fichero, usa la forma clave=put. Esto es útil cuando varios archivos comparten nombres o quieres darles nombres más expresivos.

kubectl create configmap game-config-3 
  --from-file=game-special-key=configure-pod-container/configmap/game.properties

Od doslovnih vrijednosti

Con –from-literal definira pares clave-valor en línea, repitiendo la opción las veces necesarias. Idealno para ajustes rápidos o un puñado de propiedades.

kubectl create configmap special-config 
  --from-literal=special.type=charm 
  --from-literal=special.how=very

Desde env-datoteke

–from-env-file kreira klave za dio arhive varijabli entorno al estilo .env. Desde v1.23 puedes especificar varias veces –from-env-file za kombiniranje fuentes.

kubectl create configmap my-config --from-env-file=app.env --from-env-file=extra.env

Generiraj ConfigMaps s Prilagodbom

Prilagođavanje dopušta deklariranje generiranih i kustomization.yaml za proizvodnju ConfigMaps desde ficheros ili literales. El nombre generado incluye un sufijo hash del contenido para garantizar un nuevo objeto al cambiar los datos.

configMapGenerator:
- name: game-config-4
  files:
  - configure-pod-container/configmap/game.properties

También es posible fijar la clave distinta al nombre del fichero. Esta técnica facilita despliegues declarativos y evita problemas de caché de configuración.

configMapGenerator:
- name: game-config-5
  files:
  - game-special-key=configure-pod-container/configmap/game.properties

Koristite ConfigMaps kao entorno varijable

Tienes dos patrones principales. Con envFrom importas todas las claves del ConfigMap como variables del contenedor. Rápido y cómodo cuando la aplicación espera muchas varijable.

envFrom:
- configMapRef:
    name: my-config

Ako sami tražite algunas claves ili renombrarlas, usa env y valueFrom.configMapKeyRef. Así eliges claves puntuales y el nombre de la variable puede ser diferente.

env:
- name: CONFIGMAP_USERNAME
  valueFrom:
    configMapKeyRef:
      name: my-config
      key: username

Ojo: los nombres de variables de entorno admiten un conjunto restringido de caracteres. Ako jedna klava ConfigMap nije valjana za jednu env varijantu, izostavite je i registrirajte događaj tipa InvalidEnvironmentVariableNames, niti Pod koji se dogovara.

Montar ConfigMaps kao ficheros

Para exponer datos como archivos, añade el volumen en spec.volumes con configMap.name y monta ese volumen con volumeMounts en cada contenedor que lo necesite. Clave se projektira kao arhiva koja se nalazi na mountPath.

volumes:
- name: config-volume
  configMap:
    name: special-config

containers:
- name: app
  image: my-image
  volumeMounts:
  - name: config-volume
    mountPath: /etc/config
    readOnly: true

Puedes mapear claves a rutas y nombres exactos usando items y path, o montar una sola clave con subPath. También se pueden ajustar permisos de archivo con defaultMode o por clave.

volumes:
- name: config-volume
  configMap:
    name: special-config
    items:
    - key: SPECIAL_LEVEL
      path: keys

Važna napomena: si en la imagen ya existen ficheros bajo el directorio de montaje, quedarán ocultos por el volumen. Tenlo en cuenta para no perder archivos necesarios en tiempo de ejecución.

Tekst se prikazuje u UTF‑8; za druge kodifikacije ili binarne podatke, usa binaryData. Al actualizar el ConfigMap, el contenido proyectado se refrescará con el tardo antes mencionado. Puedes acelerar la actualización cambiando una anotación del Pod para forzar relectura.

Referencias opcionales, namespaces y restrictiones

Referenca na ConfigMap može se označiti kao opcija. Ako ConfigMap ne postoji, el volumen se montará vacío y la variable de entorno no tendrá valor; si la clave concreta no existe, la ruta o la variable estarán ausentes.

Pravila za snimanje: debe existir el ConfigMap antes de referenciarlo salvo que lo marques como opcional, y tanto Pod como ConfigMap deben estar en el mismo namespace. Los ConfigMaps nije kompatibilan sa statičkim modulima izravno upravljanim za kubelet.

Nepromjenjive vrijednosti ConfigMapsa

La funcionalidad de ConfigMaps inmutables aporta dos ventajas claras en clústeres con muchos montajes: protege frente a cambios indeseados que causen caídas y reduce carga del API server al cerrar watches. Una vez immutable es true, no supported editor data ni binaryData; toca borrar y recrear, y normalmente reiniciar los Pods que lo montaban para evitar referencias huérfanas.

Límites, tamaño y almacenamiento interno

Los ConfigMaps čuva se na etcd-u samo kao restauracija objekata API-ja. No están cifrados por defecto; quien tenga acceso a etcd oa los backups podrá leer su contenido, por lo que no debes almacenar secretos aquí.

Postoji ograničena veličina: el completo completo debe ser menor a 1 MiB. Superarlo generará un error de entidad demasiado grande. Si te acercas a ese tehcho, reparte la configuración en varios ConfigMaps o cambia de enfoque a volúmenes o servicios externos.

Brza usporedba: ConfigMaps, entorno varijable i tajne

Varias opciones resuelven la configuración. ConfigMaps centralizan datos no sensibles y admiten actualizaciones dinámicas. Variables de entorno puras también separan configuración, pero exigen redeploy para cambios. Secrets almacenan datos sensibles codificados en base64; no es cifrado real, pero permiten políticas de acceso separadas y mejores controles.

  • ConfigMaps: no sensibles, dinámicos, fáciles de montar como archivos o env. No cifrados por defecto.
  • Varijable okoliša: sencillas, pero poco prácticas si hay muchas y no se actualizan en caliente.
  • Tajne: datos sensibles; separan credenciales de la configuración normal, requieren tratamiento específico.

Dobre prakse i sigurnost

Mantén versiones de tus ConfigMaps en git y usa deskriptivni nazivi ili sufijos de verzija. Con Kustomize, los hashes de contenido te ayudan a forzar relecturas en despliegues sin trucos adicionales.

Evita introducir secretos en ConfigMaps; usa Secrets y RBAC za ograničeni pristup. Valida la sintaxis con linters y pruebas básicas antes de aplicar para reducir errores de formato o indentación.

Controla acceso con RBAC. Por ejemplo, uloga samostalnog predavanja para configmaps en un namespace:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: configmap-reader
rules:
- apiGroups: ['']
  resources: ['configmaps']
  verbs: ['get', 'list', 'watch']

Para cambios, kubectl edit es cómodo y aplica en vivo, pero en producción es preferible flujo declarativo con apply y revisión por PR. Ako koristite varijable de entorno, planea el rollout al editar el ConfigMap para que los Pods recojan los nuevos valores.

Patrones avanzados y escenarios reales

Višestruki dodaci: kreiranje ConfigMaps posebno za razvoj, postavljanje i proizvodnju. Así evitas mezclar ajustes y smanjuje errores al promover versiones.

Copiar entre clusteres: al ser manifiestos, puedes moverlos y aplicarlos con kubectl donde lo necesites. Ovo je agiliza migracija DR-a.

Aplicaciones que reaccionan a cambios: ako imate ConfigMaps desde la API, suscríbete a eventos y reacciona al vuelo. Este enfoque permite adaptar comportamiento sin reinicios, aunque implica más complejidad de código.

Despliegues con Deployments: reference ConfigMaps con envFrom o volúmenes. Para forzar renovación cuando cambie un ConfigMap consumido como env, añade una anotación checksum o incrementa una etiqueta en el Pod Template, lo que desencadenará un nuevo ReplicaSet.

Detalles finos de volúmenes proyectados

Si el Pod define un volumen desde varios orígenes, usa projected volumes para combinarlos. Las claves mapeadas con items permiten nombres de archivo coherentes con lo que tu app espera. subPath es útil para montar una única clave sin montar el directorio completo.

Recuerda que los montajes de ConfigMap son de solo lectura y que en imágenes con ficheros en la misma ruta quedarán ocultos por el volumen. Planifica ubicaciones de montaje que no pisen artefactos esenciales de la imagen.

Actualización y detección de cambios en detalle

Kubelet odlučuje kako detektirati cambios según configMapAndSecretChangeDetectionStrategy. watch es el modo por defecto, TTL mantiene una caché con caducidad y direct consulta siempre al API server. Escoger uno u otro afecta latencia y carga del control plane.

El refresco efectivo de claves montadas puede tardar hasta el periodo de sync más la propagación de caché. Si necesitas actualización inmediata, modificar una anotación del Pod desencadena una sincronización que fuerza la relectura. Este patrón es frecuente cuando la latencia por defecto no es aceptable.

Restrictiones y comportamiento con errores

Ako reference na ConfigMap ne postoje kao oznaka kao opcija, el Pod no arrancará. Del mismo modo, referenciar claves que no existen bloqueará el inicio salvo que esas referencias concretas sean opcionales.

Cuando usas envFrom, las claves con nombres incompatibles para variables de entorno se omiten y verás un evento con la lista de claves saltadas. Esto evita fallos de arranque pero puede sorprender si esperabas esas varijable.

Ejemplos practicos habituales

Kreirajte i opišite ConfigMap desde ficheros

kubectl create configmap app-config --from-file=.env.local --from-file=.env.remote
kubectl describe configmap app-config

Las claves serán los nombres de los ficheros y sus contenidos, los valores. Inspeccionar el objeto con describe te ayuda a verificar que las claves se han empaquetado como esperabas.

Variables de entorno desde una clave concreta

env:
- name: PORT
  valueFrom:
    configMapKeyRef:
      name: app-config
      key: port

Este patrón mantiene el control fino sobre qué exportas al entorno del processo. Es specialmente útil si el ConfigMap incluye fragmentos multiclave que no quieres exponer íntegros.

Montaje selectivo con items y permisos

volumes:
- name: config-volume
  configMap:
    name: special-config
    items:
    - key: SPECIAL_TYPE
      path: conf/type
      mode: 0640

Proyectar claves en rutas concretas con permisos adecuados reduciraju fuga de información y alinea la estructura con la jerarquía esperada por tu aplicación. Usa defaultMode para un valor por defecto y sobreescríbelo por clave cuando lo necesites.

Rješavanje uobičajenih problema

Variables mal nombradas: revisa que las claves en el ConfigMap sean válidas como nombres de env si usas envFrom. Consulta eventos del Pod para ver si se han descartado por nombres inválidos.

Montajes que ocultan archivos: si tras montar el volumen faltan archivos que venían en la imagen, probablemente el mountPoint los ha eclipsado. Mueve el mountPath a tra ruta o pasa a subPath si solo necesitas una clave.

Actualizaciones que no llegan: con variables de entorno necesitarás reinicios o rollouts; con volúmenes, espera la ventana de sync o fuerza una relectura actualizando una anotación. Si quieres cero espera, evalúa la estrategia direct para detección de cambios.

Errores por tamaño: ako recibes entidad demasiado grande, divide el ConfigMap o cambia la estrategia de configuración. Recuerda el límite de 1 MiB za objekt.

Sigurnost: evita secretos en ConfigMaps; usa Secrets y aplikaciji RBAC. Considera el cifrado en reposo de etcd si tu plataforma lo soporta y tu política lo exige.

Patrones de organización y mantenimiento

Odvojite ConfigMaps za glavne funkcije: baza podataka, API, korisničko sučelje. Esto reduce el blast radius de cambios y facilita la rotación de valores concretos.

Documenta propósito, claves y contacto. Aunque kubectl get te lista objetos, la documentación viva en el repo ayuda a evitar malentendidos. Incluye ejemplos de consumo con env y con volúmenes para cada ConfigMap.

Automatiza validación con linters y tests de humo al aplicar, sobre todo si generas desde Múltiples fuentes. Kombinacija YAML sintakse s provjerama prisutnosti kritičkih klava.

Para despliegues, una estrategia robusta es anotar el Pod Template with un checksum del ConfigMap, de forma que cada cambio provoque un rollout. Esto garantiza que los contenedores que usan env reciban los nuevos valores.

La esencia de los ConfigMaps es sencilla, pero su valor real aparece cuando dominas las variantes de consumo, la política de actualizaciones y el gobierno de cambios. Siguiendo las practicas anteriores, tendrás configuraciones seguras, controladas y listes para escalar.

Povezani postovi: