Mapas de configuración en Kubernetes
Un ConfigMap se utiliza para almacenar datos no confidenciales. Los datos están en pares clave-valor. Los pods pueden consumir ConfigMaps como argumentos de línea de comandos, variables de entorno o como archivos de configuración en un volumen.
Utilizando un ConfigMap podemos desacoplar la configuración específica del entorno de las imágenes del contenedor. Esto puede ayudarnos a crear nuestras aplicaciones portátiles. El ConfigMap no proporciona encriptación, por lo que siempre se recomienda no almacenar información confidencial en el Configmap. En lugar de utilizar Config, se pueden utilizar secretos para almacenar información confidencial o claves de seguridad o contraseñas.
Existen las siguientes formas diferentes de utilizar los datos de ConfigMap dentro de un Pod:
- Argumentos de la línea de comandos de un contenedor
- Variables de entorno de un contenedor
- Añadir un archivo en volumen de sólo lectura.
- Escribir código para ejecutar dentro del Pod que utilice la API de Kubernetes para leer un ConfigMap.
Para saber más sobre Configmap, visita la página oficial de Kubernetes aquí.
En este artículo, veremos dos ejemplos para acceder a los datos de los configmaps. En un ejemplo utilizaremos los configmaps como variables de entorno en el comando pod y en el otro rellenaremos un volumen con datos almacenados en un ConfigMap.
Requisitos previos
- Clúster Kubernetes con al menos 1 nodo trabajador.
Si quieres aprender a crear un Clúster Kubernetes, haz clicaquí. Esta guía te ayudará a crear un clúster Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 de AWS Ubuntu 18.04.
¿Qué vamos a hacer?
- Crear un Configmap y acceder a sus datos
Crea un Configmap y accede a sus datos.
Crea un archivo con la siguiente definición de configmap.
vim my-configmap-demo1.yaml
apiVersion: v1 kind: ConfigMap metadata: name: my-configmap-demo1 data: variable_one: one variable_two: two
Configmap se puede crear con el siguiente comando.
kubectl create -f my-configmap-demo1.yaml
Obtén los datos del configmap que hemos creado.
kubectl get configmaps
kubectl describe configmaps my-configmap-demo1
En la captura de pantalla anterior, puedes ver que tenemos nuestros datos «variable_uno» y «variable_dos» disponibles en el config map que hemos creado.
Ahora, se puede acceder a este mapa de configuración en el Pod.
Para acceder a los datos del configmap como variables de entorno en los comandos del pod, vamos a crear un archivo de definición del pod con el siguiente contenido.
vim my-pod-with-configmaps-as-environment-variables.yml
apiVersion: v1 kind: Pod metadata: name: my-pod-configmap-demo spec: containers: - name: my-container-configmap-demo image: k8s.gcr.io/busybox command: [ "/bin/sh", "-c", "echo $(variable_one_env) $(variable_two_env)" ] env: - name: variable_one_env valueFrom: configMapKeyRef: name: my-configmap-demo1 key: variable_one - name: variable_two_env valueFrom: configMapKeyRef: name: my-configmap-demo1 key: variable_two restartPolicy: Never
Ahora, estamos preparados para crear un pod que pueda acceder a los datos del configmap como variables de entorno.
kubectl get podss
kubectl create -f my-pod-with-configmaps-as-environment-variables.yml
kubectl get pod
Dado que el pod ha completado con éxito su ejecución y ha existido, ya que no hay ningún proceso que pueda mantener los pods vivos, podemos comprobar sus registros para ver si configmap estaba disponible en el pod o no. Para comprobarlo, hemos utilizado el comando echo en el pod que imprimirá los valores de las variables.
kubectl get pods
kubectl logs my-pod-configmap-demo
En la captura de pantalla anterior, se puede ver que los datos de configmap estaban accesibles en el pod y ha impreso los valores utilizando el comando echo como «uno» y «dos».
Los datos del configmap también están disponibles como archivos en los volúmenes.
Para acceder a los datos del configmap a través de un volumen, crea una definición de pod con el siguiente contenido.
vim my-pod-with-configmaps-added-to-volume.yml
apiVersion: v1 kind: Pod metadata: name: my-pod-configmap-demo2 spec: containers: - name: my-container-configmap-demo2 image: k8s.gcr.io/busybox command: [ "/bin/sh", "-c", "ls /etc/myconfig/" ] volumeMounts: - name: my-config-volume mountPath: /etc/myconfig volumes: - name: my-config-volume configMap: name: my-configmap-demo1 restartPolicy: Never
Ahora vamos a crear un pod que pueda tener los datos del configmap disponibles como archivos del volumen «mi-config-volumen». Estos datos de configmap estarán disponibles en el directorio «/etc/myconfig» del pod.
kubectl get pods
kubectl create -f my-pod-with-configmaps-added-to-volume.yml
kubectl get pods
Esta vez también, el pod ha salido con éxito ya que no hay ningún proceso que mantenga vivo el pod.
Pero, hemos utilizado el comando «ls /etc/myconfig» que listará el contenido del directorio «/etc/myconfig».
kubectl get pods
En los registros podemos ver que los datos de configmap estaban disponibles como archivos en «/etc/myconfig»
kubectl logs my-pod-configmap-demo2
En la captura de pantalla anterior, puedes ver que los datos del configmap estaban disponibles en el pod como archivos «variable_one» y «variable_two».
Conclusión
En este artículo hemos aprendido a crear un configmap y a acceder a él de dos maneras. Hemos visto los pasos para acceder a los datos del configmap como variables de entorno al comando pod y archivos en volumen en el pod.