Интеграция S3 в Kubernetes позволяет приложениям работать с объектным хранилищем как с обычной файловой системой. В Timeweb Cloud для этого используется CSI S3 (Container Storage Interface), который обеспечивает прозрачное подключение S3-бакетов к подам Kubernetes. Рассмотрим, как настроить использование CSI S3 в кластере Kubernetes.
Установка CSI S3
Добавьте CSI S3 в существующий кластер следующим образом:
-
Перейдите во вкладку «Дополнения» на странице управления кластером.
-
Нажмите на три точки рядом с дополнением CSI S3 и выберите «Установить».

-
В появившемся окне выберите существующий S3-бакет, создайте новый или подключите внешний бакет S3.

После выбора бакета нажмите «Установить» и дождитесь завершения процесса. После установки бакет будет доступен для использования в кластере, и никаких дополнительных настроек не потребуется.
Проверка установки
Чтобы убедиться, что CSI S3 успешно установлен и подключен, выполните команду для получения списка StorageClass:
Также вы можете просмотреть данные для подключения S3, выполнив следующую команду:
Данные будут представлены в секции data, в формате base64.
Использование CSI S3 в Kubernetes
S3 — это объектное хранилище, и Kubernetes не может напрямую взаимодействовать с ним, так как Kubernetes работает с файловыми системами и блочными устройствами. Для подключения используется PersistentVolumeClaim (PVC), который позволяет приложениям запрашивать доступ к S3 через CSI-драйвер. Для монтирования S3-бакета используется FUSE-прослойка geesefs, которая обеспечивает доступ к файлам в S3 как к обычной файловой системе.
Важно отметить, что CSI S3 не является полноценной POSIX-совместимой файловой системой. Это решение подходит для хранения статических файлов, таких как изображения, CSS, JS, конфигурационные файлы, или другие данные, которые не требуют высокой дисковой активности. Из-за отсутствия полной POSIX-совместимости могут возникнуть проблемы с размещением баз данных или других приложений, которые пытаются изменить права доступа или владельца файлов и папок. Также не поддерживаются частичная перезапись файлов и создание жестких ссылок (hardlinks).
PVC выполняет роль «заявки» на хранилище. Это запрос к Kubernetes с просьбой предоставить хранилище с определенными параметрами. В ответ на этот запрос Kubernetes создает соответствующий PersistentVolume (PV), который затем связывается с PVC, обеспечивая доступ к хранилищу. Таким образом, CSI S3 преобразует объектное хранилище в том, который можно монтировать в поды.
Ниже представлен пример манифеста PersistentVolumeClaim для подключения к S3:
Основные параметры PVC манифеста:
apiVersionиkind: Указывают, что данный ресурс являетсяPersistentVolumeClaimверсии v1.metadata: Содержит имя PVC (csi-s3-pvc) и указывает, что он создается в неймспейсеdefault.accessModes: Задает режим доступа к хранилищу. В данном случае используетсяReadWriteMany, что означает возможность чтения и записи в хранилище несколькими подами одновременно.resources.requests.storage: Указывает, что PVC запрашивает 5 GiB пространства в хранилище. Этот объем может быть использован приложением для хранения файлов.storageClassName: Указывает, что используется StorageClass с именемcsi-s3.
Подключение PVC в Deployment
Чтобы приложение могло использовать PVC, его необходимо подключить в манифесте Deployment. Пример ниже демонстрирует, как контейнер с образом Nginx использует подключенный PVC:
Основные элементы манифеста Deployment:
apiVersionиkind: Указывают, что данный ресурс является Deployment версииapps/v1.metadata: Содержит имя деплоймента (s3-app-deployment) и указывает, что он создается в неймспейсеdefault.replicas: Задает количество реплик (в данном случае — 1), что позволяет масштабировать приложение.template: Содержит спецификацию пода, который будет развернут в составе деплоймента.containers: Описывает контейнеры, входящие в состав пода. В этом примере используется контейнер с образомnginx.volumeMounts: Определяет точку монтирования тома в контейнере. В данном случае PVC монтируется в каталог/usr/share/nginx/html, чтобы контейнер мог использовать данные, хранящиеся в S3.volumes: Описывает тома, используемые в поде. Здесь указано, что томs3-storageсвязан с PVCcsi-s3-pvc. Это значит, что данные из S3 будут доступны контейнерам через этот том.
Использование PVC позволяет приложению получить доступ к данным в S3, а также упрощает управление доступом и масштабирование, обеспечивая каждой реплике доступ к общим данным.