Что такое PersistentVolume (PV) в Kubernetes?

«Что такое PersistentVolume (PV) в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PersistentVolume (PV) — это ресурс кластера Kubernetes, представляющий фрагмент сетевого или локального хранилища, подготовленный администратором. PV существует независимо от Pod'ов и имеет собственный жизненный цикл.

Основные характеристики PV:

  • Емкость (capacity): Объем хранилища (например, 10Gi).
  • Режимы доступа (accessModes): Определяют, как Pod может монтировать том:
    • ReadWriteOnce (RWO) — чтение/запись одним узлом.
    • ReadOnlyMany (ROX) — чтение многими узлами.
    • ReadWriteMany (RWX) — чтение/запись многими узлами.
  • Политика рекламации (reclaimPolicy): Что происходит с PV после удаления связанного PVC:
    • Retain — том и данные сохраняются вручную.
    • Delete — том и данные удаляются (зависит от провайдера).
    • Recycle (устаревший) — данные удаляются, том становится доступен для нового PVC.

Пример статического PV на основе hostPath (для тестов):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-hostpath-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data
    type: DirectoryOrCreate

Как это работает: Разработчики не запрашивают PV напрямую. Вместо этого они создают PersistentVolumeClaim (PVC), который является запросом на хранилище с определенными характеристиками. Контроллер Kubernetes затем привязывает подходящий PV к этому PVC. Для автоматического создания томов используется StorageClass.