Sobes.tech
Middle

¿Qué son PV y PVC en el contexto de Kubernetes?

sobes.tech AI

Respuesta de la IA

El Volumen Persistente (PV) es un recurso de almacenamiento en el clúster de Kubernetes. Abstrae los detalles de la implementación específica del almacenamiento de los consumidores. PV es gestionado por el administrador del clúster y existe independientemente del ciclo de vida de cualquier pod.

La Reclamación de Volumen Persistente (PVC) es una solicitud del usuario para almacenamiento. El usuario solicita un volumen de almacenamiento con características específicas (tamaño, modo de acceso). La PVC se vincula con un PV adecuado. Si no se encuentra un PV adecuado, se puede realizar un aprovisionamiento dinámico de un nuevo PV si se ha configurado un StorageClass correspondiente.

Diferencias principales y interacción:

  • PV: Representa el recurso de almacenamiento real.
  • PVC: Representa la solicitud de almacenamiento del usuario.
  • La PVC se vincula con un PV.
  • El PV puede ser creado estáticamente por el administrador o dinámicamente en respuesta a una PVC mediante el uso de un StorageClass.
  • El Pod hace referencia a la PVC, no directamente al PV, lo que permite separar la lógica de la aplicación de los detalles del almacenamiento.

Modos de acceso (Access Modes) para PV y PVC:

  • ReadWriteOnce (RWO): El volumen puede ser montado para lectura y escritura por un solo nodo a la vez.
  • ReadOnlyMany (ROX): El volumen puede ser montado solo para lectura por muchos nodos a la vez.
  • ReadWriteMany (RWX): El volumen puede ser montado para lectura y escritura por muchos nodos a la vez.

Ejemplo YAML para PV y PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Qué hacer con el volumen después de eliminar la PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Puede ser usado para vincular con un StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Afinidad para almacenamiento local
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - my-node
# persistent-volume-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage # Vinculado con PV o StorageClass
# pod-using-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: nginx
      volumeMounts:
        - name: app-storage
          mountPath: /usr/share/nginx/html
  volumes:
    - name: app-storage
      persistentVolumeClaim:
        claimName: my-pvc # Referencia a la PVC