Ответ
Container Storage Interface (CSI) — это стандартный плагинный интерфейс, который позволяет системам хранения данных (СХД) сторонних производителей нативно работать с контейнерными оркестраторами, такими как Kubernetes. До CSI поддержка хранилищ была «зашита» в код самого Kubernetes.
Как это работает в Kubernetes:
- CSI Driver разворачивается в кластере как набор Pod'ов (обычно DaemonSet и StatefulSet).
- Драйвер регистрируется в kubelet и контроллере томов.
- Когда 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.