Sobes.tech
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