Sobes.tech
Middle

Co jsou PV a PVC v kontextu Kubernetes?

sobes.tech AI

Odpověď od AI

Persistent Volume (PV) je zdroj úložiště v Kubernetes clusteru. Abstrahuje detaily konkrétní implementace úložiště od spotřebitelů. PV je spravován správcem clusteru a existuje nezávisle na životním cyklu jakéhokoliv podu.

Persistent Volume Claim (PVC) je uživatelská žádost o úložiště. Uživatel žádá o objem úložiště s určitými vlastnostmi (velikost, režim přístupu). PVC je spojeno s vhodným PV. Pokud není nalezeno vhodné PV, může být dynamicky vytvořen nový PV, pokud je nakonfigurován odpovídající StorageClass.

Hlavní rozdíly a interakce:

  • PV: Představuje skutečný zdroj úložiště.
  • PVC: Představuje žádost o úložiště od uživatele.
  • PVC je spojeno s PV.
  • PV může být staticky vytvořen správcem nebo dynamicky vytvořen na základě požadavku PVC s použitím StorageClass.
  • Pod odkazuje na PVC, nikoli přímo na PV, což umožňuje oddělit logiku aplikace od detailů úložiště.

Režimy přístupu (Access Modes) pro PV a PVC:

  • ReadWriteOnce (RWO): Svazek může být namontován jak pro čtení, tak pro zápis jedním uzlem současně.
  • ReadOnlyMany (ROX): Svazek může být namontován pouze pro čtení mnoha uzly současně.
  • ReadWriteMany (RWX): Svazek může být namontován jak pro čtení, tak pro zápis mnoha uzly současně.

Příklad YAML pro PV a PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Co dělat se svazkem po odstranění PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Může být použit pro spojení s StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Affinity pro lokální úložiště
    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 # Spojeno s PV nebo 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