Рассмотрим Statefulset (Cassandra на официальном примере K8S) в трех зонах доступности:
- cassandra-0 -> зона а
- кассандра-1 -> зона б
- кассандра-2 -> зона c
Каждый модуль Cassandra использует том EBS. Итак, родство возникает автоматически. Например, кассандра-0 не может переместиться в «зону-b», потому что ее объем находится в «зоне-а». Все хорошо.
Если некоторые ноды / рабочие Kubernetes выйдут из строя, они будут заменены. Поды снова запустятся на новом узле и снова подключат свой том EBS. Похоже, ничего не произошло.
Теперь, если вся "зона-а" AZ выходит из строя и какое-то время недоступна (это означает, что cassandra-0 больше не может запускаться из-за привязки к EBS в той же зоне). У вас осталось:
- кассандра-1 -> зона б
- кассандра-2 -> зона c
Kubernetes никогда не сможет запустить cassandra-0, пока «zone-a» недоступна. Это все хорошо, потому что cassandra-1 и cassandra-2 могут обслуживать запросы.
Теперь, если вдобавок к этому другой узел K8S выйдет из строя или у вас настроено автоматическое масштабирование инфраструктуры, вы можете получить cassandra-1 или cassandra-2, необходимые для перехода на другой узел K8S. Это не должно быть проблемой.
Однако из моего тестирования K8S не будет этого делать, потому что модуль cassandra-0 отключен. Он никогда не будет самостоятельно лечить кассандру-1 или кассандру-2 (или любую другую кассандру-X), потому что сначала он хочет вернуть кассандру-0. И cassandra-0 не может запуститься, потому что его громкость находится в зоне, которая не работает и не восстанавливается.
Итак, если вы используете Statefulset + VolumeClaim + для разных зон, И вы испытываете сбой всей зоны доступности, И вы испытываете сбой EC2 в другой зоне доступности или имеете автоматическое масштабирование вашей инфраструктуры
=> тогда вы потеряете все свои стручки Кассандры. До тех пор, пока зона-а не вернется в режим онлайн
Это похоже на опасную ситуацию. Есть ли способ для набора с отслеживанием состояния не заботиться о порядке и по-прежнему самовосстановиться или запустить больше подов на кассандре-3, 4, 5, X?