VK Cloud logo
Обновлена31 октября 2023 г. в 06:09

Постоянные тома и PVC

Постоянный том (persistent volume, PV) предоставляет возможности для длительного хранения данных в кластерах Kubernetes. Данные, хранящиеся на PV, не теряются при сбое отдельного контейнера или пода целиком.

В рабочих нагрузках (workloads) нельзя использовать PV напрямую. Необходимо дополнительно создать Persistent Volume Claim (PVC), который позволяет запросить постоянный том с нужными параметрами и затем использовать его в рабочих нагрузках. Самые распространенные параметры, которые можно указать в PVC:

  • Объем хранилища (spec.resources.requests.storage).

  • Режим доступа (spec.accessModes) к тому.

    Kubernetes поддерживает следующие режимы доступа к тому:

    • ReadWriteOnce (RWO): том может быть примонтирован в режиме «чтение и запись» одним узлом (node) кластера. Такой том может использоваться несколькими подами сразу, если все они размещены на одном узле, к которому примонтирован этот том.

    • ReadOnlyMany (ROX): том может быть примонтирован в режиме «только чтение» несколькими узлами кластера.

    • ReadWriteMany (RWX): том может быть примонтирован в режиме «чтение и запись» несколькими узлами кластера.

    С помощью PVC можно запросить PV, который способен работать сразу в нескольких режимах, но при монтировании такого PV придется выбрать один из режимов. Например, если с помощью PVC запрошен PV с режимами RWO и RWX, будет доступно одно из действий:

    • либо примонтировать этот PV в режиме RWO одним узлом кластера;
    • либо примонтировать этот PV в режиме RWX несколькими узлами кластера;

Жизненный цикл PV и PVC

Жизненный цикл PV и PVC не зависит от жизненного цикла подов и состоит из четырех последовательных этапов:

  1. Подготовка (provisioning).
  2. Связывание (binding).
  3. Использование (using).
  4. Освобождение (reclaiming).

1. Подготовка

Чтобы PV можно было запросить с помощью PVC, его нужно заранее подготовить одним из способов:

  • Статическая подготовка (static provisioning): PV создается вручную, например, администратором Kubernetes.
  • Динамическая подготовка (dynamic provisioning): PV создается автоматически после создания PVC.

Для динамической подготовки необходимо выполнение двух условий:

  • В кластере Kubernetes должны быть настроены классы хранения (storage classes). Кластеры Cloud Containers уже содержат преднастроенные классы хранения.

  • Для PVC не должно быть найдено подходящих PV, которые уже существуют.

В ходе динамической подготовки Kubernetes попытается создать PV, соотвествующий параметрам PVC. Будет использован один из классов хранения:

  • класс хранения, явно заданный в PVC;
  • класс хранения по умолчанию, если класс не задан в PVC явно.

В кластерах Cloud Containers класс хранения по умолчанию не настроен. Если вы не планируете явно задавать класс хранения в PVC, то перед созданием PVC выберите вручную класс хранения по умолчанию.

2. Связывание

Для использования в рабочих нагрузках PV и PVC связываются по принципу «один к одному». Уже связанный PV нельзя использовать с другими PVC.

Когда в кластере Kubernetes появляется новый PVC:

  1. Kubernetes пытается найти подходящий PV, который доступен для связывания (статус PV: Available) и максимально точно отвечает параметрам, заданным в PVC.

    Если нет доступных PV, которые в точности соответствуют заданным в PVC параметрам, может быть выбран PV с избыточными характеристиками. Следите за доступными PV и создаваемыми PVC, чтобы не допустить ситуации, когда все PV большого объема связаны с PVC, которые запрашивают небольшие объемы хранилища. Место на таких PV будет расходоваться нерационально и они не будут доступны для связывания, когда в кластере появятся PVC, требующие большого объема хранилища.

  2. Kubernetes выполняет одно из действий:

    • Если подходящий PV был найден, Kubernetes связывает его с PVC.
    • Если подходящий PV не был найден, то Kubernetes сначала пытается выполнить динамическую подготовку тома, а затем связать созданный PV с PVC.
  3. PVC, с которым не удалось связать ни один PV, находится в состоянии Unbound. Рабочие нагрузки не могут работать с таким PVC в качестве тома. Kubernetes будет периодически пытаться связать такой PVC с новыми PV, если они появятся в кластере.

3. Использование

После того, как Kubernetes связал PVC с PV, этот PVC может использоваться рабочей нагрузкой как обычный том.

4. Освобождение

Когда PVC больше не нужен и удаляется, то к PV, связанному с этим PVC, применяется заданная политика освобождения (reclaim policy).

Политика задается одним из способов:

  • при создании постоянного тома вручную;
  • при установке класса хранения по умолчанию или установке класса хранения в PVC.

Доступные политики:

  • Оставить том (Retain).

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

  • Удалить том (Delete).

    В зависимости от выбранного типа PV также может быть удалено связанное с PV нижележащее хранилище.

В кластерах Cloud Containers выбранный тип хранилища влияет на доступные политики освобождения.

Смотрите также