Sobes.tech
Middle

Šta su PV i PVC u kontekstu Kubernetes?

sobes.tech АИ

Одговор од АИ

Persistent Volume (PV) je resurs za skladištenje u Kubernetes klasteru. On apstrahuje detalje konkretne implementacije skladištenja od potrošača. PV se upravlja od strane administratora klastera i postoji nezavisno od životnog ciklusa bilo koje pod.

Persistent Volume Claim (PVC) je zahtev korisnika za skladištenje. Korisnik traži obim skladištenja sa određenim karakteristikama (veličina, režim pristupa). PVC se povezuje sa odgovarajućim PV. Ako odgovarajući PV nije pronađen, može biti dinamički kreiran novi PV ako je podešen odgovarajući StorageClass.

Glavne razlike i interakcije:

  • PV: Predstavlja stvarni resurs skladištenja.
  • PVC: Predstavlja zahtev za skladištenje od korisnika.
  • PVC se povezuje sa PV.
  • PV može biti statički kreiran od strane administratora ili dinamički kreiran na zahtev PVC koristeći StorageClass.
  • Pod se referencira na PVC, a ne direktno na PV, što omogućava odvajanje logike aplikacije od detalja skladištenja.

Režimi pristupa (Access Modes) za PV i PVC:

  • ReadWriteOnce (RWO): Volumen može biti montiran za čitanje i pisanje od strane jednog čvora istovremeno.
  • ReadOnlyMany (ROX): Volumen može biti montiran samo za čitanje od strane više čvorova istovremeno.
  • ReadWriteMany (RWX): Volumen može biti montiran za čitanje i pisanje od strane više čvorova istovremeno.

Primer YAML za PV i PVC:

# persistent-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # Šta da se uradi sa volumenom nakon brisanja PVC (Retain, Recycle, Delete)
  storageClassName: local-storage # Može biti korišćen za povezivanje sa StorageClass
  local:
    path: /mnt/data
  nodeAffinity: # Afinitet za lokalno skladište
    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 # Povezuje se sa PV ili 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 # Referenca na PVC