Saltar al contenido principal

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ísticaemptyDirtmpfs
AlmacenamientoDisco localRAM
RendimientoMedioMuy alto
PersistenciaSobrevive al reinicio del contenedorEliminado al reiniciar el nodo
LímiteEspacio en discoRAM disponible
Casos de usoCaché, archivos temporalesCaché 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