Kubernetes upgrade: две недели, один человек, весь ритм команды

Kubernetes upgrade: две недели, один человек, весь ритм команды

Ладно. “В следующий раз” наступил.

Обновление самого кластера. Чарты обновили, деплои проверили - теперь очередь за нодами.


В случае managed - EKS, GKE, AKS - там действительно есть кнопка. С нюансами: надо следить за версиями аддонов, нод-групп, и не прыгать через минорные версии. Но в целом - терпимо.

В случае self-hosted - обновляем сами. В kubeadm нет кнопки “обновить кластер”. Есть последовательность, которую нельзя перепутать:

  1. Бэкап (он должен быть регулярным, но особенно - перед обновлением)
  2. kubectl drain <node> - выгоняем поды с ноды
  3. apt-mark unhold kubelet kubeadm kubectl
  4. apt install kubelet=1.32.0-1.1 kubeadm=1.32.0-1.1 kubectl=1.32.0-1.1 - версию указываем явно
  5. kubeadm upgrade apply - на мастере, потом kubeadm upgrade node на воркерах
  6. Правим если что-то не так
  7. kubectl uncordon <node>, проверка
  8. Повторяем для каждой следующей ноды

Одна нода за раз. Не все сразу.


В случае kubespray, talos и подобных - обновляем через ту же систему. Но сверяем версии зависимостей: kubespray тоже не всегда успевает за upstream k8s.

После обновления: проверить поды, метрики, алерты.
Потом повторить всё то же самое на проде - с учётом косяков, найденных в деве.


Прошло две недели. Очередной созвон.
“Обновляю ноды, осталась последняя треть.”

Это не прокрастинация. Это реально столько занимает.

Пока идёт обновление - в голове одновременно: совместимость версий, какая нода уже обновлена, что сломалось в деве и надо учесть на проде, не забыть проверить алерты после каждой ноды. Один человек. Полное внимание.

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

Если не написать документацию сразу - через месяц разобраться в заметках можно только воспроизведя весь процесс заново. При следующем обновлении он сможет быстрее фиксить проблемы. Но не избежать их.

Для менеджера это значит: новая фича - подождёт. Срочный фикс - зависит от серьёзности. Онбординг нового разработчика - не лучшее время. Обновление кластера блокирует не одну задачу - оно блокирует весь ритм команды на недели.

Bus-factor здесь не абстрактный. Это конкретно: уйдёт - и вместе с ним уйдут те заметки, список граблей с прошлого обновления, понимание “почему мы делаем вот так, а не иначе”. Следующий человек начнёт сначала. С теми же граблями.


У вас есть runbook по обновлению кластера? Или это “спросить Васю”?
Подписывайся. Пока Вася ещё здесь.

P.S. Это было обновление самого кластера. Но есть ещё один уровень - базовая ОС под ним. Об этом в очередной следующий раз.