Almacenamiento Kubernetes: PVC y datos que sobreviven al pod
Los volúmenes persistentes separan determinados datos del ciclo de vida de un pod. En Kubernetes, un PVC solicita almacenamiento y una StorageClass puede definir cómo se aprovisiona. No todos los clústeres tienen las mismas clases ni la misma disponibilidad.
Este ejemplo utiliza PostgreSQL 16 en un namespace de práctica y requiere una StorageClass predeterminada funcional. Revisa contexto antes de aplicar.
Comprueba el almacenamiento disponible
kubectl config current-context
kubectl get storageclass
kubectl get pv
kubectl create namespace datos-lab
No copies storageClassName: standard suponiendo que existe en cualquier plataforma. Si no hay clase predeterminada, selecciona una compatible y añade su nombre a la solicitud.
Crea un secreto de prueba
umask 077
openssl rand -hex 24 | tr -d '\n' > password-lab.txt
kubectl -n datos-lab create secret generic postgres-lab \
--from-file=password=password-lab.txt
Protege y retira el archivo local según tu procedimiento. Un Secret Kubernetes no debe considerarse cifrado y protegido frente a todos los administradores solo por su nombre; revisa permisos y almacenamiento del clúster.
Servicio y StatefulSet
apiVersion: v1
kind: Service
metadata:
name: postgres-lab
namespace: datos-lab
spec:
clusterIP: None
selector:
app: postgres-lab
ports:
- port: 5432
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres-lab
namespace: datos-lab
spec:
serviceName: postgres-lab
replicas: 1
selector:
matchLabels:
app: postgres-lab
template:
metadata:
labels:
app: postgres-lab
spec:
containers:
- name: postgres
image: postgres:16
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-lab
key: password
ports:
- containerPort: 5432
volumeMounts:
- name: datos
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: datos
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 2Gi
La clase, tamaño, permisos y restricciones del proveedor deben revisarse. La imagen y ruta corresponden a la familia elegida; no cambies de versión mayor sin consultar su procedimiento.
Comprueba PVC y datos
kubectl -n datos-lab get pods,pvc
kubectl -n datos-lab describe pvc datos-postgres-lab-0
kubectl -n datos-lab logs postgres-lab-0
Crea datos ficticios con un cliente autorizado y verifica su lectura. Después realiza un reinicio controlado y vuelve a consultar. El pod nuevo debe utilizar el almacenamiento esperado.
Acceso y disponibilidad
ReadWriteOnce describe una condición de montaje según el almacenamiento; no significa “un único proceso puede escribir” ni crea replicación de base de datos.
Un StatefulSet con una réplica sigue teniendo limitaciones ante fallos. La identidad estable no configura automáticamente replicación, failover o copias.
Borrado y recuperación
Revisa reclaimPolicy, política de retención de PVC y recursos asociados antes de eliminar. El efecto puede depender del controlador y de la configuración.
No uses borrar namespace como limpieza rutinaria de una base con datos importantes. Conserva copia y prueba restauración en otro entorno.
Revisa el efecto de una reubicación
Una prueba útil es identificar a qué nodo y zona está ligado el volumen. Algunos tipos de almacenamiento no pueden montarse inmediatamente desde cualquier ubicación. Si el pod cambia de nodo y queda esperando, consulta eventos y restricciones del proveedor antes de crear otro volumen vacío.
Tampoco aumentes replicas de esta base suponiendo que obtendrás una copia sincronizada: cada instancia necesita un diseño de replicación y acceso a datos compatible. La identidad de StatefulSet organiza recursos, pero no implementa el protocolo de PostgreSQL.
Preguntas frecuentes
¿Un volumen persistente es un backup?
No. Puede conservarse entre pods y aun así perderse por borrado, corrupción o fallo del almacenamiento.
¿Por qué el PVC está Pending?
Puede faltar una clase, capacidad, permisos o un provisionador funcional. Consulta eventos antes de cambiar el YAML a ciegas.
¿StatefulSet replica PostgreSQL automáticamente?
No. Gestiona aspectos de identidad y almacenamiento; la replicación de la base requiere un diseño específico.
En pocas palabras
Un PVC solicita almacenamiento con condiciones concretas y depende de la infraestructura del clúster. La persistencia puede sobrevivir a un pod y seguir siendo vulnerable a pérdida del disco o borrado.
Conclusión
Prueba reinicio y recreación controlados y documenta qué recursos conservan los datos. Añade un backup externo y una restauración antes de utilizar información importante.
Para continuar, revisa Instalar Kubernetes en Ubuntu desde cero: guía completa y Docker: qué es y cómo usarlo para ejecutar contenedores.
