Almacenamiento en OpenShift v4
Resumen
Gestión del almacenamiento persistente en OpenShift: Volumes, PersistentVolumes, PersistentVolumeClaims, y aprovisionamiento dinámico usando StorageClass.
Conceptos Clave
Tipos de Volúmenes
- Efímero: Datos desaparecen al eliminar Pod
- Persistente: Datos perduran más allá del Pod
Almacenamiento en Pod
emptyDir: Volumen temporal para múltiples contenedores en mismo Pod
spec:
containers:
- name: app
volumeMounts:
- mountPath: /cache
name: cache
volumes:
- name: cache
emptyDir: {}PersistentVolume (PV)
Propósito: Recurso de almacenamiento en el cluster
Características:
- Ciclo de vida independiente de Pods
- Creado por admin del cluster
- Capacidad fija
- Modes de acceso: ReadWriteOnce, ReadOnlyMany, ReadWriteMany
PersistentVolumeClaim (PVC)
Propósito: Solicitud de almacenamiento por usuario
Workflow:
- Admin crea PVs
- Usuario crea PVC pidiendo capacidad/modo
- Cluster busca PV que coincida
- PV se “vincula” (bound) con PVC
- Usuario monta PVC en Pod
Aprovisionamiento Estático
Admin crea PV (10GB)
↓
Desarrollador crea PVC (pide 5GB ReadWriteOnce)
↓
Cluster vincula automáticamente
↓
PVC en estado "Bound"
Aprovisionamiento Dinámico
Propósito: Crear volúmenes automáticamente
Componentes:
- StorageClass: Define “aprovisionador” y parámetros
- PVC: Pide almacenamiento
- Sistema: Automáticamente crea PV correspondiente
Ejemplo:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
iops: "3000"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-claim
spec:
storageClassName: fast-ssd
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10GiAlmacenamiento en CRC
- StorageClass:
hostpath(único disponible) - Directorio host: Cada volumen mapea a directorio local
- Ventaja: Single-node, almacenamiento compartido
- Limitación: No distribuido, solo desarrollo
Usuarios en CRC
- Admin (kubeadmin): Ver/crear PVs, StorageClasses
- Developer: Solo crear PVCs
Montar PVC en Pod
spec:
containers:
- image: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: mysql-pvcEjemplo: WordPress Persistente
WordPress Pod
├─ /var/www/html (PVC wordpress-data)
└─ MySQL Pod
└─ /var/lib/mysql (PVC mysql-data)
Si Pod cae → datos persisten en PVs
Relaciones
Conecta con
- Parte de: OpenShift, Kubernetes
- Conceptos: Volume (abstracción conceptual)
- Similar a: Snapshot (backup/restore)