Despliegue de aplicaciones usando variables de entorno en Kubernetes
- Francisco Javier Huete
- Servicios
- March 9, 2025
Í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