Доступно в некоторых коммерческих редакциях: EE
Подробнее см. в разделе Условия и цены.
Deckhouse поддерживает работу с объектным хранилищем на основе S3, обеспечивая возможность использования его в Kubernetes для хранения данных в виде томов. В качестве файловой системы применяется GeeseFS, работающая через FUSE поверх S3, что позволяет монтировать S3-хранилища как стандартные файловые системы.
На этой странице представлены инструкции по настройке S3-хранилища в Deckhouse, включая подключение, создание StorageClass, а также проверку работоспособности системы.
Системные требования
- Kubernetes версии 1.17+ с поддержкой привилегированных контейнеров.
- Настроенное S3-хранилище с доступными ключами.
- Достаточный объем памяти на узлах.
GeeseFS
использует кэш для работы с файлами, загружаемыми из S3. Размер кэша задается параметромmaxCacheSize
в S3StorageClass. Результаты стресс-теста: 7 узлов, 600 подов и PVC,maxCacheSize
= 500 МБ, каждый под записывает 300 МБ, читает их и завершает работу.
Настройка и конфигурация
Обратите внимание, что все команды должны выполняться на машине с административными правами в Kubernetes API.
Необходимые шаги:
- Включение модуля;
- Создание S3StorageClass.
Включение модуля
Для поддержки работы с S3-хранилищем включите модуль csi-s3
, который позволяет создавать StorageClass и Secret в Kubernetes с помощью пользовательских ресурсов S3StorageClass. После включения модуля на узлах кластера произойдёт:
- Регистрация CSI-драйвера;
- Запуск сервисных подов
csi-s3
и создание необходимых компонентов.
d8 k apply -f - <<EOF
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: csi-s3
spec:
enabled: true
version: 1
EOF
Дождитесь, пока модуль не перейдет в состояние Ready
.
d8 k get module csi-s3 -w
Создание StorageClass
Модуль настраивается с помощью манифеста S3StorageClass. Пример конфигурации:
apiVersion: csi.s3.storage.k8s.io/v1
kind: S3StorageClass
metadata:
name: example-s3
spec:
bucketName: example-bucket
endpoint: https://s3.example.com
region: us-east-1
accessKey: <your-access-key>
secretKey: <your-secret-key>
maxCacheSize: 500
Если bucketName
не указан, для каждого PersistentVolume будет создан отдельный bucket. Если bucketName
задан, в нем будут создаваться папки под каждый PersistentVolume. Если такого bucket нет, он создастся автоматически.
Проверка работоспособности модуля
Для проверки состояния модуля, необходимо проверить статус подов в пространстве имён d8-csi-s3
. Для проверки воспользуйтесь командой:
d8 k -n d8-csi-s3 get pod -owide -w
Статус всех подов должен быть Running
или Completed
, поды должны быть запущены на каждом из узлов.
Известные ограничение GeeseFS
S3 не является полноценной файловой системой, поэтому существуют определенные ограничения. Совместимость с POSIX зависит от используемого монтирующего модуля и провайдера S3. Некоторые хранилища могут не гарантировать консистентность данных детали.
Вы можете просмотреть таблицу совместимости с POSIX здесь.
Основные ограничения:
- Разрешения файловой системы, символические ссылки, пользовательские
mtimes
и специальные файлы (блочные/символьные устройства, именованные каналы, сокеты UNIX) не поддерживаются, поскольку стандарт S3 не возвращает метаданные пользователя в списках и не читает все эти метаданные в стандарте S3. Потребуется дополнительный запросHEAD
для каждого файла в листинге, что сделает листинги слишком медленными. - Поддержка специальных файлов включена по умолчанию для
Яндекс S3
и отключена для других. - Разрешения файловой системы отключены по умолчанию.
- Пользовательское время модификации также отключено по умолчанию:
ctime
,atime
иmtime
всегда одинаковы. - Время изменения файла не может быть установлено пользователем (например, с помощью
cp --preserve
,rsync -a
илиutimes(2)
) - Не поддерживаются жесткие ссылки.
- Не поддерживается блокировка.
- Не поддерживаются «невидимые» удаленные файлы. Если приложение сохраняет открытый файловый дескриптор после удаления файла, оно получит ошибки
ENOENT
от операций FS. - Ограничение размера файла по умолчанию составляет 1,03 ТБ и достигается путем разделения файла на 1000 частей по 5 МБ, 1000 частей по 25 МБ и 8000 частей по 125 МБ. Вы можете изменить размеры частей, но собственный лимит AWS в любом случае составляет 5 ТБ.
Известные ошибки и проблемы
- Запрос размера тома в PVC никак не отражается на создаваемых bucket.
df -h
показывает размер смонтированного хранилища в 1 петабайт,used
никак не меняется во время использования.- CSI не проверяет корректность ключей для доступа к хранилищу, статус пода будет
Running
, а PersistentVolume и PersistentVolumeClaim будутBound
даже если ключи неправильные. Попытка доступа к смонтированной директории в поде приведёт к перезапуску пода.
- CSI не проверяет корректность ключей для доступа к хранилищу, статус пода будет