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