Запуск набора состояний k8s в спотовом экземпляре AWS - PullRequest
0 голосов
/ 30 ноября 2018

В прошлом мы запускали некоторые приложения с отслеживанием состояния (например, базу данных) на экземплярах AWS по требованию / зарезервированные ec2, и сейчас мы рассматриваем возможность перемещения этого приложения в набор состояний k8s с PVC.

У меня такой вопрос?рекомендуется использовать k8s statefulset на месте, чтобы снизить стоимость?Так как мы можем использовать kube-spot-termination-note-handler, чтобы испортить узел, чтобы переместить модуль в другие, прежде чем экземпляр spot будет завершен, похоже, что это не должно быть проблемой, если у statefulset есть несколько реплик, чтобы предотвратить прерывание службы.

Ответы [ 2 ]

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

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

  • Mysql master / slave / cluster.Любой сбой узла может привести к непредсказуемым ошибкам и / или простоям перед восстановлением или к возврату узлов (с разными IP-адресами!)

  • Cassandra.Любой узел, идущий вверх / вниз, приведет к перебалансировке вашего кластера.Если они будут расти и падать, они будут постоянно восстанавливаться!Не говоря уже о том, что если у вас все узлы в точечных инстансах, у вас есть шанс, что большинство из них выйдет из строя.

Точки отлично подходят для больших одноразовых пакетных заданий, и этоони не ограничены во времени.Это может быть любая обработка данных или, например, создание или обновление модели M / L.

Они также отлично подходят для служб без сохранения состояния, то есть приложения, которое находится за балансировщиком нагрузки и использует хранилище состояний, которое не находится вточечный экземпляр (Mysql, Cassandra, CloudSQL, RDS и т. д.)

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

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

Вероятно, нет единственного ответа на этот вопрос: это действительно зависит от того, какую рабочую нагрузку вы хотите выполнить, и насколько терпимо ваше приложение к сбоям.Когда точечный экземпляр должен быть прерван (с более высокой ставкой, больше нет в наличии ...), хорошо выполненный StatefulSet или любой другой соответствующий контроллер действительно выполнит свою работу, как и ожидалось, и обычно довольно быстро (в секундах).

Но учтите, что неправильно утверждать, что:

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

См. саму документацию AWS https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#using-spot-instances-managing-interruptions и вот выдержка "[...] возможно, что ваш точечный экземпляр прерван до того, как предупреждение можетбыть доступными ".

Таким образом, реальный вопрос заключается в следующем: Насколько терпимо ваше приложение к удалению неподготовленных ресурсов?

Если у вас всего 2 EC2, на которых работают сотнииз каждого из стручков вы, скорее всего, НЕ захотите использовать точечные экземпляры, так как ваша служба будет сильно ухудшена, если один из 2 экземпляров будет прерван, до тех пор, пока не заработает новый или пока не произойдет перерисовка k8s.исправляет нагрузку (при условии, что другой экземпляр достаточно большой).Сотни EC2 с несколькими пакетами в каждом и немного превышающими правила автоматического масштабирования?Вы также можете просто пойти на это и использовать спотовую экономию!

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

Но вы говорили о базах данных: так как насчет репликации?Это быстро и автоматизировано?Существует ли несколько копий данных, позволяющих потерять реплики от 1 до n? ..

Другими словами: для этого требуется хорошее планирование и тщательное тестирование в масштабе.Хорошей новостью является то, что это легко сделать: запустите нагрузочное тестирование и добровольно завершите работу экземпляра, ответы встретят вас там!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...