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

Подключение сетевых дисков

Сетевые диски удобны для хранения данных, которые нужно сохранять между запусками подов или использовать на разных узлах. Они подходят для баз данных, резервного копирования, масштабирования хранилища по мере необходимости и изоляции данных между приложениями.

При использовании сетевых дисков в кластере действуют те же ограничения, что и при использовании дисков с облачными серверами. Для подключения сетевого диска кластер должен располагаться в Санкт-Петербурге.

CSI-драйвер сетевых дисков предназначен для интеграции сетевых дисков с кластером Kubernetes. Этот драйвер состоит из двух ключевых компонентов:

  1. Контроллер: Отвечает за взаимодействие с API. Его задачи включают создание, удаление и изменение размера сетевых дисков.
  2. Node-агент: Работает на каждом узле кластера и выполняет задачи, связанные с монтированием и управлением дисками на уровне операционной системы. Это включает запросы к API для монтирования или отмонтирования дисков, их форматирование в файловую систему ext4 и, при необходимости, изменение размеров.

Основные особенности драйвера:

  1. Диски автоматически форматируются в ext4.
  2. Драйвер поддерживает только режим ReadWriteOnce. Это означает, что один диск может быть подключен к одной ноде. При этом все поды на ноде будут иметь доступ к диску.

Чтобы использовать сетевые диски в кластере, необходимо установить CSI-драйвер. Рассмотрим, как это сделать.

Установка драйвера CSI

Установить CSI-драйвер можно через панель управления кластером в разделе «Дополнения» или вручную — с помощью Helm. Рассмотрим оба варианта установки.

Для работы драйвера требуется 250 миллиядер и 250 МБ ОЗУ на каждой воркер-ноде. Кроме того, на одной из нод должно быть доступно еще 450 миллиядер и 626 МБ ОЗУ.

В панели управления перейдите в раздел «Дополнения» и нажмите на дополнение «CSI-driver».

Scr 20250818 Lolf

В открывшемся окне нажмите кнопку «Установить».

Scr 20250818 Lpck

Дождитесь завершения установки.

После установки убедитесь, что все поды в неймспейсе csi-driver-timeweb-cloud работают:

    

Проверьте, что драйвер зарегистрирован:

    

Вывод должен быть примерно таким:

    

Обновление драйвера

Способ актуален как при установке драйвера через Helm, так и при установке через панель управления кластером. Для обновления необходимо удалить текущий CSI-драйвер и установить его заново.
После обновления подключенные сетевые диски продолжат работать в штатном режиме — повторное подключение не требуется.

Если драйвер устанавливался при помощи Helm, выполните удаление с помощью kubectl:

    

Если драйвер устанавливался через панель управления, перейдите в раздел «Дополнения» и кликните по карточке «CSI-driver». После этого нажмите кнопку «Удалить».

Scr 20250922 Mzuv

После удаления драйвера установите его заново. Рекомендуем использовать установку через панель управления.

Создание диска при помощи манифеста

Создание диска с использованием CSI-драйвера в Kubernetes начинается с создания PersistentVolumeClaim (PVC). Это запрос на предоставление тома с заданными параметрами, такими как размер, режим доступа и класс хранилища.

Для начала создайте файл pvc.yaml, в котором нужно указать параметры PVC. Пример содержимого файла:

    

В параметрах PersistentVolumeClaim указываются следующие значения:

  • name — имя вашего PVC.

  • namespace — пространство имен, где будет создан запрос.

  • storage — размер диска (минимальный размер — 1 ГБ).

  • storageClassName — класс хранилища:

    • nvme.network-drives.csi.timeweb.cloud — для NVMe-дисков,

    • hdd.network-drives.csi.timeweb.cloud — для HDD.

О различиях между типами сетевых дисков вы можете прочитать в этой статье.

После того, как манифест подготовлен, примените его с помощью команды:

    

Чтобы расширить диск, измените значение параметра storage и повторно примените манифест. Это можно сделать в любой момент.

Стоит учесть, что сам диск на этом этапе еще не будет создан. Он будет создан только тогда, когда PVC будет связан с работающим подом.

Теперь создадим под, который будет использовать созданный PVC. Рассмотрим пример пода с Nginx, подключающим диск в качестве тома. Для этого создайте файл nginx-pod.yaml:

    

В этом файле описывается под, в котором Nginx использует том для хранения данных:

  • volumes — задается подключение тома через PVC, который был создан ранее.

  • claimName — должно совпадать с именем PVC.

  • volumeMounts — указывается, куда именно в файловой системе контейнера будет подключен том (в данном случае — /usr/share/nginx/html).

Примените манифест с помощью команды:

    

Убедитесь, что PVC создан и находится в статусе Bound:

    

Вы должны увидеть подобный вывод:

    

Проверьте состояние пода:

    

Пример вывода:

    

Если под или PVC не создаются, проверьте ошибки в Events:

Для PVC:

    

Для пода:

    

Обратите внимание, что при удалении PVC диск будет удален из панели управления. Если вы хотите предотвратить это, необходимо создать сетевой диск в панели управления и подключить его по инструкции ниже.

Увеличение объема диска

Для увеличения объема существующего диска необходимо обновить манифест PersistentVolumeClaim.

В нашем примере откройте файл pvc.yaml и измените значение в поле spec.resources.requests.storage. Например, чтобы указать 3 ГБ, манифест должен выглядеть так:

    

Сохраните изменения и примените обновленный манифест командой:

    

Подключение существующего диска к кластеру

Если у вас уже есть сетевой диск, который нужно подключить к Kubernetes, вам потребуется описать PersistentVolume (PV). Это действие связывает диск с кластером и позволяет использовать его в подах. Однако важно учитывать, что если на диске ранее были созданы разделы, они будут удалены. Kubernetes не работает с разделами и использует диск как единое пространство.

Создайте файл pv-existing-disk.yaml с описанием PV:

    

Что здесь важно:

  • storageClassName — выберите класс хранения, соответствующий типу вашего диска. Для NVMe-дисков используйте nvme.network-drives.csi.timeweb.cloud, для HDD — hdd.network-drives.csi.timeweb.cloud.

  • persistentVolumeReclaimPolicy: Retain — предотвращает удаление диска, если PVC будет удален.

  • fsType — файловая система, которая будет использоваться.

  • volumeHandle — это идентификатор диска. Чтобы его узнать, откройте раздел «Сетевые диски» в панели управления, выберите нужный диск и скопируйте UUID из URL страницы. 

Selection 142

После описания PV нужно создать PVC, чтобы связать этот диск с подами. Создайте файл pvc-existing-disk.yaml:

    

В этом манифесте обратите внимание на следующие поля:

  • volumeName — должно точно совпадать с именем PV, созданного ранее.

  • storageClassName — должно соответствовать значению, указанному в PV.

  • resources.requests.storage — укажите размер диска, равный значению, указанному в PV.

Примените манифесты с помощью команд:

    

Теперь PVC готов к использованию. Чтобы проверить, что диск подключен корректно, создайте тестовый под, который запишет файл на диск. Для этого подготовьте файл write-file-pod.yaml:

    

Примените манифест пода:

    

Когда под запустится, проверьте содержимое файла, записанного на диск. Для этого выполните команду:

    

В выводе вы должны увидеть:

    

Если вы хотите проверить содержимое диска вне Kubernetes, отключите его от кластера через панель управления, подключите к серверу и примонтируйте диск. Убедитесь, что монтируете весь диск, а не его разделы, так как они не создаются при использовании Kubernetes. После монтирования в корне диска вы найдете файл hello.txt.

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