Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

CSI S3

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

Установка CSI S3

Добавьте CSI S3 в существующий кластер следующим образом:

  1. Перейдите во вкладку «Дополнения» на странице управления кластером.

  2. Нажмите на три точки рядом с дополнением CSI S3 и выберите «Установить».

Image2

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

Image3

После выбора бакета нажмите «Установить» и дождитесь завершения процесса. После установки бакет будет доступен для использования в кластере, и никаких дополнительных настроек не потребуется.

Проверка установки

Чтобы убедиться, что 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 связан с PVC csi-s3-pvc. Это значит, что данные из S3 будут доступны контейнерам через этот том.

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

Была ли статья полезна?
Ваша оценка очень важна