- ConfigMaps separan la configuración del codigo y permiten cambios dinámicos sin reconstruir image
- Cuatro consumos clave: env, args, ficheros en volúmenes y lectura preko API-ja con suscripción i cambios
- Actualización automática en volúmenes y reinicio necesario para env; límite de 1 MiB y sin cifrado por defecto
- Buenas prácticas: versionado, Kustomize con hash, RBAC, evitar secretos i usar inmutables cuando proceda
Ako koristite Kubernetes i necesitas separar la configuración del codigo, 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, currentización automática al montarlos como volumen, cómo afectan los cambios a varijabli de entorno, buenas prácticas 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
Un ConfigMap je predmet API-ja Kubernetesa za almacenar datos de configuración no confidenciales i 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 kao varijable de entorno, argumentos de arranque, ficheros montados i volúmenes ili 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 ovu aplikaciju sa varijablom DATABASE_HOST. Lokalni 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 ne debe superar 1 MiB. Necesitas más, podijelite konfiguraciju i različite ConfigMaps za korištenje van eksterne usluge, bez volumena ili baze podataka za konfiguraciju.

Objeto ConfigMap: campos, nombres y claves válidas
A diferencia de la mayoría de objetos con campo spec, ConfigMap definiše su kontenido en los campos data y binaryData. data espera texto UTF‑8; binaryData prihvaća contenido binario codificado en base64, idealno za formate bez UTF‑8.
Naziv ConfigMap ima DNS poddominio valjan i vaše klavese bajo podataka o binaryData deben contener karakteres alfanuméricos, guion, guion bajo ili punto. Las claves de data no pueden solaparse con las de binaryData, así que organizalas con criterio para evitar konfliktos.
Desde Kubernetes v1.19 je kreirao ConfigMaps inmutables añadiendo el campo immutable: true. La inmutabilidad, estable desde v1.21, evita cambios incidentales y reducira 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
Ako pod koristite ConfigMap, morate koristiti prostor imena. Hay cuatro maneras principales de consumirlos según lo que necesite tu aplicación.
- Podarite vrijednosti i naredbu u args del contenedor, referentne podatke u ConfigMap. Útil para binarios que leen configuración solo por argumentos.
- Exponer rastavlja clave-valor kao varijable de entorno dentro del contenedor. La opción más común para apps que leen del entorno.
- Montar el ConfigMap kao ficheros i volumen solo predavanja. Perfecto para aplicaciones que esperan archivos de configuración.
- Saznajte u ConfigMap API-ju za svoj kod. Dozvolite suscribirte a cambios y reaccionar en caliente, uključujući desde otros namespaces i 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 varijabli 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.
Ovo je kompatibilno ovisno o configMapAndSecretChangeDetectionStrategy, za koji se gleda, bazira na TTL-u ili direktno na API serveru. El retardo total será la suma del periodo de sync del kubelet más la propagación de caché; por defecto, 1 minut de sync y 1 minuto de TTL pueden suponer hasta 2 minute de latencia.
Umjesto toga, las varijable de entorno derivadas de ConfigMaps no se updateizan automáticamente. Necesitarás reiniciar el Pod o hacer un rollout para que el processo recoja los nuevos valores. Un truco común za forzar una recarga en Deployments es modificar un annotación del Pod Template, provocando un nuevo ReplicaSet.
Kreiraj ConfigMaps sa kubectl-om
Puedes crearlos con kubectl create configmap, ili mediante generadores de Kustomize en kustomization.yaml. kubectl prima različite fuentes: direktorije, ficheros individuales, literales y env-files.
Iz 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 podatke, sa originalnim tekstom. Es la forma más cómoda de llevar ficheros de configuración tal cual al clúster.
Od betonskih žica
También puedes pasar varios –repetidos iz datoteke para combinar 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=path. 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 literalnih vrijednosti
Con –from-literal definira pares clave-valor en línea, repitiendo la opción las veces necesarias. Ideal 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
–iz-env-datoteke stvara klavese a partir de un archivo de varijabli de entorno al estilo .env. Desde v1.23 puedes specific varias veces –from-env-file para combinar fuentes.
kubectl create configmap my-config --from-env-file=app.env --from-env-file=extra.env
Generiranje ConfigMaps sa prilagođavanjem
Prilagodite deklariranje generadores i kustomization.yaml za proizvođač ConfigMaps za detalje ili literale. 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 varijable za unos
Tienes dos patrones principales. Con envFrom importas todas las claves del ConfigMap kao varijable del contenedor. Rápido y cómodo cuando la aplicación espera muchas varijabli.
envFrom:
- configMapRef:
name: my-config
Si solo quieres 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 varijabli de entorno admiten un conjunto restringido de caracteres. Una clave del ConfigMap nije validna za una env var, se omite y se registrará i evento de tipo InvalidEnvironmentVariableNames, niti Pod koji se aranžira.
Montar ConfigMaps kao ficheros
Za eksponer datos kao arhivu, añade el volume i spec.volumes con configMap.name y monta ese volume con volumeMounts i cada contenedor que lo necesite. Cada clave se proyectará como un archivo bajo el 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 ili 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 volume. Tenlo en cuenta para no perder archivos necesarios en tiempo de ejecución.
Tekst se izlaže u UTF‑8; para otras codificaciones o binarios, usa binaryData. Al currentizar el ConfigMap, el contenido proyectado se refrescará con el retardo antes mencionado. Puedes acelerar la actualización cambiando una anotación del Pod para forzar relectura.
Opcionalne reference, prostori imena i ograničenja
Reference ConfigMap puede marcarse kao opciono. Si el ConfigMap ne postoji, el volumen se montira vacío y la varijabla 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čnim pods gestionados directamente por kubelet.
Nepromjenjive vrijednosti ConfigMaps-a
Funcionalidad de ConfigMaps inmutables aporta dos ventajas claras en clústeres con muchos montajes: protege frente a cambios indeseados que causen caídas y smanjiti carga del API server al cerrar satovi. Una vez nepromjenjivo je istinito, nema podrás uređivača podataka 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 je čuvar i etcd u vezi sa objektima 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 objeto completo debe ser menor a 1 MiB. Superarlo generará un error de entidad demasiado grande. Si te acercas a ese tech, reparte la configuración en varios ConfigMaps ili cambia de enfoque i volúmenes ili servicios servicios.
Uporedna brzina: ConfigMaps, varijable de entorno y Secrets
Varias opciones resuelven la configuración. ConfigMaps centralizan datos no senssibles 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 okruženja: sencillas, pero poco prácticas si hay muchas y no seaktualizan en caliente.
- Secrets: datos sensibles; separan credenciales de la configuración normal, requieren tratamiento específico.
Dobre prakse i sigurnost
Mantén Versiones of tus ConfigMaps en git y usa nombres deskriptivos ili sufijos de version. 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 para limitar accesos. 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 primjer, uloga solo 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 comodo y aplica en vivo, pero en producción es preferible flujo declarativo con apply y revision por PR. Ako koristimo varijable, planea el rollout al editor el ConfigMap para que los Pods recojan los nuevos valores.
Patrones avanzados y escenarios reales
Višestruki sadržaji: kreiranje posebnih ConfigMaps-a za razvoj, postavljanje i prod. Así evitas mezclar ajustes y smanjuje greške na svim verzijama promotera.
Copiar entre clústeres: al ser manifiestos, puedes moverlos y aplicarlos con kubectl donde lo necesites. Ovo je DR-ova agiliza migracija..
Primjena za reakciju na 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 ili volúmenes. Za renovación cuando cambie un ConfigMap consumido como env, añade una anotación checksum ili incrementa un etiqueta en el Pod Template, lo que desencadenará un nuevo ReplicaSet.
Detalles finos de volúmenes proyectados
Si el Pod definiše 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 je útil za montažu u única clave u montaru 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 volume. Planifica ubicaciones de montaje que no pisen artefactos esenciales de la imagen.
Actualización y detección de cambios en detalle
Kubelet odluči kako detektor cambios según configMapAndSecretChangeDetectionStrategy. watch es el modo por defecto, TTL mantiene una caché con caducidad y direktni konzultacija 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.
Restriciones y compportamiento con errores
Reference i ConfigMap ne postoje u marcarlo kao opcionalni, 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 varijabli 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 prácticos habituales
Kreirajte i opišite ConfigMap za detalje
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. Inspectionar 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. Ovo je posebno za ConfigMap koji uključuje fragmente multiclave-a koji ne zahtijeva integrirani eksponer.
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 smanjuju 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
Varijable mal nombradas: revisa que las claves en el ConfigMap sean válidas como nombres de env i usas envFrom. Consulta eventos del Pod para ver si se han descartado por nombres inválidos.
Montajes que ocultan archivos: si tras montar el volume faltan archivos que venían en la imagen, problemente el mountPoint los ha eclipsado. Mueve el mountPath a otra ruta o pasa a subPath si solo necesitas una clave.
Actualizaciones que no llegan: con varijabli 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.
Greške por tamaño: si recibes entidad demasiado grande, divide el ConfigMap o cambia la estrategia de configuración. Recuerda el límite de 1 MiB po objektu.
Seguridad: evita secretos en ConfigMaps; usa Secrets i aplikacija 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 funkcionalnu dominaciju: baza podataka, API, UI. Esto smanjiti radijus eksplozije 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. Uključi primjere potrošača sa zavistom i volumenom za ConfigMap.
Automatizacija validación con linters y tests de humo al aplicar, sobre todo si generas desde multiples fuentes. Kombinacija pruebas de sintaxis YAML con checks de presencia de claves críticas.
Za despliegues, una estrategia robusta es annotar el Pod Template con 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 sencila, pero su valor real aparece cuando dominas las variantes de consumo, la política de actualizaciones y el gobierno de cambios. Siguiendo las prácticas anteriores, tendrás configuraciones seguras, controladas y listas para escalar.
