¿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