Доступно в редакциях:  SE+, EE

Модуль csi-vsphere предоставляет поддержку Container Storage Interface (CSI) для сред VMware vSphere, обеспечивая динамическое предоставление и управление постоянными томами хранения в кластерах Kubernetes, работающих на инфраструктуре vSphere.

Используйте модуль csi-vsphere, когда в кластере отсутствует возможность применять модуль cloud-provider-vsphere, но требуется динамический заказ томов в инфраструктуре vSphere.

Этот модуль специально разработан для статических кластеров Kubernetes (не облачных), развернутых на VMware vSphere, и работает независимо от модуля cloud-provider-vsphere. Он интегрируется с datastores vSphere для предоставления возможностей постоянного хранения через CSI-драйвер vSphere.

Основные возможности

  • Обеспечивает динамический заказ постоянных томов для статических кластеров Kubernetes на VMware vSphere.
  • Автоматически обнаруживает datastores vSphere и создаёт ресурсы StorageClass.
  • Поддерживает топологически осведомлённое размещение томов с помощью тегов регионов и зон vSphere.
  • Обрабатывает создание, удаление, присоединение, отсоединение томов и онлайн-изменение размера (режим по умолчанию).
  • Поддерживает режимы совместимости Legacy, Default и Migration для плавного перехода между версиями драйвера.

Модуль развертывает компоненты VMware vSphere CSI-драйвера, которые:

  • Автоматически обнаруживают datastores vSphere — читает данные обнаружения из секрета d8-cloud-provider-discovery-data для идентификации доступных datastores и их топологии.
  • Создают StorageClass — автоматически генерирует ресурсы StorageClass для каждого обнаруженного datastore, отфильтрованные по списку исключений при настройке.
  • Предоставляют постоянные тома — динамически создает постоянные тома на datastores vSphere при создании PersistentVolumeClaim.
  • Поддерживают операции с томами — обрабатывает создание, удаление, присоединение, отсоединение томов и онлайн-изменение размера (в Режиме по умолчанию).
  • Реализуют топологическую осведомленность — использует лейблы зон и регионов для правильного размещения томов в соответствии с топологией кластера vSphere.

Системные требования

Для использования модуля в кластере необходимо соблюдение следующих системных требований:

  • Все виртуальные машины кластера должны быть созданы с использованием инструментов vSphere.
  • Имя виртуальной машины в vSphere должно точно совпадать с именем узла (hostname) в кластере Deckhouse Kubernetes Platform.
  • В настройках каждой виртуальной машины необходимо включить параметр disk.EnableUUID:TRUE. Он обеспечивает корректную работу модуля с дисковыми ресурсами и позволяет DKP идентифицировать подключенные тома.

Архитектура

CSI-драйвер состоит из следующих компонентов:

  1. CSI Controller (работает на master-узлах):
    • vsphere-csi-controller — основной контроллер, управляющий жизненным циклом томов.
    • csi-provisioner — следит за PVC и запускает создание томов.
    • csi-attacher — обрабатывает присоединение томов к узлам.
    • csi-resizer — управляет онлайн-расширением томов.
    • vsphere-syncer — синхронизирует метаданные между Kubernetes и vSphere каждые 30 минут.
    • liveness-probe — мониторит здоровье контроллера.
  2. CSI Node (DaemonSet на всех узлах):
    • vsphere-csi-node — узловой CSI-драйвер, обрабатывающий монтирование/размонтирование томов.
    • node-driver-registrar — регистрирует CSI-драйвер в kubelet.
    • liveness-probe — мониторит здоровье узлового драйвера.

Режимы совместимости

Модуль поддерживает следующие режимы работы (режим устанавливается через параметр compatibilityFlag):

  • Режим по умолчанию (используется по умолчанию, compatibilityFlag не установлен или пустой):
    • использует текущий CSI-драйвер vSphere (csi.vsphere.vmware.com),
    • поддерживает CNS (Cloud Native Storage) тома,
    • есть поддержка онлайн-изменения размера томов,
    • рекомендуется для новых развертываний.
  • Устаревший режим (compatibilityFlag: "Legacy"):
    • использует старый CSI-драйвер vSphere (vsphere.csi.vmware.com),
    • работает только с FCD (First Class Disk) томами,
    • нет поддержки онлайн-изменения размера,
    • используется для обратной совместимости.
  • Режим миграции (compatibilityFlag: "Migration"):
    • использует обе версии драйвера одновременно,
    • облегчает миграцию из устаревшего (Legacy) в Режим по умолчанию (Default),
    • позволяет постепенный переход рабочих нагрузок.

Обнаружение и предоставление хранения

Модуль автоматически:

  1. Обнаруживает datastores из данных обнаружения облачного провайдера.
  2. Генерирует имена StorageClass путем очистки имен datastores для соответствия требованиям именования DNS Kubernetes.
  3. Фильтрует исключенное хранилище на основе конфигурации storageClass.exclude (поддерживает regex-шаблоны).
  4. Создает StorageClass с соответствующими параметрами:
    • allowVolumeExpansion: true (только Режим по умолчанию),
    • volumeBindingMode: WaitForFirstConsumer — гарантирует создание томов в той же зоне, в которой создаются поды;
    • топологические ограничения, соответствующие регионам и зонам vSphere.

Настройка StorageClass по умолчанию

Модуль автоматически создает StorageClass для каждого Datastore и DatastoreCluster из зон.

Чтобы задать StorageClass по умолчанию для кластера, используйте глобальный параметр defaultClusterStorageClass. Чтобы отфильтровать ненужные объекты StorageClass, задайте шаблоны исключений в параметре storageClass.exclude.

Жизненный цикл томов

Когда под запрашивает хранилище:

  1. Создается PVC, ссылающийся на StorageClass, управляемый модулем.
  2. CSI provisioner создает том на указанном datastore vSphere.
  3. CSI attacher присоединяет том к соответствующему узлу.
  4. CSI node driver монтирует том в под.
  5. vsphere-syncer периодически синхронизирует метаданные для обеспечения согласованности.

Ограничения

  • Модуль разработан исключительно для статических (не облачных) кластеров Kubernetes на vSphere.
  • Устаревший режим не поддерживает онлайн-изменение размера томов.
  • Расширение томов требует текущего CSI-драйвера (csi.vsphere.vmware.com).
  • Объекты StorageClass управляются автоматически — ручные изменения могут быть перезаписаны.