Skip to content

Latest commit

 

History

History
94 lines (78 loc) · 3.63 KB

configmaps.md

File metadata and controls

94 lines (78 loc) · 3.63 KB

Despliegues parametrizados: ConfigMaps

En el apartado anterior hemos estudiado como podemos definir las variables de entorno de los contenedores que vamos a desplegar. Sin embargo, la solución que presentamos puede tener alguna limitación:

  • Los valores de las variables de entorno están escritos directamente en el fichero yaml. Estos ficheros yaml suelen estar en repositorios git y lógicamente no es el sitio más adecuado para ubicarlos.
  • Por otro lado, escribiendo los valores de las variables de entorno directamente en los ficheros, hacemos que estos ficheros no sean reutilizables en otros despliegues y que el procedimiento de cambiar las variables sea tedioso y propenso a errores, porque hay que hacerlo en varios sitios.

Para solucionar estas limitaciones, podemos usar un nuevo recurso de Kubernetes llamado ConfigMap.

Configuración de aplicaciones usando ConfigMaps

ConfigMap permite definir un diccionario (clave,valor) para guardar información que se puede utilizar para configurar una aplicación.

Aunque hay distintas formas de indicar el conjunto de claves-valor de nuestro ConfigMap, en este caso vamos a usar literales, por ejemplo:

kubectl create cm mariadb --from-literal=root_password=my-password \
                          --from-literal=mysql_usuario=usuario     \
                          --from-literal=mysql_password=password-user \
                          --from-literal=basededatos=test

En el ejemplo anteriore, hemos creado un ConfigMap llamado mariadb con cuatro pares clave-valor. Para ver los ConfigMap que tenemos creados, podemos utilizar:

kubectl get cm

Y para ver los detalles del mismo:

kubectl describe cm mariadb

Una vez que creado el ConfigMap se puede crear un despliegue donde las variables de entorno se inicializan con los valores guardados en el ConfigMap. Por ejemplo, un despliegue de una base de datos lo podemos encontrar en el fichero mariadb-deployment-configmap.yaml y el fragmento donde definimos las variables de entorno quedaría:

...
    spec:
      containers:
        - name: contenedor-mariadb
          image: mariadb
          ports:
            - containerPort: 3306
              name: db-port
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: mariadb
                  key: root_password
            - name: MYSQL_USER
              valueFrom:
                configMapKeyRef:
                  name: mariadb
                  key: mysql_usuario
            - name: MYSQL_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: mariadb
                  key: mysql_password
            - name: MYSQL_DATABASE
              valueFrom:
                configMapKeyRef:
                  name: mariadb
                  key: basededatos

Observamos como al indicar las variables de entorno (sección env) seguimos indicado el nombre (name) pero el valor se indica con una clave de un ConfigMap (valueFrom: - configMapKeyRef:), para ello se indica el nombre del ConfigMap (name) y el valor que tiene una determinada clave (key). De esta manera, no guardamos en los ficheros yaml los valores específicos de las variables de entorno, y además, estos valores se pueden reutilizar para otros despliegues, por ejemplo, al desplegar un CMS indicar los mismos valores para las credenciales de acceso a la base de datos.

Vídeo

https://www.youtube.com/watch?v=QVC9TsHpXvc