Что такое 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.