Kured — демон перезагрузки Kubernetes

Kured (KUbernetes REboot Daemon) — это демон Kubernetes, который выполняет безопасные автоматические перезагрузки узлов. Он запускается системой управления пакетами базовой ОС.

По сути Kured:

  • Следит за наличием напоминания о перезагрузке, например, /var/run/reboot-required.
  • Использует блокировку на сервере API, чтобы обеспечить одновременную перезагрузку только одного узла.
  • Опционально отменяет перезагрузку при наличии активных предупреждений Prometheus.
  • Выполняет cordons и drains рабочих узлов перед перезагрузкой и uncordon после.

Проблема перезагрузки

В Weaveworks кластеры разработки и производства, лежащие в основе Weave Cloud, организованы с использованием Kubernetes. Он работает на EC2, поддерживаемом Terraform и Ansible.
Экземпляры EC2 запускают Ubuntu 16.04 с включенным unattended-upgrades, поэтому необходимо периодически перезагружать компьютеры (главным образом в ответ на обновления ядра). Если компьютеры не перезагружены, кластеры подвергаются риску от уязвимостей безопасности и в конечном итоге заканчивается дисковое пространство, поскольку ОС не может удалить старые ядра и модули.

Первая попытка

Наш первоначальный подход к этой проблеме состоял в том, чтобы вызвать предупреждение Prometheus, когда файл /var/run/reboot-required появился на любом из узлов. Перед тем как выключить поды, мы попытались связать предупреждение с ручным процессом (который повлек за собой ожидаемый безопасный момент, определяемый как отсутствие активных предупреждений), – а затем поочередно перезагрузить каждый узел.

Автоматизация делает все лучше

Несмотря на первые попытки, частота обновлений ОС в сочетании с количеством узлов привела нас в конечном итоге к автоматизированному решению. И поэтому в течение последних шести месяцев все перезагрузки были проведены безопасно и автоматически kured, нашим демоном перезагрузки Kubernetes.

За это время kured осуществил сотни перезагрузок узлов в наших dev- и prod-кластерах без вмешательства человека. До относительно недавнего добавления уведомлений Slack мы в основном не знали, что перезагрузки узлов вообще происходят.

Kured здесь!

Теперь, когда мы уверены, что Kured эффективен в течение длительного периода оперативного использования, мы рады поделиться релизом 1.0.0 с сообществом в соответствии с лицензией Apache 2. Kured должен работать с большинством установок и дистрибутивов Kubernetes. Подробнее о том, как это работает, на Github: