Capítulo 6.1 - Volúmenes
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Comprender los diferentes tipos de volúmenes en Kubernetes
- Utilizar volúmenes efímeros (emptyDir, tmpfs)
- Distinguir entre volúmenes efímeros y almacenamiento persistente
- Elegir el tipo de volumen adecuado según el caso de uso
- Comprender el ciclo de vida de los volúmenes
Introducción
Los volúmenes en Kubernetes permiten a los contenedores acceder al almacenamiento. A diferencia del sistema de archivos del contenedor (efímero), los volúmenes persisten incluso si el contenedor se reinicia.
Volúmenes Efímeros
Los volúmenes efímeros existen únicamente durante la vida del Pod. Se eliminan cuando el Pod finaliza.
emptyDir
Un volumen emptyDir se crea cuando un Pod inicia y se elimina cuando el Pod finaliza.
apiVersion: v1
kind: Pod
metadata:
name: empty-dir-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /cache
- name: sidecar
image: busybox:1.35
volumeMounts:
- name: cache
mountPath: /shared
volumes:
- name: cache
emptyDir:
sizeLimit: 1Gi # Opcional: límite de tamaño
Características:
- Se crea automáticamente al iniciar el Pod
- Compartido entre todos los contenedores del Pod
- Almacenado en el nodo (disco local)
- Se elimina cuando el Pod finaliza
Casos de uso:
- Caché temporal
- Archivos temporales compartidos entre contenedores
- Datos de trabajo intermedios
tmpfs (RAM)
Un volumen tmpfs se almacena en memoria (RAM) en lugar de en disco.
apiVersion: v1
kind: Pod
metadata:
name: tmpfs-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: tmpfs-volume
mountPath: /tmp
volumes:
- name: tmpfs-volume
emptyDir:
medium: Memory
sizeLimit: 512Mi # Límite en RAM
Características:
- Almacenado en RAM (muy rápido)
- Se elimina al reiniciar el nodo
- Limitado por la RAM disponible
- Más rápido que emptyDir (disco)
Casos de uso:
- Caché en memoria de alto rendimiento
- Archivos temporales sensibles (eliminados al reiniciar)
- Datos que no deben persistir
Atención: Utilizar con precaución ya que consume RAM.
Comparación: emptyDir vs tmpfs
| Característica | emptyDir | tmpfs |
|---|---|---|
| Almacenamiento | Disco local | RAM |
| Rendimiento | Medio | Muy alto |
| Persistencia | Sobrevive al reinicio del contenedor | Eliminado al reiniciar el nodo |
| Límite | Espacio en disco | RAM disponible |
| Casos de uso | Caché, archivos temporales | Caché de alto rendimiento, datos sensibles |
Volúmenes Especiales
ConfigMap y Secret como Volúmenes
Los ConfigMaps y Secrets pueden montarse como volúmenes.
apiVersion: v1
kind: Pod
metadata:
name: config-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: app-secrets
defaultMode: 0400
Resultado: Cada clave se convierte en un archivo en el directorio montado.
Volúmenes Persistentes (Vista Previa)
Los volúmenes persistentes (PV/PVC) se tratarán en detalle en el capítulo 6.2.
Diferencia principal:
Ejemplo Completo: Caché Compartida
apiVersion: v1
kind: Pod
metadata:
name: cache-example
spec:
containers:
# Contenedor principal
- name: web-server
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /var/cache/nginx
- name: tmp
mountPath: /tmp
# Contenedor sidecar para la caché
- name: cache-warmup
image: busybox:1.35
command: ["/bin/sh", "-c", "while true; do echo 'Cache data' > /cache/data.txt; sleep 60; done"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
# Caché compartida (disco)
- name: cache
emptyDir:
sizeLimit: 500Mi
# Archivos temporales (RAM)
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 100Mi
Buenas Prácticas
1. Elegir el Tipo Correcto
- emptyDir: Caché, archivos temporales, datos compartidos entre contenedores
- tmpfs: Caché de alto rendimiento, datos temporales sensibles
- PV/PVC: Datos importantes que deben persistir
2. Límites de Tamaño
Siempre defina sizeLimit para evitar:
- Agotamiento del espacio en disco (emptyDir)
- Agotamiento de la RAM (tmpfs)
3. Limpieza
Los volúmenes efímeros se limpian automáticamente, pero:
- Verifique que las aplicaciones limpien sus archivos temporales
- Monitoree el uso de espacio en disco/RAM
Comandos Útiles
Verificar los Volúmenes de un Pod
kubectl describe pod empty-dir-pod
Ver el Uso de los Volúmenes
kubectl exec empty-dir-pod -c app -- df -h
Probar un Volumen
# Escribir en el volumen
kubectl exec empty-dir-pod -c app -- sh -c "echo 'test' > /cache/test.txt"
# Leer desde el volumen
kubectl exec empty-dir-pod -c app -- cat /cache/test.txt
Resumen
En este capítulo, usted ha aprendido:
Volúmenes efímeros: emptyDir (disco) y tmpfs (RAM)
emptyDir: Se crea al iniciar, se elimina al finalizar, compartido entre contenedores
tmpfs: Almacenado en RAM, muy rápido, eliminado al reiniciar el nodo
Casos de uso: Caché, archivos temporales, datos compartidos
Limitaciones: Tamaño limitado, vida útil ligada al Pod
Buenas prácticas: Definir sizeLimit, elegir según las necesidades
Próximos Pasos
Capítulo 6.2: PersistentVolumes y PersistentVolumeClaims
Lab 6.1: Volúmenes Efímeros y emptyDir
Capítulo creado el: diciembre 2024