Предположим, у нас есть кластер Kubernetes с двумя зонами, каждая зона имеет два узла (рабочие, N00 и N01 в зоне 0, N10 и N11 в зоне 1). Нам нужен планировщик Kubernetes, который выполняет следующие действия.
(1) Когда мы выполняем развертывание, каждая зона имеет один и только один модуль. Неважно, какой узел в этой зоне.
(2) При сбое узла N00 с запущенным модулем P, если работает N01 в той же зоне, запланируйте модуль на N01. В противном случае запланируйте переход в другую зону, нам сейчас все равно, podAntiAffinity, поэтому любой узел (N10 или N11) в другой зоне работает.
(3) Если N00 был окончательно восстановлен и P был запланирован на N01, мы вообще ничего не делаем, но если N00 был восстановлен, когда P был запланирован в другой зоне, мы хотим, чтобы P был перенесен обратно в исходную зону.
Есть ли какой-нибудь трюк, который мы можем использовать в API Kubernetes для достижения этой цели?