Despliegue de aplicaciones usando variables de entorno en Kubernetes

Índice

Para usar variables de entorno en el despliegue de aplicaciones en Kubernetes se usan recursos como los ConfigMap o los Secrets.

Indicar el servidor de backend desde una variable de entorno

Para indicar las variables de entorno para configurar la aplicación se usa el comando create cm.

kubectl create cm temperaturas --from-literal=TEMP_SERVER=servidor-temperaturas:5000

Con este ConfigMap se puede indicar una variable de entorno en la creación del despliegue.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: temperaturas-frontend
  labels:
    app: temperaturas
    tier: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: temperaturas
      tier: frontend
  template:
    metadata:
      labels:
        app: temperaturas
        tier: frontend
    spec:
      containers:
      - name: contenedor-temperaturas
        image: iesgn/temperaturas_frontend
        ports:
          - name: http-server
            containerPort: 3000
        env:
	  - name: TEMP_SERVER
	    valueFrom:
	      configMapKeyRef:
	        name: temperaturas
	        key: TEMP_SERVER

Usar ConfigMaps y Secrets para indicar variables de entorno

En este caso se despliega la aplicación NextCloud en Kubernetes. Esta aplicación necesita conocer varias informaciones que se le pueden pasar en forma de variables de entorno como el nombre de usuario de la base de datos, el nombre de la base de datos, el nombre del host y las contraseñas. Los valores de estas variables se definen en un ConfigMap y en un Secret.

kubectl create cm nextcloud-datos --from-literal=bd_user=user_nextcloud \
                                  --from-literal=bd_dbname=nextcloud \
                                  --from-literal=bd_host=mariadb

kubectl create secret generic nextcloud-passwords --from-literal=bd_password=password1234 \
                                                  --from-literal=bd_rootpassword=root1234

A estas variables se apunta en la definición del despliegue de la aplicación.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextcloud
  labels:
    app: nextcloud
    tier: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nextcloud
      tier: frontend
  template:
    metadata:
      labels:
        app: nextcloud
        tier: frontend
    spec:
      containers:
      - name: contenedor-nextcloud
        image: nextcloud
        ports:
          - name: nextcloud-port
            containerPort: 80
        env:
          - name: MYSQL_USER
            valueFrom:
              configMapKeyRef:
                name: nextcloud-datos
                key: bd_user
          - name: MYSQL_DATABASE
            valueFrom:
              configMapKeyRef:
                name: nextcloud-datos
                key: bd_dbname
          - name: MYSQL_PASSWORD
            valueFrom:
              secretKeyRef:
                name: nextcloud-passwords
                key: bd_password
          - name: MYSQL_HOST
            valueFrom:
              configMapKeyRef:
                name: nextcloud-datos
                key: bd_host

Y también de la base de datos.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mariadb
  labels:
    app: mariadb
    tier: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mariadb
      tier: backend
  template:
    metadata:
      labels:
        app: mariadb
        tier: backend
    spec:
      containers:
        - name: contenedor-mariadb
          image: mariadb:10.5
          ports:
            - name: mariadb-server
              containerPort: 3306
          env:
            - name: MARIADB_USER
              valueFrom:
                configMapKeyRef:
                  name: nextcloud-datos
                  key: bd_user
            - name: MARIADB_DATABASE
              valueFrom:
                configMapKeyRef:
                  name: nextcloud-datos
                  key: bd_dbname
            - name: MARIADB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: nextcloud-passwords
                  key: bd_password
            - name: MARIADB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: nextcloud-passwords
                  key: bd_rootpassword
comments powered by Disqus

Relacionados

Configuración del protocolo HTTPS para el acceso a una aplicación web

Para usar HTTPS en una aplicación web es necesario configurar el protocolo HTTPS en el servidor web en el que se aloja. En este post se recoge una breve guía con los pasos a seguir.

Leer

Así funciona IPv6: configuración en router Linux y Cisco

IPv6 es una actualización del protocolo IPv4 que nace ante la escasez de direcciones que IPv4 permite. Las direcciones IPv6 están formada por 32 caracteres hexadecimales en grupos de cuatro caracteres separados por el carácter dos puntos (:). En este post se recogen varios ejemplos prácticos del funcionamiento de este protocolo.

Leer

Almacenamiento en Docker

En este post se resume el funcionamiento de los dos principales métodos de almacenamiento en Docker: los volúmenes y los bind mount

Leer