Kubernetes - StatfulSets, как привязать экземпляры с состоянием к узлам? - PullRequest
0 голосов
/ 02 ноября 2018

Я в процессе упаковки приложения для развертывания и запуска в локальном кластере Kubernetes. Пока все было здорово, но я борюсь за компонент, который по сути является базой данных. Этот компонент требует 3 основных узла с 2 репликами. Интересно то, что главный узел сам по себе считается репликой и должен быть настроен как таковой (для целей шардинга). Поскольку это происходит заранее, мне необходимо сбалансировать пары главного узла и реплики на трех физических хостах, чтобы на каждом хосте работали уникальные пары узлов и реплик.

Это пример того, как будет выглядеть макет, где N == главный узел и R == реплика.

Host1  Host2  Host3
 N1R1   N2R1   N3R1
 N3R2   N1R2   N2R2

Я могу сгенерировать необходимую конфигурацию, используя StatefulSets и некоторую магию руля с порядковыми номерами контейнера init, но я изо всех сил пытаюсь привязать экземпляры N1R1 и N3R2 к хосту 1, N2R1 и N1R2 к хосту 2, а экземпляры N3R1 и N2R2 к Хост 3. Мне нужно сделать это для обеспечения целостности данных. Я что-то упустил с постоянными регуляторами громкости? Или какой-то параметр в StatefulSets, который позволяет мне получить доступ к базовому узлу Kubernetes, чтобы определить, какие пары узлов и реплик работают в каком месте?

А как насчет Affinity и AntiAffinity? Могу ли я использовать их, чтобы экземпляр вторичной реплики никогда не находился на том же узле, что и его основной экземпляр?

1 Ответ

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

Вы ищете Anti-Affinity. Чтобы избежать планирования 2 модулей на одном узле, вы должны использовать topologyKey: "kubernetes.io/hostname" в описании ресурса.

Вот ссылка в официальной документации с примером.

А вот ссылка для более глубокого понимания, как это работает.

...