Almacenamiento Kubernetes: PVC y datos que sobreviven al pod

Índice de contenido
  1. Comprueba el almacenamiento disponible
  2. Crea un secreto de prueba
  3. Servicio y StatefulSet
  4. Comprueba PVC y datos
  5. Acceso y disponibilidad
  6. Borrado y recuperación
  7. Revisa el efecto de una reubicación
  8. Preguntas frecuentes
    1. ¿Un volumen persistente es un backup?
    2. ¿Por qué el PVC está Pending?
    3. ¿StatefulSet replica PostgreSQL automáticamente?
  9. En pocas palabras
  10. Conclusión
  11. Fuentes y documentación

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.

Fuentes y documentación

Documentación de kubernetes.io.

Documentación de kubernetes.io.

Subir

Descubre más de Sergio Caballero

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Continuar leyendo