Sobes.tech
Middle

Čo sú PV a PVC v kontexte Kubernetes?

sobes.tech AI

Odpoveď od AI

Persistent Volume (PV) je zdroj úložiska v Kubernetes klastre. Abstrahuje detaily konkrétnej implementácie úložiska od spotrebiteľov. PV je spravovaný správcom klastru a existuje nezávisle od životného cyklu akéhokoľvek podu.

Persistent Volume Claim (PVC) je požiadavka používateľa na úložisko. Používateľ žiada o objem úložiska s určitými vlastnosťami (veľkosť, režim prístupu). PVC sa spája s vhodným PV. Ak nie je nájdené vhodné PV, môže byť dynamicky vytvorený nový PV, ak je nakonfigurovaný príslušný StorageClass.

Hlavné rozdiely a interakcie:

  • PV: Predstavuje skutočný zdroj úložiska.
  • PVC: Predstavuje požiadavku na úložisko od používateľa.
  • PVC sa spája s PV.
  • PV môže byť staticky vytvorený správcom alebo dynamicky vytvorený na základe požiadavky PVC s použitím StorageClass.
  • Pod odkazuje na PVC, nie priamo na PV, čo umožňuje oddeliť logiku aplikácie od detailov úložiska.

Režimy prístupu (Access Modes) pre PV a PVC:

  • ReadWriteOnce (RWO): Svazok môže byť namontovaný ako pre čítanie, tak aj pre zápis jedným uzlom súčasne.
  • ReadOnlyMany (ROX): Svazok môže byť namontovaný iba pre čítanie mnohými uzlami súčasne.
  • ReadWriteMany (RWX): Svazok môže byť namontovaný ako pre čítanie, tak aj pre zápis mnohými uzlami súčasne.

Príklad YAML pre PV a PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Čo robiť so svazkom po odstránení PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Môže byť použitý na spájanie s StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Afinita pre lokálne úložisko
    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 # Spája sa s PV alebo 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 # Odkaz na PVC