Хранить данные для работы приложений можно в самих контейнерах, но есть ограничения:
Данные, хранящиеся в контейнере, недоступны для других контейнеров пода.
Если контейнер работает некорректно, kubelet может перезагрузить его. При этом данные теряются, а контейнер перезапустится с чистым состоянием.
Подключение постоянного хранилища решает перечисленные проблемы.
В Kubernetes предоставлять блочные или объектные хранилища для контейнеров позволяет драйвер Container Storage Interface (CSI), который расширяет возможности хранения данных для контейнерных приложений.
CSI и S3 CSI-драйверы
Managed Kubernetes поддерживает спецификацию Container Storage Interface. В качестве постоянных томов можно подключать диски и объектное хранилище.
Для работы с дисками необходим CSI Driver, для работы с объектным хранилищем — S3 CSI Driver.
После установки драйверов в кластер Managed Kubernetes пользователи смогут подключать и монтировать
к .CSI Driver можно установить как при создании кластера, так и после как плагин. S3 CSI Driver можно установить только после создания кластера.
Ограничения и особенности сервиса Managed Kubernetes
В зависимости от типа используемого хранилища действуют разные ограничения.
Диски
Поддерживаются режимы доступа:
ReadWriteOnce — том может быть примонтирован с возможностью чтения и записи только к одному узлу.
ReadWriteOncePod — том может быть примонтирован с возможностью чтения и записи только к одному поду. Доступен для кластеров версии Kubernetes 1.29 и выше с CSI Driver 0.8.11 и выше.
Допустимый размер диска для монтирования — от 1 ГБ до 16 ТБ, кратный 1 ГБ.
После создания постоянного тома его размер нельзя уменьшить. Увеличение размера тома разрешено по умолчанию.
Для кластеров с CSI Driver версии:
1.0.1 и выше к одному рабочему узлу можно примонтировать не более 21 диска.
Если узлы используют GPU, то максимальное количество дисков вычисляется по формуле:
<максимальное_количество_дисков> = 21 — <количество_ядер_GPU_на_узле>
1.0.0 и ниже можно примонтировать не более восьми дисков.
Важно соблюдать ограничение на количество дисков, иначе поды, запланированные на узле, могут бесконечно ожидать подключения томов.
Объектное хранилище Object Storage
Поддерживается только режим ReadWriteMany.
Минимальный размер бакета для монтирования — 1 МБ. Количество бакетов на проект ограничено квотами сервиса Object Storage и может быть изменено по запросу в техническую поддержку.
Подробнее об ограничениях — в документации сервиса Object Storage.
Примеры работы с постоянными томами
Примеры манифестов на создание Persistent Volume Claim, выделение и подключение постоянного тома к поду, а также удаление тома описаны в разделе Работа с постоянными томами в Managed Kubernetes.
Пример работы со StatefulSet описан в разделе Управление рабочими нагрузками в Managed Kubernetes.