Почему мне следует использовать постоянные тома Kubernetes вместо томов

Чтобы использовать хранилище внутри Kubernetes POD, я могу использовать тома и постоянные тома. Хотя тома, подобные emptyDir, недолговечны, я мог бы использовать hostPath и многие другие облачные плагины томов, которые обеспечили бы постоянное решение для самих томов.

В таком случае, почему я должен использовать постоянный том?


person Aditya Bhuyan    schedule 25.05.2021    source источник


Ответы (3)


PersistentVoluemes - это хранилище на уровне кластера, которое позволяет управлять хранилищем более централизованно.

Когда вы настраиваете volume (используя hostPath или любой из облачных подключаемых модулей томов), вам необходимо выполнить эту настройку в файле определения POD. Вся информация о конфигурации, необходимая для настройки хранилища для тома, содержится в файле определения POD.

Когда у вас есть большая среда с большим количеством пользователей и большим количеством POD, пользователям придется каждый раз настраивать хранилище для каждого развертываемого POD. Какое бы решение для хранения ни использовалось, пользователь, развертывающий POD, должен будет настроить это хранилище для всех своих файлов определений POD. Если необходимо внести изменение, пользователь должен будет сделать это изменение на всех своих POD. После определенного масштаба это не самый оптимальный способ управления хранилищем.

Вместо этого вы хотели бы управлять этим централизованно. Вы хотите управлять хранилищем таким образом, чтобы администратор мог создать большой пул хранилища, а пользователи могли выделить часть этого хранилища по мере необходимости, и это именно то, что вы можете сделать с помощью PersistentVolumes и PersistentVolumeClaims.

person Ravi Kant Asthana    schedule 25.05.2021

Очень важно понимать основные различия между Volumes и PersistentVolumes. Оба Volumes и PersistentVolumes являются ресурсами Kubernetes, которые обеспечивают абстракцию хранилища данных.

  • Volumes: пусть ваш модуль записывает в файловую систему, которая существует, пока существует модуль. Они также позволяют обмениваться данными между контейнерами в одном модуле, но данные в этом томе будут уничтожены при перезапуске модуля. Volume отделяет хранилище от Контейнера. Его жизненный цикл связан с модулем.

  • PersistentVolumes: служит долгосрочным хранилищем в вашем кластере Kubernetes. Они существуют вне контейнеров, модулей и узлов. Модуль использует заявку на постоянный том, чтобы получить доступ для чтения и записи к постоянному тому. PersistentVolume отделяет хранилище от модуля. Его жизненный цикл независим. Это обеспечивает безопасный перезапуск модулей и обмен данными между модулями.

Когда дело доходит до hostPath:

Том hostPath монтирует файл или каталог из файловой системы хост-узла в ваш Pod.

hostPath имеет свои сценарии использования, но в целом его можно не рекомендовать по нескольким причинам:

  • Модули с одинаковой конфигурацией (например, созданные из PodTemplate) могут вести себя по-разному на разных узлах из-за разных файлов на узлах.

  • Файлы или каталоги, созданные на базовых хостах, доступны для записи только пользователю root. Вам нужно либо запустить процесс от имени пользователя root в привилегированном контейнере, либо изменить права доступа к файлам на хосте, чтобы иметь возможность записи на том hostPath.

  • Вы не всегда напрямую контролируете, на каком узле будут работать ваши модули, поэтому вам не гарантируется, что модуль будет фактически запланирован на узле, на котором есть объем данных.

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

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

Я рекомендую Руководство по объемам Kubernetes в качестве приятного дополнения к этой теме.

person Wytrzymały Wiktor    schedule 25.05.2021
comment
Большое тебе спасибо. - person Aditya Bhuyan; 27.05.2021
comment
Привет @AdityaBhuyan. Попробуйте принять ответ, если он решит вашу проблему. - person Wytrzymały Wiktor; 27.05.2021
comment
Да, я это сделал. - person Aditya Bhuyan; 08.06.2021

Используйте PersistentVolumes, когда вам нужно настроить базу данных, например MongoDB, Redis, Postgres и MySQL. Потому что это долгосрочное хранение и не связано с вашими стручками! Идеально подходит для приложений баз данных. Потому что они не умрут вместе со стручками.

Не используйте Объемы, когда вам нужно долгое хранение. Потому что они умрут вместе со стручками!

В моем случае, когда мне нужно что-то хранить, я всегда буду использовать постоянные тома!

person Md Fazlul Karim    schedule 25.05.2021
comment
Но дело обстоит с Volumes + hostPath = PersistentVolume. Если я использую hostPath, хранилище не умрет с POD. Он будет доступен для использования после того, как POD умрет. - person Aditya Bhuyan; 27.05.2021
comment
Но это глубоко взаимосвязано. В одно прекрасное утро весь ваш сервер может отключиться на несколько секунд для повышения качества. Поскольку ваша база данных использует этот том, в ситуации с высоким уровнем параллелизма может возникнуть несогласованность данных. Поскольку он глубоко связан, что вы будете делать, когда выйдет из строя весь сервер. Постоянные тома безотказны и управляются серверными компаниями. Сделать резервную копию проще. Кстати, вы можете использовать тома любыми способами, но не должны. Теперь твое дело. - person Md Fazlul Karim; 27.05.2021