Использование СХД Qsan в среде управления контейнерами Kubernetes

Существуют различные технологии по уплотнению ресурсов физических серверов с целью их более эффективного использования. Наиболее известный вариант — это виртуализация. Именно в данной сфере системы хранения данных (СХД) являются одним из ключевых элементов, поскольку позволяют достаточно легко реализовать кластеры высокой доступности (HA cluster). Однако, помимо виртуализации доступны иные методы повышения эффективности, одним из которых является применение контейнеров.

Давайте приведем краткие отличия виртуальных машин от контейнеров.

Виртуальные машины:

  • Полностью изолированная среда виртуальных машин друг от друга и от гипервизора за счет аппаратных средств хоста;

  • Тип внутренней операционной системы не обязан совпадать с типом операционной системы хоста;

  • Размер ВМ обычно начинается от нескольких ГБ;

  • Требуется резервирование ресурсов для каждой ВМ;

  • Старт ВМ обычно измеряется в минутах.

Контейнеры:

  • Изоляция друг от друга осуществляется исключительно программными средствами операционной системы хоста;

  • Внутренняя операционная система точно такая же, как и ОС хоста;

  • Размер контейнера может быть весьма незначительным (буквально от десятков МБ);

  • Требуется минимум ресурсов для работы самого контейнера;

  • Старт обычно измеряется в секундах.

Исходя из вышеперечисленных достоинств и недостатков, контейнеры часто используют для запуска приложений и сервисов, не требующих огромных ресурсов. И это позволяет добиться большей плотности размещения сервисов в рамках единого сервера, тем самым повысив его утилизацию.

Одним из часто используемых средств управления контейнерами является Kubernetes, где помимо оркестрации непосредственно самих контейнеров, требуется также управление выделенными под них ресурсами хоста. И одним из таких ресурсов является пространство хранения, в качестве которого могут выступать тома СХД.

Безусловно, управление дисковыми ресурсами может осуществляться вручную. Но возможность управления всем из одного окна куда удобнее. Достигается это благодаря стандартному протоколу взаимодействия CSI. СХД Qsan XCubeSAN как раз поддерживают такой протокол. И далее мы опишем, как добиться динамического выделения пространства хранения со стороны хоста.

Ряд замечаний

Поддерживаются только thick пулы

В рамках единой хост группы может быть создано до 32 CSI томов. При попытке создать 33-й том будет получено сообщение об ошибке

Для корректной работы MPIO с двухконтроллерной СХД, разумеется, требуется обязательное подключение хоста к обоим контроллерам и добавление портов iSCSI обоих контроллеров в единую хост группу

При подготовке статьи использовались в том числе иллюстрации, взятые из материалов производителя СХД. Желающие могут ознакомится с ними в оригинале.

Первым шагом является включение Timestamp для фиксирования времени обращения к каждому конкретному тому на стороне СХД (System → Settings → Enable timestamp). По умолчанию данная опция выключена, т.к. оказывает негативное влияние на общую производительность.

6d010368bae4d8003a2fd7e1dc1266c5.png

Далее необходимо создать требуемый пул типа thick (пусть будет Pool_01) и будущую хост группу (пусть будет test1). После переключаем внимание на хост, где необходимо установить CSI driver:

git clone https://github.com/QsanJohnson/csi-qsan

В папке csi-qsan/deploy требуется внести изменения в файл qsan-auth.yaml, а именно указать IP адреса интерфейсов управления СХД и пароль администратора.

db2bbc031865b9e1f6b347f51f91e93e.png

Затем запустить скрипт установки csi-qsan/deploy/install.sh

Проверить статус установки можно командой kubectl get pod -n qsan

8e77a9c2b9019de47403d518843945e5.png

Далее в папке csi-qsan/deploy/example правим файл sc.yaml. Необходимо задать StorageClass name (оно пригодится позже), указать IP портов управления и iSCSI, имя пула (в нашем случае Pool_01) и имя iSCSI target. iSCSI target можно узнать на вкладке соответствующей хост группы.

285793a4486ccb9a2c30056c31c3519b.pngc0e6f7ada526af7268424b158282d0fa.png

Теперь применяем конфигурацию и проверяем статус

kubectl apply -f sc.yaml

kubectl get sc

319d7cb312fc9d2cd011e43025f35aca.png

Следующим шагом правим файл pvc.yaml, где PersistentVolumeClaim name, требуемый размер тома (пусть будет 100ГБ) и StorageClass name (sc-test, который мы задавали ранее).

fec8e29bc60c97b7d0070b7388efe442.png

Также применяем конфигурацию и проверяем статус

kubectl apply -f pvc.yaml

kubectl get pvc

f71e4e0885ae1c42b6d18451e67b486d.png

И, наконец, правим файл pod.yaml, где необходимо задать PersistentVolumeClaim name из предыдущего шага

b373c5f12da4f28baf56ae7fc63740bc.png

Все так же применяем конфигурацию и проверяем статус

kubectl apply -f pod.yaml

kubectl get pod

0db7d9350a6899c043d37da15899fb0d.png

В результате наших действий должен создаться том 100ГБ на пуле Pool_01 в указанной хост группе test1. Проверяем на стороне СХД, что это так и есть.

0339724711a4443b2fc753d2d2719152.png

Теперь остается скорректировать multipath.conf с целью включения MPIO для таких томов. Для этого добавляем в указанный файл дополнительные данные.

defaults {
	path_grouping_policy	multibus
	user_friendly_names	no
	find_multipaths		no
getuid_callout		"/lib/udev/scsi_id --replace-whitespace --whitelisted --dev
}

В данной статье были представлены основные шаги для установления связи между сервером Kubernetes и СХД Qsan XCubeSAN. Для более подробных сведений настоятельно рекомендуется ознакомиться с руководствами пользователей, предоставляемыми обоими вендорами.

© Habrahabr.ru