Kubernetes: один под на узел, один постоянный том на под

Мне было любопытно, можно ли полностью отказаться от путей к хостам и использовать вместо них локальные тома (постоянные тома). Однако, похоже, нет способа включить volumeClaimTemplates в набор демонов.

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

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

Связанный вопрос, когда они решили использовать наборы состояний и отказаться от автомасштабирования: Обработка PersistentVolumeClaim в DaemonSet


person kittydoor    schedule 27.12.2019    source источник
comment
Чего вы пытаетесь достичь? StatefulSet предназначен для рабочей нагрузки с отслеживанием состояния. Kubernetes абстрагируется от базовой инфраструктуры, поэтому вам не нужно думать так конкретно о каждом узле.   -  person Jonas    schedule 27.12.2019
comment
@Jonas Я пытаюсь масштабировать решение распределенного хранения (в данном случае glusterfs) на все узлы, на которых есть диски хранения, предназначенные для использования этим решением. Для этой цели я хочу вручную создать локальные тома на этих узлах и пометить их как тома распределенного хранилища, а затем автоматически масштабировать решение для хранения по всем доступным узлам с соответствующими томами.   -  person kittydoor    schedule 27.12.2019
comment
HostPaths - это каталоги на узле, kubernetes.io/docs/concepts/storage/volumes/ В настройке #hostpath и glusterfs уже есть DaemonSet для его использования github.com/gluster/gluster- kubernetes .. Итак, я понимаю, что вы хотите внести некоторые изменения .... но volumeClaims - это более высокая абстракция, поэтому я думаю, что этого следует избегать, когда вы хотите предоставить другую систему хранения?   -  person Jonas    schedule 27.12.2019
comment
@Jonas Смысл локальных томов - держать манифест k8s отдельно от деталей инфраструктуры. Это позволило мне разделить запрос на локальное пространство и то, где именно на диске оно находится. Итак, портативность и наглядность.   -  person kittydoor    schedule 28.12.2019
comment
Да, именно для хранения приложений. GlusterFS сама по себе является системой хранения, поэтому это другой вариант использования, именно поэтому она развернута как DaemonSet с более тесной связью с хранилищем.   -  person Jonas    schedule 28.12.2019
comment
@Jonas Вопрос о том, стоит ли развертывать что-то вроде GlusterFS как демон с путями к хостам или использовать локальные тома, - это отдельный разговор. Конечно, это обсуждение имеет смысл, и я вижу ваш аргумент, но он не отвечает на мой вопрос выше, который не связан с каким-либо конкретным приложением, таким как GlusterFS.   -  person kittydoor    schedule 29.12.2019
comment
StatefulSet не может распространять поды как DaemonSet - потому что это не имеет смысла. В DaemonSet нет volumeClaimTemplate - потому что это не имеет особого смысла. Комбинация, которую вы пытаетесь достичь, странная. Это полностью относится к вашему вопросу.   -  person Jonas    schedule 29.12.2019
comment
@KatherineDoor, пожалуйста, взгляните на: Kubernetes : локальные постоянные тома.   -  person Dawid Kruk    schedule 02.01.2020
comment
@Jonas, вы слишком много внимания уделяете тому, что я упомянул GlusterFS в качестве примера. Есть такие случаи, как netdata или пользовательские службы для удаленного управления, мониторинга / раскрытия данных и т. Д., Которые также извлекают выгоду из этого. Намерение отделить запрос на постоянное хранилище от того, где он существует (на локальном компьютере или в любой удаленной системе), или детали, лежащие в его основе (реплицируемый, единый источник правды), и обеспечить автоматическое управление этим с помощью классов хранилища и Provisioners очень полезны для меня как для наборов состояний, так и для наборов демонов.   -  person kittydoor    schedule 04.01.2020
comment
@DawidKruk да, это то, что я хочу использовать. Проблема в том, что volumeClaimTemplates, которые требуются для привязки к локальным томам, которые являются типом PV (например, шаблон, чтобы все реплики / поды не использовали один и тот же том, а вместо этого получали отдельные тома), является эксклюзивной функцией с сохранением состояния в момент.   -  person kittydoor    schedule 04.01.2020
comment
ReplicaSet и StatefulSet-pods планируются для узлов, которые имеют доступные PersistentVolumes ... это невозможно сделать с DaemonSet, поскольку планирование принудительно отличается   -  person Jonas    schedule 04.01.2020
comment
Было бы нехорошо, если бы модули из DaemonSet нельзя было запланировать, потому что они заблокированы недоступными PersistentVolumes. При использовании DaemonSet вы ожидаете, что планирование будет следовать за NodeSelector.   -  person Jonas    schedule 04.01.2020
comment
@Jonas при использовании нелокальных и динамически подготовленных постоянных томов (например, Rook + Ceph) это не проблема. Если реплика не может быть запланирована на узле из-за отсутствия доступных постоянных томов, это должно быть предупреждено и исправлено в инфраструктуре хранилища.   -  person kittydoor    schedule 04.01.2020


Ответы (1)


На данный момент нет возможности использовать PersistentVolumes в Daemon Set.

Для него был запрос функции на Github, но, к сожалению, он был закрыт. Ссылка на этот запрос: volumeClaimTemplates доступны для наборов демонов

В приведенной выше ссылке есть комментарий, который описывает эту тему немного больше.

person Dawid Kruk    schedule 02.01.2020
comment
Хм, кроме расширения кубернетов с помощью дополнительного контроллера, кажется, что это невозможно сделать прямо сейчас. Известно ли вам о каких-либо контрактах или сторонних проектах по этому поводу? Или какие-либо решения, кроме hostPaths, кто-нибудь решил реализовать? - person kittydoor; 04.01.2020
comment
Мне не известны какие-либо другие сторонние инструменты, которые могут выполнить то, что вы собираетесь делать. - person Dawid Kruk; 06.01.2020