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

Instalación desatendida de Debian12

Aquí se recoge una breve guía para la creación de una iso instalable de Debian usando un fichero de preseed.

Leer

Cifrado asimétrico con GPG y OpenSSL

En este post se resume brevemente el procedimiento para crear claves de cifrado asimétrico tanto con GPG como con OpenSSL.

Leer

Creación de política de grupo en Windows Active Directory

Una directiva de grupo es un conjunto de reglas que controlan el entorno de trabajo de cuentas de usuario y cuentas de equipo. La directiva de grupo permite gestionar y configurar de forma centralizada sistemas operativos, aplicaciones y configuración de los usuarios en un entorno de Directorio Activo.

Leer