Descripción de los objetos ConfigMap de Kubernetes
En el repositorio de aplicaciones, hay un archivo de configuración cargado en el archivo index.html
para permitir que las variables de entorno se actualicen sin necesidad de una compilación de imagen completa.
El archivo de configuración no contiene información confidencial, solo debe cargarse junto con el contenedor. ¿Cómo se puede montar el archivo en el contenedor sin necesidad de cifrado o codificación?
Descripción de los objetos ConfigMap
Los objetos ConfigMap son equivalentes a los objetos Secret. Mientras que los objetos Secret ofrecen una forma para almacenar y proporcionar datos confidenciales, los objetos ConfigMap proporcionan una forma de almacenar datos no confidenciales mediante la misma estructura de clave-valor que los objetos Secret. Los objetos ConfigMap permiten desacoplar las configuraciones de las imágenes de contenedor, por lo que esas imágenes permanecerán sin estado.
Se crea un objeto ConfigMap para almacenar los datos de configuración de forma independiente al código de la aplicación y cargarlos de forma similar a cómo se cargan los objetos Secret en el pod. Solo puede hacer referencia a objetos ConfigMap mediante una variable de entorno o montándolos como un archivo en un volumen dentro del contenedor.
Los objetos ConfigMap tienen una limitación de tamaño de datos: en uno se puede almacenar hasta 1 MiB de datos. La limitación de tamaño le ayudará a evitar archivos de configuración grandes y complejos al dividir configuraciones grandes en fragmentos más pequeños. Con los objetos ConfigMap es posible montar en los contenedores solo los archivos de configuración necesarios, lo que permite una mayor granularidad.
Como los secretos, los objetos ConfigMap dependen del espacio de nombres. Solo se puede acceder a un objeto ConfigMap y montarlo mediante los contenedores presentes en el mismo espacio de nombres en el que se haya creado.
Los objetos ConfigMap también se usan con otras herramientas, como Helm y los operadores Kubernetes, para almacenar y leer estados.
Actualizaciones de ConfigMap
Todos los objetos ConfigMap que se montan como volúmenes dentro de un pod se actualizan de forma automática cuando se cambia su valor. Es posible que este cambio no se produzca inmediatamente debido a la configuración de Kubelet, pero se produce automáticamente, por lo que no es necesario reiniciar el pod.
Cuando un objeto ConfigMap está enlazado a variables de entorno, no se actualiza automáticamente. En estos casos, será necesario reiniciar el pod para que los cambios surtan efecto.
Creación y uso de objetos ConfigMap
Es posible crear un objeto ConfigMap con el mismo enfoque que un objeto Secret: un archivo YAML. La especificación del objeto ConfigMap es la siguiente:
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-name
namespace: default
data:
key-name: "value as key"
key.name: |
multi line
property, called "file-like" values
Puede hacer referencia a los objetos ConfigMap por una o varias claves en la especificación de un pod o una implementación, tal y como se muestra en el siguiente ejemplo:
apiVersion: v1
kind: Pod
metadata:
name: configmap-as-env
namespace: default
spec:
containers:
- name: configmap-env
image: alpine
command: ["sleep", "3600"]
env:
- name: ENVIRONMENT_VARIABLE_NAME
valueFrom:
configMapKeyRef:
name: configmap-name
key: key-name
También es posible montarlos como archivos dentro del pod mediante volúmenes de solo lectura, tal y como se muestra en el ejemplo siguiente:
apiVersion: v1
kind: Pod
metadata:
name: configmap-as-env
namespace: default
spec:
containers:
- name: configmap-env
image: alpine
command: ["sleep", "3600"]
volumeMounts:
- name: volume-name
mountPath: "/path/to/mount"
readOnly: true
volumes:
- name: volume-name
configMap:
name: configmap-name
items:
- key: "key-name"
path: "path/to/mount/the/key"