Ответ вслух Senior Архитектура Kubernetes обновлено

Что происходит при отказе узла

Вопрос

Один рабочий узел внезапно выключился. Что будет с подами на нём и через какое время сервис восстановится?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

kubelet регулярно продлевает Lease узла. Когда узел выключился, обновления прекращаются, и контроллер узлов через несколько десятков секунд (параметр node-monitor-grace-period) помечает узел как недоступный и вешает на него taint unreachable.

Что должно прозвучать в ответе

  • kubelet перестаёт обновлять heartbeat (Lease), контроллер узлов через `node-monitor-grace-period` помечает узел недоступным (Unknown)

  • Поды на узле получают taint `node.kubernetes.io/unreachable`, по умолчанию толерантность 300 секунд, после чего поды вытесняются

  • ReplicaSet создаёт замену на других узлах, если есть ресурсы

  • Пока узел не помечен, Service может слать трафик на мёртвые поды, если readiness не обновилась; помогают несколько реплик и anti-affinity

  • StatefulSet не пересоздаёт под с тем же именем, пока старый не удалён подтверждённо: защита от двух писателей в один том

  • Ускорение: настроить tolerationSeconds, PodDisruptionBudget, распределение реплик по зонам

Что могут спросить следом

  • Почему StatefulSet ведёт себя осторожнее Deployment?
  • Как уменьшить время реакции на отказ узла?

Разбор

kubelet регулярно продлевает Lease узла. Когда узел выключился, обновления прекращаются, и контроллер узлов через несколько десятков секунд (параметр node-monitor-grace-period) помечает узел как недоступный и вешает на него taint unreachable. У подов по умолчанию есть толерантность к этому taint на 300 секунд, так что ещё около пяти минут они считаются живыми на этом узле. После этого поды вытесняются, а ReplicaSet создаёт замену на других узлах, если хватает ресурсов. EndpointSlice убирает поды недоступного узла, когда узел помечен, но до этого часть запросов может уходить в никуда, поэтому важны несколько реплик на разных узлах и повторы на клиенте. StatefulSet осторожнее: он не создаст под с тем же именем, пока старый не удалён, чтобы два экземпляра не писали в один том; если узел не вернётся, оператор удаляет под принудительно. Ускорить реакцию можно уменьшив tolerationSeconds, а уменьшить влияние распределением реплик по узлам и зонам через anti-affinity и topology spread.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме