Бесплатная миграция IT-инфраструктуры в облако
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

CSI S3

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

Установка CSI S3 при создании нового кластера

При создании нового кластера Kubernetes в Timeweb Cloud на этапе выбора «Дополнения» можно включить поддержку CSI S3.

  • Перейдите к разделу «Дополнения» при настройке кластера.
  • Включите CSI S3, отметив соответствующий пункт.
  • Можно выбрать существующий S3-бакет, создать новый или подключить внешний бакет S3.

Image1

Установка CSI S3 в уже существующем кластере

Если кластер уже создан, добавить CSI S3 можно следующим образом:

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

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

Image2

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

Image3

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

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

Чтобы убедиться, что CSI S3 успешно установлен и подключен, выполните команду для получения списка StorageClass:

kubectl get storageclass csi-s3 -o yaml

Также вы можете просмотреть данные для подключения S3, выполнив следующую команду:

kubectl get secret csi-s3-secret -n csi-s3 -o yaml

Данные будут представлены в секции 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:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-s3-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  storageClassName: csi-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:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: s3-app-deployment
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: s3-app
  template:
    metadata:
      labels:
        app: s3-app
    spec:
      containers:
        - name: s3-app-container
          image: nginx
          volumeMounts:
            - name: s3-storage
              mountPath: /usr/share/nginx/html
      volumes:
        - name: s3-storage
          persistentVolumeClaim:
            claimName: csi-s3-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, а также упрощает управление доступом и масштабирование, обеспечивая каждой реплике доступ к общим данным.

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