Middle
Какво са PV и PVC в контекста на Kubernetes?
sobes.tech AI
Отговор от 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: # Аффинитет към локалното съхранение
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