В статье мы расскажем о том, что такое CSI S3, и опишем установку этого модуля.
Что такое CSI S3
CSI (Container Storage Interface) — это интерфейс, с помощью которого можно подключить бакет объектного хранилища S3 к подам кластера Kubernetes. Он позволяет подам взаимодействовать с объектным хранилищем, как с обычной файловой системой.
CSI представляет собой драйвер с несколькими вариантами интерфейсов: от Kubernetes и от сторонних поставщиков.
Как использовать S3-бакеты в Kubernetes
S3 — это объектное хранилище. Однако поды кластера Kubernetes могут использовать только файловые системы и блочные устройства для хранения данных. Это связано с тем, что S3 не поддерживает семантику файловых систем и не отвечает требованиям стандарта POSIX. По этой причине могут возникнуть проблемы при выполнении следующих операций:
- размещение баз данных;
- загрузка приложений, которые пытаются изменить права доступа или владельца файлов;
- частичная перезапись файлов;
- создание жестких ссылок и др.
Чтобы совместить хранилище данных S3 с Kubernetes используются специальные модули. Два наиболее популярных — это сtrox/csi-s3 и yandex-cloud/k8s-csi-s3.
сtrox/csi-s3
сtrox/csi-s3 — это драйвер CSI, который позволяет монтировать бакеты S3-хранилища как файловые системы внутри подов Kubernetes. Так объекты в бакетах становятся доступными для приложений внутри кластера, и для этого не нужно вносить изменения в код.
Драйвер сtrox/csi-s3 имеет следующие преимущества:
- поддержка разных видов S3-совместимых хранилищ;
поддержка rclone, s3fs и goofys:
- rclone монтирует облачные хранилища разных типов;
- s3fs монтирует хранилища S3 как файловую систему при помощи FUSE;
- goofys читает данные из S3.
Также сtrox/csi-s3 имеет недостатки:
- редкие обновления с периодичностью раз в несколько лет,
- отсутствие официального Helm-чарта (в качестве альтернативы используется решение от Cloudve).
yandex-cloud/k8s-csi-s3
yandex-cloud/k8s-csi-s3 — модуль, разработанный компанией Яндекс. Он представляет собой форк сtrox/csi-s3, однако в него добавлен GeeseFS — монтировщик для S3-совместимых хранилищ с использованием FUSE.
Отличительные особенности yandex-cloud/k8s-csi-s3:
- высокая производительность. Код GeeseFS включает в себя минимальное количество операций чтения и записи. Благодаря этому модуль работает быстрее в сравнении с другими монтировщиками из описания выше;
- поддержка частичного изменения и дозаписи объектов. Вы можете хранить данные в контейнере в формате единого файла и вносить в него изменения. Это касается и работы с большими файлами.
Как установить модуль CSI для работы с S3
До начала установки необходимо создать кластер Kubernetes и бакет S3-хранилища. Также вам потребуется менеджер пакетов Helm: его можно установить по официальной инструкции. В качестве примера мы установим модуль CSI S3 от компании Яндекс.
Выполните следующие действия для подключения модуля:
- 1
-
2
Установите Helm-чарт с CSI. Для этого поочередно введите строки команды:
helm repo add yandex-s3 https://yandex-cloud.github.io/k8s-csi-s3/charts && \ helm repo update && \ helm pull yandex-s3/csi-s3 --untar && \ helm install \ --namespace kube-system \ --set secret.accessKey=access_key_value \ --set secret.secretKey=secret_key_value \ csi-s3 ./csi-s3/
Где:
- kube-system — название пространства имен,
- access_key_value и secret_key_value — ID ключа и сам ключ доступа к S3-бакету. Эти данные вы можете найти в панели управления облаком по инструкции.
Готово, вы установили модуль CSI S3.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊