Что такое PV и PVC в контексте Kubernetes?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Persistent Volume (PV) — это ресурс хранения в кластере Kubernetes. Он абстрагирует детали конкретной реализации хранилища от потребителей. PV управляется администратором кластера и существует независимо от жизненного цикла любого пода.
Persistent Volume Claim (PVC) — это запрос пользователя на хранилище. Пользователь запрашивает объем хранилища с определенными характеристиками (размер, режим доступа). PVC связывается с подходящим PV. Если подходящий PV не найден, может быть произведен динамический провижининг нового PV, если настроен соответствующий StorageClass.
Основные отличия и взаимодействие:
- PV: Представляет фактический ресурс хранения.
- PVC: Представляет запрос на хранилище от пользователя.
- PVC связывается с PV.
- PV может быть статически создан администратором или динамически создан по запросу PVC с использованием StorageClass.
- Pod ссылается на PVC, а не напрямую на PV, что позволяет отделить логику приложения от деталей хранения.
Режимы доступа (Access Modes) для PV и PVC:
ReadWriteOnce(RWO): Том может быть смонтирован как для чтения, так и для записи одним узлом одновременно.ReadOnlyMany(ROX): Том может быть смонтирован только для чтения многими узлами одновременно.ReadWriteMany(RWX): Том может быть смонтирован как для чтения, так и для записи многими узлами одновременно.
Пример YAML для PV и PVC:
# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # Что делать с томом после удаления PVC (Retain, Recycle, Delete)
storageClassName: local-storage # Может быть использован для связывания с StorageClass
local:
path: /mnt/data
nodeAffinity: # Affinity для локального хранилища
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 # Связывается с PV или 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 # Ссылка на PVC