Sobes.tech
Middle

Kas ir PV un PVC Kubernetes kontekstā?

sobes.tech AI

Atbilde no AI

Непрекъснат обем (PV) — това е ресурс за съхранение в Kubernetes клъстер. Той абстрахира детайлите на конкретната реализация на съхранението от потребителите. PV се управлява от администратора на клъстера и съществува независимо от жизнения цикъл на който и да е под.

Заявка за непрекъснат обем (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