Что такое Container Storage Interface (CSI)?

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

Ответ

Container Storage Interface (CSI) — это стандартный плагинный интерфейс, который позволяет системам хранения данных (СХД) сторонних производителей нативно работать с контейнерными оркестраторами, такими как Kubernetes. До CSI поддержка хранилищ была «зашита» в код самого Kubernetes.

Как это работает в Kubernetes:

  1. CSI Driver разворачивается в кластере как набор Pod'ов (обычно DaemonSet и StatefulSet).
  2. Драйвер регистрируется в kubelet и контроллере томов.
  3. Когда Pod запрашивает PersistentVolume, Kubernetes вызывает соответствующие RPC-методы CSI драйвера (CreateVolume, ControllerPublishVolume, NodeStageVolume, NodePublishVolume).

Пример использования: создание StorageClass для динамического провижининга.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: pd.csi.storage.gke.io # Драйвер CSI для Persistent Disk в GKE
parameters:
  type: pd-ssd
  replication-type: none
volumeBindingMode: WaitForFirstConsumer # Отложенное выделение тома
allowVolumeExpansion: true # Разрешить увеличение размера тома

Ключевые преимущества CSI:

  • Декомпозиция: Разработчикам хранилищ не нужно модифицировать код Kubernetes.
  • Единый стандарт: Один драйвер может работать с разными оркестраторами.
  • Расширенные операции: Поддержка снапшотов, клонирования томов, расширения томов.
  • Безопасность: Драйверы работают как обычные Pod'ы, а не как часть бинарного файла kubelet.

Популярные реализации CSI-драйверов: aws-ebs-csi-driver, azure-disk-csi-driver, ceph-csi, longhorn.