Middle
Czym są PV i PVC w kontekście Kubernetes?
sobes.tech AI
Odpowiedź od AI
Trwała Wolumin (PV) to zasób przechowywania w klastrze Kubernetes. Abstrahuje szczegóły konkretnej implementacji przechowywania od konsumentów. PV jest zarządzany przez administratora klastra i istnieje niezależnie od cyklu życia dowolnego poda.
Żądanie Trwałego Woluminu (PVC) to zapytanie użytkownika o przechowywanie. Użytkownik żąda woluminu o określonych cechach (rozmiar, tryb dostępu). PVC jest powiązane z odpowiednim PV. Jeśli nie zostanie znalezione odpowiednie PV, możliwe jest dynamiczne tworzenie nowego PV, jeśli skonfigurowano odpowiedni StorageClass.
Główne różnice i interakcje:
- PV: Reprezentuje faktyczny zasób przechowywania.
- PVC: Reprezentuje żądanie użytkownika o przechowywanie.
- PVC jest powiązane z PV.
- PV może być tworzony statycznie przez administratora lub dynamicznie w odpowiedzi na PVC za pomocą StorageClass.
- Pod odwołuje się do PVC, a nie bezpośrednio do PV, co pozwala oddzielić logikę aplikacji od szczegółów przechowywania.
Tryby dostępu (Access Modes) dla PV i PVC:
ReadWriteOnce(RWO): Wolumin może być montowany do odczytu i zapisu przez pojedynczy węzeł jednocześnie.ReadOnlyMany(ROX): Wolumin może być montowany tylko do odczytu przez wiele węzłów jednocześnie.ReadWriteMany(RWX): Wolumin może być montowany do odczytu i zapisu przez wiele węzłów jednocześnie.
Przykład YAML dla PV i PVC:
# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # Co zrobić z woluminem po usunięciu PVC (Retain, Recycle, Delete)
storageClassName: local-storage # Może być używany do powiązania z StorageClass
local:
path: /mnt/data
nodeAffinity: # Afinitet dla lokalnego przechowywania
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 # Powiązanie z PV lub 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 # Odwołanie do PVC