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

Creación de un escenario con varios contenedores con docker compose

Para implantar una aplicación nextcloud en un contenedor docker conectada a otro contenedor con una base de datos MariaDB se puede usar un fichero docker compose para configurar el escenario.

Leer

Instalación de WordPress en Rocky Linux 9

En este post se instala WordPress en un equipo con Rocky Linux 9 en el que se ha instalado el servidor web de Apache httpd y que se conecta a una base de datos instalada en otro servidor basado en Ubuntu 22.04.

Leer

Implantación de una aplicación Java usando Docker

Para implantar una aplicación Java usando Docker se puede compilar una aplicación desde el código fuente o usar un fichero ya compilado. Además, se puede implantar una aplicación en un contenedor tomcat o crear una imagen Docker propia a partir de una imagen Tomcat con las modificaciones necesarias para servir la aplicación.

Leer