Перед обновлением версии кластера:
- Обновление возможно только на следующую минорную версию или на патч версию. Например, что бы обновиться с 1.23.x до 1.25.x необходимо сначала обновиться до версии 1.24.x и только потом до 1.25.x. Обновляться с одной патч версии до другой можно в произвольной последовательности. Например, с 1.25.0 сразу до 1.25.4.
- Обязательно прочтите Changelog версии на которую вы хотите обновиться. Велика вероятность, что в новой версии удалена поддержка каких либо API или у них изменена версия.
- Поставьте где нибудь тестовый кластер с новой версией kubernetes. И там проверьте все ваши манифесты, helm charts, процедуры CI|CD. Не факт, что всё это будет работать в новой версии кластера.
Обновление версии кластера, документация.
Последовательность простая.
- Обновляем первую control ноду. Все остальные ноды будут получать необходимые параметры из первой ноды.
- Обновляем остальные контрол ноды.
- Обновляем worker ноды.
Не обновляйте ноды кластера одновременно.
- Обновите приложения
kubeadm
,kubelet
иkubectl
до необходимой версии.
Например, в RedHat совместимом дистрибутиве.
dnf update kubelet-1.25.4-0.x86_64 -y
dnf update kubectl-1.25.4-0.x86_64 -y
dnf update kubeadm-1.25.4-0.x86_64 -y
- Запустите процедуру очистки (миграции приложений) этой ноды.
kubectl drain ИМЯ_НОДЫ --ignore-daemonsets
- Обновите ноду.
kubeadm upgrade apply v1.25.4 -y
Обновление ноды достаточно длительная процедура.
- Обязательно перезапустите kubelet.
systemctl restart kubelet
systemctl status kubelet
- В заключении разрешите планировщику размещать на ноде новые поды.
kubectl uncordon ИМЯ_НОДЫ
kubectl get nodes
- Обновите приложения
kubeadm
,kubelet
иkubectl
до необходимой версии.
Например, в RedHat совместимом дистрибутиве.
dnf update kubelet-1.25.4-0.x86_64 -y
dnf update kubectl-1.25.4-0.x86_64 -y
dnf update kubeadm-1.25.4-0.x86_64 -y
- Запустите процедуру очистки (миграции приложений) этой ноды.
kubectl drain ИМЯ_НОДЫ --ignore-daemonsets
- Обновите ноду.
kubeadm upgrade node
Обновление ноды достаточно длительная процедура.
- Обязательно перезапустите kubelet.
systemctl restart kubelet
systemctl status kubelet
- Разрешите планировщику размещать на ноде новые поды.
kubectl uncordon ИМЯ_НОДЫ
kubectl get nodes
- Обновите приложения
kubeadm
,kubelet
иkubectl
до необходимой версии.
Например, в RedHat совместимом дистрибутиве.
dnf update kubelet-1.25.4-0.x86_64 -y
dnf update kubectl-1.25.4-0.x86_64 -y
dnf update kubeadm-1.25.4-0.x86_64 -y
- Запустите процедуру очистки (миграции приложений) этой ноды.
На control ноде
kubectl drain ИМЯ_НОДЫ --ignore-daemonsets
- Обновите ноду.
kubeadm upgrade node
Обновление ноды достаточно длительная процедура.
- Обязательно перезапустите kubelet.
systemctl restart kubelet
systemctl status kubelet
- Разрешите планировщику размещать на ноде новые поды.
На control ноде:
kubectl uncordon ИМЯ_НОДЫ
kubectl get nodes
Я не проверял эти плейбуки на боевых серверах! Используйте их на свой страх и риск.