Тома: PersistentVolume и PVC

Данные внутри пода исчезают вместе с ним — для постоянного хранилища нужны PersistentVolume и PVC.

PersistentVolume (PV) — кусок хранилища в кластере; PersistentVolumeClaim (PVC) — запрос пода на хранилище нужного размера.

Файловая система контейнера эфемерна: пересоздался под — данные пропали. Для базы данных это катастрофа. Решение — подключить к поду том, живущий независимо от пода. Самый важный класс таких томов — постоянные (persistent).

Разделение ролей: PV и PVC

Kubernetes разделяет «что есть» и «что нужно»:

  • PV — реальное хранилище (диск в облаке, NFS, локальный путь). Это ресурс уровня кластера.
  • PVC — заявка пода: «дайте мне 5 ГБ с доступом на чтение-запись». Kubernetes подбирает подходящий PV.

Такое разделение освобождает разработчика от знания, какой именно диск под капотом: он просто просит объём.

Заявка на хранилище (PVC)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-pvc
spec:
  accessModes:
    - ReadWriteOnce        # запись с одного узла
  resources:
    requests:
      storage: 5Gi

Монтируем PVC в под

spec:
  containers:
    - name: db
      image: postgres:16
      volumeMounts:
        - name: data
          mountPath: /var/lib/postgresql/data
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: data-pvc

Теперь данные Postgres лежат на постоянном томе. Под пересоздаётся — данные на месте.

StorageClass и динамическое выделение

Создавать PV вручную утомительно. В облаке работает StorageClass: вы создаёте только PVC, а PV выделяется автоматически (облако заводит диск под заявку). В большинстве кластеров есть StorageClass по умолчанию, поэтому хватает одного PVC.

kubectl get pvc
kubectl get pv

Вывод:

NAME       STATUS   VOLUME       CAPACITY   ACCESS MODES   AGE
data-pvc   Bound    pvc-9f3a...  5Gi        RWO            12s

Статус Bound значит, что заявка успешно связана с реальным томом.

ОбъектСмысл
Volume (emptyDir)временный, живёт с подом
PVреальное постоянное хранилище
PVCзаявка пода на хранилище
StorageClassавто-выделение PV под заявку

Итог

  • Файловая система контейнера эфемерна — для данных нужны постоянные тома.
  • PV — реальное хранилище, PVC — заявка пода на него.
  • StorageClass выделяет PV автоматически под PVC (особенно в облаке).
Проверьте себя
1. Что происходит с данными внутри контейнера при пересоздании пода?
AОни сохраняются автоматически
BОни исчезают, потому что файловая система контейнера эфемерна
CОни переносятся в etcd
DОни шифруются
2. В чём разница между PV и PVC?
APV — заявка, PVC — хранилище
BPV — реальное хранилище, PVC — заявка пода на хранилище
CЭто одно и то же
DPVC хранит секреты
3. Что делает StorageClass?
AШифрует тома
BАвтоматически выделяет PV под создаваемый PVC
CМаршрутизирует трафик
DХранит конфигурацию
Поддержать проект