Какие типы томов (Volume) существуют в Kubernetes для хранения данных?

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

Ответ

В Kubernetes существует множество типов томов (Volume), которые интегрируются с различными системами хранения. Основные категории:

1. Локальные тома (Local):

  • emptyDir — Временное хранилище, создаваемое при запуске пода и удаляемое вместе с ним. Используется для обмена данными между контейнерами в одном поде.
  • hostPath — Монтирует файл или директорию с ноды (хоста) в под. Используется с осторожностью, так как привязывает под к конкретной ноде.

2. Сетевые тома (Network):

  • persistentVolumeClaim (PVC) — Основной абстракция. Позволяет поду запрашивать хранилище, не зная деталей реализации (например, nfs, csi, awsElasticBlockStore).
  • nfs — Монтирует сетевую файловую систему (NFS).
  • csi — Интерфейс для сторонних провайдеров хранилищ (например, AWS EBS, GCP Persistent Disk, Azure Disk, Ceph RBD).
  • configMap, secret — Специальные тома для монтирования конфигураций и секретов как файлов.

Пример PersistentVolumeClaim для запроса хранилища:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: fast-ssd # Указываем класс хранилища

Пример использования PVC в поде:

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app
    image: nginx
    volumeMounts:
    - name: storage
      mountPath: /usr/share/nginx/html
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: app-data-pvc # Ссылаемся на созданный PVC