Обновление Kubernetes: запуск, режимы и переходы между версиями

Где запускать обновление

Обновление кластера (включая версию Kubernetes) запускается в GUI на дашборде кластера — кластера управления или клиентского кластера или с помощью команд в CLI.


Где посмотреть доступные версии

В графическом интерфейсе — блок «Обновление» на дашборде кластера. Если доступна хотя бы одна новая версия, об этом сообщается непосредственно в блоке. Полный список стабильных версий, доступных для обновления с текущей версии, открывается по кнопке управления обновлением.

Полная карта — Карта версий обновлений.

Скриншот: управление обновлением на дашборде

Блок обновления кластера

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

Запуск обновления кластера

В CLI доступные версии можно посмотреть в ресурсе ShturvalUpdateChannel.

Так запускается обновление до версии 2.15 включительно. Когда кластер уже на 2.15, следующее обновление описано в разделе Обновление с версии 2.15.


Рекомендации перед обновлением

  1. Ознакомьтесь с release notes целевой версии — там могут быть breaking changes и миграционные шаги.
  2. Создайте резервную копию кластера управления перед обновлением.
  3. Проверьте карту версий — убедитесь, что прямой переход поддерживается. Если нет — спланируйте обновление через промежуточную версию.

Обновляйте клиентские кластеры только после обновления кластера управления!


Режимы обновления

Обновление запускается вручную — через графический интерфейс или kubectl.

  1. Выберите кластер в левом меню.
  2. На дашборде найдите блок «Обновление» (рядом с текущей версией кластера).
  3. Нажмите Управлять.
  4. В модальном окне выберите версию из списка доступных.
  5. Нажмите Обновить.

Из окна обновления вы можете перейти по ссылке на список релизов в публичной документации. Перед выбором версии проверьте в 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"}}'

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

  1. Дашборд кластера → блок «Обновление» → Управлять.
  2. Нажмите + рядом с «Настройка отложенного обновления».
  3. Укажите:
    • Расписание UTC — в формате cron (значения через пробел);
    • Длительность окна обновления — сколько времени может использоваться для обновления (по умолчанию 4 часа, минимум 30 минут);
    • Поведение при превышении окна: остановиться (UpdatePaused) или продолжить;
    • Разрешить минорные версии — если нет, автоматически обновляются только патч-версии.
  4. Нажмите Добавить.

После сохранения настроек отложенного обновления рассчитываются дата и время следующего запуска обновления кластера в 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"}}'

Изменение и удаление расписания

  • Изменить — выберите расписание в модальном окне и настройте заново. Если обновление уже идёт, будет применён новый сценарий.
  • Удалить — возможно только если обновление по этому расписанию ещё не начато.

Этапы обновления

После запуска обновление проходит следующие этапы (отображаются на дашборде):

  1. Обновление модуля shturval-update — обновление самого модуля обновления.
  2. Принудительное удаление устаревших сервисов — этап может быть пропущен при отсутствии таких сервисов.
  3. Обновление shturval-node-config — модуль управления конфигурациями узлов.
  4. Обновление версии Kubernetes — обновление компонентов Kubernetes в кластере.
  5. Обновление системных сервисов — обновление версий сервисов платформы (мониторинг, логирование и др.).

Статусы этапов

Цветовая индикация на дашборде:

  • Зелёный — этап успешно завершён;
  • Жёлтый — этап выполняется;
  • Серый — этап не инициализирован.

При использовании отложенного обновления: если обновление не успело завершиться в указанное окно и настроено поведение «остановиться», отображается статус 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 на него указывает.