2017-01-06 2 views
2

Я экспериментирую с Кассандрой и Редисом на Кубернете, используя the examples for v1.5.1.StatefulSet: стручки застряли в неизвестном состоянии

  • С Кассандрой StatefulSet, если завершение работы узла без слива или удалить его с помощью kubectl, Pod этого узла остается вокруг навсегда (по крайней мере в течение недели, во всяком случае), не перемещается на другой узел.
  • С Redis, несмотря на то, что стручок крутится как с Cassandra, the sentinel service запускает новый блок, поэтому количество функциональных контейнеров всегда поддерживается.

Есть ли способ автоматически перемещать модуль Cassandra на другой узел, если узел опускается? Или мне нужно слить или удалить узел вручную?

ответ

4

См. Документацию here.

Kubernetes (версии 1.5 или более поздней версии) не будут удалены Бобы только потому, что узел недоступен. Подсеты, запущенные на недоступном узле, вводят состояние «Прекращение» или «Неизвестное» после таймаута. Pods также могут вводить эти состояния, когда пользователь пытается изящно удалить Pod на недоступном узле. Единственные способы, в которых Pod в такое состояние может быть удалены из apiserver следующим образом:

  • Объект Node удаляется (либо вами, либо контроллером узла).
  • Кубелет на неответчивом узле начинает отвечать, убивает Подгруппу и удаляет запись из привратника.
  • Удаление пользователя пользователем Pod.

Это было изменение поведения введено в kubernetes 1,5, что позволяет StatefulSet приоритеты безопасности.

Там нет никакого способа, чтобы различать следующие случаи:

  1. Экземпляр закрываются без объекта Node удаляется.
  2. Сетевой раздел вводится между рассматриваемым узлом и кубернетом-мастером.

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

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

Однако, если вы используете on-prem, это может не произойти. Рекомендуется удалять объект Node из кубернетов при его выключении или иметь цикл согласования, сохраняя идею Kubernetes Nodes в синхронизации с фактическими доступными узлами.

Еще один контекст находится в github issue.