Gymterview
middle

Что такое PersistentVolume и PersistentVolumeClaim?

PersistentVolume (PV) — ресурс хранилища в кластере, который существует независимо от Pod’ов. PersistentVolumeClaim (PVC) — запрос на хранилище от пользователя. Вместе они разделяют ответственность: администратор управляет хранилищем (PV), разработчик запрашивает нужный объём (PVC).

Аналогия из жизни: PV — это складские помещения, которые владелец здания подготовил к сдаче. PVC — заявка арендатора: «мне нужно 5 кв. метров с доступом только для одного». Kubernetes-диспетчер находит подходящее помещение и закрепляет его за арендатором.

PersistentVolume (PV)

Пример
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: standard
  hostPath:
    path: /data/postgres

PersistentVolumeClaim (PVC)

Пример
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: standard
Пример использования PVC в Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:15
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
          env:
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-secret
                  key: password
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-pvc

Access Modes

Режим Описание
ReadWriteOnce (RWO) Чтение и запись одной нодой
ReadOnlyMany (ROX) Только чтение множеством нод
ReadWriteMany (RWX) Чтение и запись множеством нод

Reclaim Policy (политика освобождения)

Политика Поведение
Retain PV сохраняется после удаления PVC (данные остаются, нужна ручная очистка)
Delete PV и данные удаляются вместе с PVC
Recycle (устарел) Очистка данных и повторное использование

StorageClass

StorageClass позволяет динамически создавать PV по запросу PVC. Администратору не нужно создавать PV вручную.

Пример
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp3
  fsType: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true

На собеседовании: нужно объяснить связь PV -> PVC -> Pod и знать Access Modes. Частая ошибка — не упомянуть StorageClass и динамическое создание PV, а также путать Retain и Delete Reclaim Policy.