---
title: "Аддон CSI S3 для Kubernetes"
description: "Аддон CSI S3 для Kubernetes. Установка, настройка, примеры использования. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

## Установка CSI S3

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

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

![Image2](https://content.timeweb.com/assets/5f93da12-34fa-48a9-be6a-3b49b4e7f897.png?width=762&height=387)

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

![Image3](https://content.timeweb.com/assets/2c0b7594-5d24-4168-9744-1806a8aaa97e.png?width=764&height=534)

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

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

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

```shell
kubectl get storageclass csi-s3 -o yaml
```

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

```shell
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:

```yml
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:

```yml
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, а также упрощает управление доступом и масштабирование, обеспечивая каждой реплике доступ к общим данным.
