VK Cloud logo

Работа с постоянными томами (PV)

Постоянные тома (Persistent Volumes, PV) можно подключать к простым демоприложениям различными способами. Далее для подключения будут использованы Persistent Volume Claims (PVC). Для проверки работоспособности приложений и подключенных к ним PV будет создан ресурс Ingress.

Подготовительные шаги

  1. Создайте кластер актуальной версии, если это еще не сделано.

    При создании кластера:

    • Выберите опцию Назначить внешний IP.

    • Создайте одну группу узлов с типом виртуальной машины STD3-2-8 в зоне доступности MS1 с суммарными вычислительными ресурсами: 2 vCPU, 8 ГБ RAM (или можно выбрать более производительный тип). Это необходимо, чтобы можно было разместить все создаваемые далее объекты.

      Например, можно создать одну группу узлов с типом виртуальной машины STD3-2-8.

    Прочие параметры кластера выберите на свое усмотрение.

  2. Убедитесь, что аддон NGINX Ingress (ingress-nginx) установлен в кластере с параметрами по умолчанию. Он потребуется для обеспечения доступа к демоприложениям.

  3. Убедитесь, что вы можете подключиться к кластеру с помощью kubectl.

  4. Установите curl, если утилита еще не установлена.

1. Создайте демоприложения и подключите к ним PV

Далее будет продемонстрировано, как создать несколько веб-приложений на базе NGINX для отображения веб-страниц, записанных на подключенные к этим приложениям PV. Используется образ NGINX nginxdemos/nginx-hello, который отображает веб-страницы из директории /usr/share/nginx/html, поэтому все PV будут монтироваться в поды приложений именно по этому пути.

Можно создать одно или несколько демоприложений, в зависимости от того, с какими способами подключения PV нужно познакомиться.

Подключение блочных хранилищ

Блочные хранилища подключаются к кластеру с помощью Cinder CSI.

При использовании хранилищ такого типа:

  • только один под может иметь доступ к хранилищу (несколько подов не смогут одновременно использовать блочное хранилище);
  • как следствие, для доступа к хранилищу должен использоваться режим ReadWriteOnce.

В этом примере будут созданы:

  1. Динамический PVC, который создаст PV на основе заданных параметров.

  2. Приложение coffee в виде развертывания (deployment) из одного пода и соответствующего ему сервиса (service).

    Для этого приложения также будет создан контейнер инициализации (initContainer), который запишет веб-страницу на PV.

Чтобы подключить PV с помощью динамического PVC:

  1. Изучите особенности подключения:

    1. Необходимый размер хранилища указывается в параметре spec.resources.requests.storage ресурса PersistentVolumeClaim. В данном примере — 1 ГБ.
    2. Для ресурса PersistentVolumeClaim укажите класс хранения в параметре spec.storageClassName. Класс хранения должен использовать ту же зону доступности, что и worker-узел, на котором будет располагаться под приложения. В противном случае попытка подключить к поду на этом узле PV, соответствующий PVC, завершится неудачей. В данном примере под будет размещен на группе worker-узлов в зоне доступности MS1 и использовать класс хранения csi-ceph-hdd-ms1 из этой же зоны.
    3. Режим доступа к хранилищу задается в параметре spec.accessModes для ресурса PersistentVolumeClaim.
    4. Используется ReclaimPolicy Delete для PV (это следует из выбранного класса хранения). При удалении PVC соответствующий этому PV диск будет автоматически удален.
  2. Создайте манифест для приложения coffee.

  3. Примените этот манифест в кластере для создания всех необходимых ресурсов:

    kubectl apply -f ./coffee.yaml

Подключение файловых хранилищ

Файловые хранилища подключаются к кластеру с помощью PV, который настроен на использование существующего хранилища по нужному протоколу, например, NFS.

При использовании хранилищ такого типа:

  • сразу несколько подов могут иметь доступ к хранилищу;
  • как следствие, для доступа к хранилищу должен использоваться режим ReadWriteMany.

В этом примере будут созданы:

  1. Файловое NFS-хранилище в разделе Облачные вычисления платформы VK Cloud.
  2. PV, соответствующий этому хранилищу.
  3. Статический PVC, использующий уже созданный PV.
  4. Приложение milkshake в виде StatefulSet из двух подов, а также соответствующие сервисы (service).

Чтобы подключить PV NFS с помощью статического PVC:

  1. Создайте файловое хранилище.

    При создании укажите:

    • Имя файлового хранилища: любое, например, storage-milkshake.
    • Размер хранилища: 10 ГБ.
    • Протокол: NFS.
    • Cеть: сеть и подсеть, в которых размещен кластер Kubernetes. Эту информацию можно узнать на странице кластера.
    • Cеть файлового хранилища: существующая сеть. Если подходящей сети нет в списке, выберите пункт Создать новую сеть.
  2. Посмотрите информацию о созданном файловом хранилище.

    Сохраните значение параметра Точка подключения.

  3. Изучите особенности подключения:

    1. Размеры хранилища, указываемые в параметрах spec.capacity.storage и spec.resources.requests.storage для ресурса PersistentVolumeClaim, должны совпадать с размером созданного файлового хранилища. В данном примере — 10 ГБ.

    2. Для ресурса PersistentVolumeClaim используйте пустое значение в параметре класса хранения storageClassName.

    3. Для ресурса PersistentVolume:

      1. Режим доступа к хранилищу задается в параметре spec.accessModes для ресурса PersistentVolume.
      2. В наборе параметров spec.mountOptions должна присутствовать запись nfsvers с версией 4.0.
    4. Вместо контейнера инициализации для записи веб-страницы на PV используется однократно запускаемое задание Kubernetes (job). Такой подход работает, потому что в этом случае все поды будут иметь доступ к одному и тому же PV.

    5. Используется ReclaimPolicy Retain для PV, т.к. политика Recycle не позволит мгновенно удалить его, когда он станет не нужен. Очистка PV от данных занимает длительное время. Политика Delete не используется, чтобы можно было контролировать состояние хранилища вручную и случайно не удалить его.

  4. Создайте манифест для приложения milkshake.

    Для ресурса PersistentVolume укажите:

    • IP-адрес из параметра Точка подключения файлового хранилища в качестве значения параметра spec.nfs.server.
    • Данные после IP-адреса (/shares/...) в качестве значения параметра spec.nfs.path.
  5. Примените этот манифест в кластере для создания всех необходимых ресурсов:

    kubectl apply -f ./milkshake.yaml

2. Проверьте работоспособность демоприложений и PV

  1. Создайте манифест для ресурса Ingress, через который будут проходить запросы к приложениям.

  2. Примените этот манифест в кластере для создания всех необходимых ресурсов:

    kubectl apply -f ./cafe-ingress.yaml
  3. Определите публичный IP-адрес Ingress-контроллера.

  4. Проверьте доступность приложений с помощью curl, используя IP-адрес Ingress-контроллера.

    Выполните команду:

    curl --resolve cafe.example.com:80:<IP-АДРЕС_INGRESS> http://cafe.example.com/tea

    Должен быть выведен ответ:

    The tea pod says Hello World to everyone! This file is located on the statically claimed persistent volume.

Удалите неиспользуемые ресурсы

Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы Kubernetes, созданные для проверки работы постоянных томов, вам больше не нужны, удалите их:

  1. Удалите ресурсы, описанные в файлах манифестов:

    kubectl delete -f ./cafe-ingress.yamlkubectl delete -f ./milkshake.yamlkubectl delete -f ./juice.yamlkubectl delete -f ./coffee.yamlkubectl delete -f ./tea.yaml
  2. Удалите неиспользуемые хранилища:

    • диск, который использовался приложением tea;
    • NFS-хранилище, которое использовалось приложением milkshake.

    Все другие хранилища Cinder, созданные с помощью динамических PVC, будут удалены автоматически.

  3. Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.

Была ли статья полезна?