Creación y uso de ConfigMaps en Kubernetes

Creación y uso de ConfigMaps en Kubernetes

  • ITOps y DevOps
5 min de lectura Actualizado May 5, 2021

Puntos clave: Los ConfigMaps en Kubernetes almacenan datos de configuración como pares clave-valor para aplicaciones. Permite desacoplar configuraciones específicas del entorno de los contenedores, mejorando la portabilidad de la aplicación. Los ConfigMaps pueden crearse a partir de directorios, archivos o archivos de entorno, y se son utilizados en pods como variables de entorno o archivos de configuración, aunque no son adecuados para datos sensibles.

  • Los ConfigMaps permiten una gestión flexible de la configuración de aplicaciones.
  • Pueden crearse usando varios métodos, incluyendo directorios y archivos de entorno.

En programación, utilizamos archivos ambientales o archivos de configuración separados para almacenar configuraciones, configuraciones o variables que son necesarias para ejecutar el programa. En Kubernetes, podemos utilizar ConfigMaps para Lograr la misma funcionalidad. Para entender bien ConfigMap, te deberías tener cierto conocimiento de Kubernetes, pods y la gestión básica de clústeres Kubernetes.

¿Qué es un ConfigMap?

Un ConfigMap están un objeto API de Kubernetes que puede usarse para almacenar datos como pares clave-valor. Los pods de Kubernetes pueden utilizar los ConfigMaps creados como:

  • Archivo de configuración
  • Variable de entorno
  • Argumento de línea de comandos

ConfigMaps ofrece la capacidad de Haz aplicaciones portátiles desacoplando configuraciones específicas del entorno de los contenedores. Es importante destacar que los ConfigMaps no son adecuados para almacenar datos confidenciales. No proporcionan ningún tipo de cifrado, y todos los datos que contienen son visibles para cualquiera que tenga acceso al archivo. (Kubernetes proporciona secretos que pueden usarse para almacenar información sensible.) Otra consideración de ConfigMaps están el tamaño del archivo, ya que estamos intentando almacenar archivos de configuración de aplicaciones limitados a 1MB. Para conjuntos de datos más grandes, es mejor utilizar montajes de archivos, bases de datos o servicios de archivos separados.

Ejemplo de ConfigMap

    kind: ConfigMap
apiVersion: v1
metadata:
  name: example-configmap
  namespace: default
data:
  # Configuration Values are stored as key-value pairs
  system.data.name: "app-name"
  system.data.url: "https://app-name.com"
  system.data.type_one: "app-type-xxx"
  system.data.value: "3"
  # File like Keys
  system.interface.properties: |
    ui.type=2
    ui.color1=red
    ui.color2=green

En un ConfigMap, la información requerida puede almacenarse en el campo de datos. Podemos almacenar valores de dos maneras:

  • Como propiedades individuales de pares de claves
  • En un formato granular donde son fragmentos de un formato de configuración. (archivo como claves)

Cómo Crea ConfigMaps

Los ConfigMaps y los pods van de la mano, ya que los ConfigMaps pueden usarse como variables de entorno e información de configuración en un pod Kubernetes. En esta sección, veremos cómo Crea ConfigMaps. Aquí son algunas notas antes de Obtén empezar:

  • Utilizaremos un entorno Windows con el subsistema Windows para Linux (Ubuntu) como entorno terminal.
  • El escritorio Docker se configurará para facilitar un entorno Kubernetes.
  • Utilizaremos los archivos de ejemplo oficiales proporcionados por Kubernetes para demostrar la funcionalidad de ConfigMap.

Creación de ConfigMaps a partir de directorios

Podemos utilizar el siguiente comando para Crea directorios ConfigMap.

    kubectl create configmap

Buscará archivos apropiados (archivos normales) dentro de un directorio específico que puedan usarse para Crea un ConfigMap ignorando cualquier otro tipo de archivo (archivos ocultos, subdirectorios, enlaces simbólicos, etc.) Primero, vamos a Crear un directorio usando este comando:

    mkdir configmap-example
Mando

Luego descargaremos los archivos de ejemplo necesarios en el directorio. Estos archivos se usarán para generar el ConfigMap.

    wget https://kubernetes.io/examples/configmap/game.properties -O configmap-example/game.properties

wget https://kubernetes.io/examples/configmap/ui.properties -O configmap-example/ui.properties
CMD

Ahora echemos un vistazo al contenido del archivo usando los siguientes comandos.

    cat game.properties
cat ui.properties
Propiedades de los juegos de gatos

Al crear ConfigMaps usando directorios, el factor más importante están que te debas Define correctamente los pares clave-valor dentro de cada archivo. Después de eso, vamos a Crea el ConfigMap usando el comando Crea configmap.

    kubectl create configmap game-config-example --from-file=configmap-example/
ConfigMap

Este comando empaquetará los archivos dentro del directorio especificado y Crea un archivo ConfigMap. Podemos utilizar el comando kubectl describe para ver el archivo ConfigMap.

    kubectl describe configmaps game-config-example
Ejemplo de configuración de juego

Podemos Obtén el ConfigMap en formato YAML usando el siguiente comando.

    kubectl get configmaps game-config-example -o yaml
YAML

Creación de ConfigMaps a partir de archivos

De la misma manera que creamos ConfigMaps usando directorios, también podemos Crea ConfigMaps usando archivos usando el parámetro --from-file para apuntar a un solo archivo en el comando kubectl Crea configmap. Así que, vamos a Crea un ConfigMap usando el archivo game.properties como se muestra a continuación.

    kubectl create configmap game-config-example-2 --from-file=configmap-example/game.properties
kubect
    kubectl describe configmap game-config-example-2
Ejemplo de configuración del juego 2

Podemos Define múltiples argumentos de archivo varias veces para Crea un único archivo ConfigMap usando varios archivos diferentes.

    kubectl create configmap game-config-example-2 --from-file=c

Creación de ConfigMaps a partir de un archivo de entorno

Kubernetes permite a los usuarios Crea ConfigMaps usando archivos env. Podemos utilizar el argumento --from-env-file al definir un archivo env. Este argumento también puede usarse varias veces para Define múltiples archivos env. Al usar archivos env, cada línea debe adherirse a la

Entorno del juego
kubectl
env
Nombre clave
Ejemplo clave
Datos de ejemplo
Ejemplo de Liteurl
Valores de ejemplo
Propiedades básicas
Configmap básico
Pod de ejemplo
Registros de Kubectl
Aplicación por defecto
Referencia de Clave del Mapa de Configuración
Creación de cápsulas
Tipo de aplicación

= format. Las líneas y comentarios vacíos serán ignorados, mientras que las comillas formarán parte de ConfigMap. catmap configmap-example/game-env-file.properties kubectl Crea configmap game-config-env-file-example --from-env-file=configmap-example/game-env-file.properties kubectl Obtén configmap game-config-env-file-example -o yaml Crear ConfigMap desde un archivo con una clave predefinida Al crear un ConfigMap, podemos utilizar el siguiente formato en el argumento --from-file para Define un nombre de clave que sobrescribirá el nombre del archivo usado en la sección de datos. El siguiente ejemplo demuestra cómo Define una clave al crear un ConfigMap. kubectl Crea ConfigMap game-config-key-example --from-file=game-key-example-data=configmap-example/game.properties kubectl Obtén configmap game-config-key-example -o yaml Creando ConfigMaps a partir de valores Otra forma de Crea ConfigMaps están proporcionar valores literales como parámetros en el comando Crea configmap. Para esto, podemos utilizar el argumento --from-literal para pasar cada par de claves. Esto están especialmente útil cuando necesitamos Crea ConfigMaps sobre la marcha. kubectl Crea configmap, config-example-values --from-literal=example.value=one --from-literal=example-type=2 --from-literal=example.url="http://example.com" kubectl Obtén configmap, config-example-values -o yaml Utilizando ConfigMaps en pods. Ahora tenemos una comprensión básica de cómo Crea ConfigMaps. El siguiente paso están utiliza los ConfigMaps creados para crear un Pod. En esta sección, Crea un ConfigMap sencillo y lo utiliza al crear un pod en Kubernetes. Como primer paso, Crea un archivo llamado "app-basic.properties" e incluyamos dos pairs. app-basic.properties system.type="TESTING CONFIGMAP" system.number=12345 Vamos a Crea un ConfigMap llamado "app-basic-configmap" usando el archivo anterior y la opción --from-file. kubectl Crea configmap app-basic-configmap --from-file=configmap-example/app-basic.properties kubectl Obtén configmap app-basic-configmap -o yaml Finalmente, vamos a Crea un Pod que hace referencia al ConfigMap recién creado. Usaremos el siguiente archivo YAML para Crea el Pod. example-pod.yaml apiVersión: v1 tipo: Metadatos del Pod: name: configmap-example-pod spec: containers: - name: configmap-example-busybox image: k8s.gcr.io/busybox comando: [ "/bin/sh", "-c", "env" ] envFrom: # Load the Complete ConfigMap - configMapRef: name: app-basic-configmap restartPolicy: Never As te can Ve from the previous example, We son Voy a cargar el ConfigMap completo que hemos creado en el Kubernetes Pod. kubectl Crea -f example-pod.yaml kubectl Obtén pods kubectl logs configmap-example-pod | grep system.number El resultado anterior indica que el ConfigMap "app-basic-configmap" se cargó correctamente al crear el Kubernetes Pod. Mapeando claves de ConfigMaps a pods Otra forma de utilizar ConfigMaps están mapear directamente los valores de ConfigMaps a las variables ambientales específicas del Pod. En esta sección, Crea dos archivos de configMaps sencillos manualmente y cargaremos y mapearemos los valores directamente al Kubernetes Pod. Allí, Define los ConfigMaps como archivos YAML y luego utilizamos el comando kubectl Crea para generar los ConfigMaps. application-defaults.yaml apiVersion: v1 tipo: metadatos ConfigMap: name: application-configs namespace: default data: app.value: "45000" app.type: test-application app.ui: web application-logs.yaml apiVersion: v1 type: ConfigMap metadata: name: application-log-configs namespace: default data: log_level: ADVERTENCIA log_type: TEXT kubectl Crea -f application-defaults.yaml kubectl Crea -f application-logs.yaml example-pod.yaml apiVersion: v1 type: Pod metadata: name: configmap-example-pod spec: containers: - name: configmap-example-busybox image: k8s.gcr.io/busybox comando: [ "/bin/sh", "-c", "env" ] env: - name: APPLICATION_TYPE valueFrom: configMapKeyRef: name: application-configs key: app.type - name: APPLICATION_UI_TYPE valueFrom: configMapKeyRef: name: application-configs key: app.ui - name: LOG_LEVEL valueFrom: configMapKeyRef: name: application-log-configs key: log_level restartPolicy: Nunca En esta configuración, son mapeando variables ambientales a valores dentro de cada ConfigMap. A continuación están la estructura básica para mapear un valor. En la sección de entorno del archivo YAML, Define un nombre de variable y referenciamos el ConfigMap mediante el elemento "configMapKeyRef" usando el "valueFrom." Aquí proporcionaremos: El nombre del ConfigMap La clave desde donde debe asignarse el valor A continuación, Crea el Pod usando el comando kubectl Crea como se muestra abajo. kubectl Crea -f example-pod.yaml kubectl Obtén pods Tras crear con éxito el Pod, podemos explorar las variables de entorno como se muestra a continuación. kubectl logs configmap-example-pod | grep APPLICATION_TYPE kubectl logs configmap-example-pod | grep APPLICATION_UI_TYPE kubectl logs configmap-example-pod | grep LOG_LEVEL Los resultados anteriores indican que los valores se mapearon correctamente a variables de entorno con nombres personalizados dentro del pod de Kubernetes. ConfigMap definió variables de entorno en comandos pod Otra forma de utilizar variables de entorno definidas por ConfigMap están usándolas en comandos Pod. Esto se puede hacer tanto para los elementos de comandos como para los args en un archivo YAML usando la sintaxis de sustitución $(VARIABLE_NAME) Kubernetes. El siguiente bloque de código demuestra cómo utiliza estas variables de entorno en el elemento de comando usando example-pod.yaml como base. apiVersion: v1 tipo: metadatos de pod: name: configmap-example-pod spec: containers: - name: configmap-example-busybox image: k8s.gcr.io/busybox comando: [ "/bin/echo", "Application Type $(APPLICATION_TYPE) - $(APPLICATION_UI_TYPE)" ] env: - name: APPLICATION_TYPE valueFrom: configMapKeyRef: name: application-configs key: app.type - nombre: APPLICATION_UI_TYPE valueFrom: configMapKeyRef: name: application-configs key: app.ui - name: LOG_LEVEL valueFrom: configMapKeyRef: name: application-log-configs key: log_level restartPolicy: Nunca En este caso, las variables de entorno son identificadas en la ejecución del comando (en el contenedor Comienza), y se mostrarán directamente en el terminal. Añadir datos de ConfigMap a un volumen Los usuarios pueden consumir ConfigMaps montando los datos de ConfigMap en un volumen Kubernetes. En el siguiente ejemplo, son montamos los datos de ConfigMap "application-log-config" en un volumen llamado "config-volume" montado en "/etc/config" en el contenedor. Luego hemos configurado un comando que listaría todos los archivos dentro del directorio /etc/config. apiVersion: v1 tipo: Metadatos del pod: nombre: configmap-ejemplo-volume-pod especificación: contenedores: - nombre: configmap-volume-ejemplo-busybox imagen: k8s.gcr.io/busybox comando: [ "/bin/sh", "-c", "ls /etc/config/" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: application-log-configs restartPolicy: Nunca montados ConfigMaps son actualizados automáticamente. Kubelt comprobará periódicamente si el ConfigMap montado están actualizado y actualizará el montaje en consecuencia. Sin embargo, este mecanismo de actualización automática no se aplica a volúmenes mapeados como un volumen SubPath. Con esto concluye este tutorial. Explora más temas de Kubernetes en el menú de la derecha. Los ConfigMaps son esenciales para los clústeres K8s En este artículo, hemos aprendido sobre los ConfigMaps de Kubernetes, incluyendo múltiples formas de Crea ConfigMaps y cómo utilizarlos en un Pod Kubernetes. Los ConfigMaps son una parte esencial de cualquier clúster Kubernetes, proporcionando un método robusto para almacenar datos simples y frecuentes de aplicaciones o contenedores. Lecturas relacionadas BMC DevOps Blog Guía Kubernetes, con 20+ tutoriales Certificaciones Kubernetes: Cómo y por qué Obtén la Metodología de la App de 12 Factores Explicaba Cómo y Por qué convertirse en una fábrica de software

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.