Kubernetes: настройка планирования Pod и планирования томов - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь использовать Kubernetes для управления сценарием, в котором мне нужно запустить несколько экземпляров приложения (то есть несколько модулей). Это мои требования:

  1. Когда мне нужно расширить свое приложение, я хочу развернуть один модуль Pod на определенном узле (не случайном).
  2. Когда мне нужно уменьшить свое приложение, я хочу удалить конкретный Pod из определенного узла (не случайный).
  3. Когда развертывается новый Pod, я хочу, чтобы он монтировал определенный PersistentVolume (не случайный), который я подготовил вручную.
  4. После удаления модуля, я хочу, чтобы его PersistentVolume мог повторно использоваться другим модулем.

До сих пор я использовал это наивное решение для выполнения всего вышеперечисленного: каждый раз, когда мне нужно было создать новый экземпляр моего приложения, я создавал одно новое развертывание (с ровно одной репликой) и одно PersistentVolumeClaim. Например, если мне нужно пять экземпляров приложения, мне нужно пять развертываний. Однако это решение не очень масштабируемо и не использует весь потенциал Kubernetes.

Я думаю, что было бы намного разумнее использовать один единый шаблон для всех модулей, но я не уверен, должен ли я использовать Deployment или Statefulset.

Я экспериментировал с Labels и Node Affinity и обнаружил, что могу удовлетворить требование 1, но не могу удовлетворить требование 2 таким образом. Чтобы удовлетворить требование 2, можно ли было бы удалить конкретный Pod, написав свой собственный планировщик?

Я не понимаю, как Kubernetes решает связать определенный PersistentVolume с конкретным PersistentVolumeClaim. Есть ли планировщик громкости? Можно ли как-то его настроить? Таким образом, каждый раз, когда создается новый Pod, я смогу привязать его к определенному объему.

1 Ответ

0 голосов
/ 12 ноября 2018

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

Да - с помощью nodeSelector, использующего метки, правила сродства к узлу и анти-сродства правила, пакеты могут быть запланированы на "подходящих" узлах.

Статические стручки может быть чем-то близким к тому, что вы ищете. Я никогда не использовал статические стручки / голые стручки в Кубернетесе ... они вроде не (чтобы процитировать что-то из вопроса) "... используют весь потенциал Кубернетов"; -)

В противном случае, вот что, я думаю, будет работать с готовыми конструкциями для четырех требований:

Используйте развертывание, как у вас - это даст вам требования № 1 и № 2. Я не верю, что с помощью StatefulSet можно удовлетворить требование № 2 (на самом деле, № 1). Ни с ReplicaSet .

Используйте статически предоставленные PV и селектор (ы) , чтобы (процитировать) "... связать определенный PersistentVolume с конкретным PersistentVolumeClaim" для требования № 3.

Тогда станет возможным требование № 4 - просто убедитесь, что PV используют правильную политику reclaim .

...