Обновление Kubernetes: запуск, режимы и переходы между версиями
Где запускать обновление
Обновление кластера (включая версию Kubernetes) запускается в GUI на дашборде кластера — кластера управления или клиентского кластера или с помощью команд в CLI.
Где посмотреть доступные версии
В графическом интерфейсе — блок «Обновление» на дашборде кластера. Если доступна хотя бы одна новая версия, об этом сообщается непосредственно в блоке. Полный список стабильных версий, доступных для обновления с текущей версии, открывается по кнопке управления обновлением.
Полная карта — Карта версий обновлений.
Скриншот: управление обновлением на дашборде

Нажмите Управлять для перехода к выбору версии и настройки сценариев обновления.

В CLI доступные версии можно посмотреть в ресурсе ShturvalUpdateChannel.
Так запускается обновление до версии 2.15 включительно. Когда кластер уже на 2.15, следующее обновление описано в разделе Обновление с версии 2.15.
Рекомендации перед обновлением
- Ознакомьтесь с release notes целевой версии — там могут быть breaking changes и миграционные шаги.
- Создайте резервную копию кластера управления перед обновлением.
- Проверьте карту версий — убедитесь, что прямой переход поддерживается. Если нет — спланируйте обновление через промежуточную версию.
Обновляйте клиентские кластеры только после обновления кластера управления!
Режимы обновления
Обновление запускается вручную — через графический интерфейс или kubectl.
- Выберите кластер в левом меню.
- На дашборде найдите блок «Обновление» (рядом с текущей версией кластера).
- Нажмите Управлять.
- В модальном окне выберите версию из списка доступных.
- Нажмите Обновить.
Из окна обновления вы можете перейти по ссылке на список релизов в публичной документации. Перед выбором версии проверьте в Release notes изменения и необходимые к выполнению дополнительные действия до и после запуска обновления.
Если отображается «Обновлений нет» — у вас последняя доступная версия для текущего канала.
Скриншот: окно выбора версии для обновления кластера

Укажите целевую версию в ресурсе ShturvalUpdate:
kubectl -n shturval-update-system patch su shturval-update --type=merge -p '{"spec":{"version":"X.Y.Z"}}'
Замените X.Y.Z на нужную версию.
Пример — обновление до версии 2.14.0:
kubectl -n shturval-update-system patch su shturval-update --type=merge -p '{"spec":{"version":"2.14.0"}}'
Отложенное обновление позволяет настроить одно или несколько сценариев, по которым система автоматически запускает обновление при наличии доступной версии.
- Дашборд кластера → блок «Обновление» → Управлять.
- Нажмите + рядом с «Настройка отложенного обновления».
- Укажите:
- Расписание UTC — в формате cron (значения через пробел);
- Длительность окна обновления — сколько времени может использоваться для обновления (по умолчанию 4 часа, минимум 30 минут);
- Поведение при превышении окна: остановиться (UpdatePaused) или продолжить;
- Разрешить минорные версии — если нет, автоматически обновляются только патч-версии.
- Нажмите Добавить.
После сохранения настроек отложенного обновления рассчитываются дата и время следующего запуска обновления кластера в UTC. Если вычислить следующий запуск пока невозможно, дата и время не отображаются в интерфейсе.
Скриншот: окно создания расписания для обновления кластера

Создайте манифест и примените его:
apiVersion: update.shturval.tech/v1beta1
kind: ShturvalUpdateSchedule
metadata:
name: update-schedule
namespace: shturval-update-system
spec:
allowMinorVersion: true
pauseIfUpdatePeriodExceed: false
schedule: "0 8 26 9 *"
updatePeriod: "10h0m0s"
| Параметр | Описание |
|---|---|
schedule | Расписание в формате cron в UTC |
updatePeriod | Длительность окна обновления (например, 24h0m0s) |
pauseIfUpdatePeriodExceed | Остановить обновление при превышении окна (true) или продолжить (false) |
allowMinorVersion | Разрешить автоматическое обновление до минорных версий |
Чтобы запускать обновление по расписанию, укажите имя ShturvalUpdateSchedule в ShturvalUpdate:
kubectl -n shturval-update-system patch su shturval-update --type=merge -p '{"spec":{"followSchedule":"update-schedule"}}'
Изменение и удаление расписания
- Изменить — выберите расписание в модальном окне и настройте заново. Если обновление уже идёт, будет применён новый сценарий.
- Удалить — возможно только если обновление по этому расписанию ещё не начато.
Этапы обновления
После запуска обновление проходит следующие этапы (отображаются на дашборде):
- Обновление модуля shturval-update — обновление самого модуля обновления.
- Принудительное удаление устаревших сервисов — этап может быть пропущен при отсутствии таких сервисов.
- Обновление shturval-node-config — модуль управления конфигурациями узлов.
- Обновление версии Kubernetes — обновление компонентов Kubernetes в кластере.
- Обновление системных сервисов — обновление версий сервисов платформы (мониторинг, логирование и др.).
Статусы этапов
Цветовая индикация на дашборде:
- Зелёный — этап успешно завершён;
- Жёлтый — этап выполняется;
- Серый — этап не инициализирован.
При использовании отложенного обновления: если обновление не успело завершиться в указанное окно и настроено поведение «остановиться», отображается статус UpdatePaused. Для возобновления нажмите Продолжить вне расписания.
Кастомные ресурсы
| Ресурс | Назначение |
|---|---|
| ShturvalUpdate | Задаёт версию обновления, отображает статус |
| ShturvalUpdateChannel | Канал обновления (в платформе доступен только стабильный) |
| ShturvalUpdateSchedule | Параметры отложенного обновления по расписанию |
Общий обзор этих и других кастомных ресурсов платформы приведён на странице «Кастомные ресурсы в платформе».
Особые шаги для отдельных переходов
Некоторые переходы требуют дополнительных действий. Если ручные действия требуются, это указано в release notes целевой версии.
Обновление узлов кластера
В процессе обновления происходит замена версии только на созданных в кластере узлах. Новые создаваемые узлы будут иметь старую версию. Это обусловлено версией, определенной в InfraMachineTemplate. После завершения обновления необходимо создать новый шаблон ВМ на стороне провайдера инфраструктуры и заменить InfraMachineTemplate в группах узлов. Подробнее: Узлы и шаблоны ВМ.
Обновление с версии 2.15
Разделы выше — запуск обновления до версии 2.15 включительно: целевая версия задаётся в ShturvalUpdate, доступные версии — в ShturvalUpdateChannel.
Когда кластер обновлен на 2.15, следующее обновление запускается ресурсами группы cluster.shturval.tech в кластере управления. Имя ClusterConfig и ClusterInfo и их неймспейс совпадают с именем кластера. После перехода на 2.15 объекты ShturvalUpdate, ShturvalUpdateChannel и ShturvalUpdateSchedule удаляются.
Шаги в графическом интерфейсе остаются прежними. В CLI меняются ресурсы.
Доступные версии — поле status.update.availableUpdates ресурса ClusterInfo:
kubectl get clusterinfo clustername -n clustername -o jsonpath='{.status.update.availableUpdates}'
Целевая версия — spec.releaseVersion ресурса ClusterConfig. Замените clustername на имя кластера, X.Y.Z — на версию новее 2.15:
kubectl patch clusterconfig clustername -n clustername --type=merge -p '{"spec":{"releaseVersion":"X.Y.Z"}}'
Стратегия обновления узлов — spec.update.updateStrategy. Если поле пустое, применяется InPlace. Допустимые значения: InPlace и RollingUpdate.
| Значение | Что происходит |
|---|---|
InPlace | Версия Kubernetes обновляется на уже созданных узлах. Новые узлы создаются из текущего InfraMachineTemplate, пока шаблон не заменят. |
RollingUpdate | Узлы заменяются. Для каждой группы узлов берётся шаблон ВМ целевой версии Kubernetes из InfrastructureProvider. Если на одну версию задано несколько шаблонов, используется первый по алфавиту. |
RollingUpdate недоступен, если в кластере есть узлы Shturval v2, в том числе в гибридном кластере. Допустимые стратегии — status.update.availableStrategies ресурса ClusterInfo. Пока обновление идёт, spec.releaseVersion и spec.update.updateStrategy менять нельзя.
Чтобы задать стратегию вместе с версией:
kubectl patch clusterconfig clustername -n clustername --type=merge -p '{"spec":{"releaseVersion":"X.Y.Z","update":{"updateStrategy":"RollingUpdate"}}}'
Расписание — ресурс ClusterUpdateSchedule в неймспейсе кластера. Примените манифест в кластере управления:
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterUpdateSchedule
metadata:
name: update-schedule
namespace: clustername
spec:
schedule: "0 8 26 9 *"
updatePeriod: "10h0m0s"
pauseIfUpdatePeriodExceed: false
allowMinorVersion: true
Дата и время следующего запуска в UTC записываются в поля status.nextUpdateStart и status.nextUpdateEnd ресурса ClusterUpdateSchedule. Если следующий запуск вычислить нельзя, эти поля остаются пустыми.
Когда окно открыто и есть доступная версия, в ClusterConfig записываются spec.releaseVersion и spec.update.followSchedule с именем этого расписания. Удалить расписание нельзя, пока followSchedule на него указывает.