Что такое Kubernetes Storage?

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

Ответ

Kubernetes Storage — это набор абстракций и механизмов для управления состоянием (stateful) данных в кластере, обеспечивающий их сохранность между перезапусками и ресхедулированием подов. В отличие от ephemeral storage, это решение для данных, которые должны пережить жизненный цикл отдельного пода.

Ключевые компоненты:

  1. PersistentVolume (PV) — абстракция физического или сетевого хранилища (например, диска AWS EBS, Azure Disk, NFS-шары, Ceph RBD) как ресурса кластера.
  2. PersistentVolumeClaim (PVC) — запрос пользователя (пода) на выделение хранилища с определёнными характеристиками (размер, режим доступа) из доступных PV.
  3. StorageClass — шаблон для динамической подготовки (Dynamic Provisioning) PV. Позволяет создавать хранилище "по требованию" при создании PVC.
  4. CSI (Container Storage Interface) — стандартный плагин для интеграции сторонних систем хранения.

Пример манифеста PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-data-pvc
spec:
  accessModes:
    - ReadWriteOnce # Только одна нода может монтировать том на запись
  resources:
    requests:
      storage: 50Gi
  storageClassName: gp2 # Ссылка на StorageClass для динамического создания

Типы и выбор хранилища:

  • Блоковые (EBS, GCE Persistent Disk, Azure Disk): Высокая производительность для баз данных (режимы ReadWriteOnce).
  • Файловые (EFS, Azure Files, NFS): Разделяемый доступ между несколькими подами (режимы ReadWriteMany), подходит для веб-контента.
  • Объектные (S3, GCS): Обычно подключаются не через стандартный PV/PVC, а через sidecar-контейнеры или библиотеки приложения, для бэкапов и больших данных.

Практическое использование: В StatefulSet'ах (например, для Kafka или PostgreSQL) мы явно связываем каждый инстанс пода с уникальным PVC, что гарантирует сохранность данных при рестарте и миграции пода на другую ноду.