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: