Я в процессе упаковки приложения для развертывания и запуска в локальном кластере 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? Могу ли я использовать их, чтобы экземпляр вторичной реплики никогда не находился на том же узле, что и его основной экземпляр?