Модуль обновления кластера (shturval-update)
О сервисе
| Параметр | Значение |
|---|---|
| Название в интерфейсе | Модуль обновления кластера |
| Системное название (идентификатор) | shturval-update |
| Назначение в кластере | Управление обновлением кластера (Kubernetes, компоненты платформы); координация процесса обновления узлов и компонентов. Устанавливается в кластер управления. |
| Критический | Да |
| Публичный репозиторий | — (компонент платформы «Штурвал») |
| Зависимости | shturval-update-crds, shturval-networking |
| Неймспейс | shturval-update-system |
Содержание
- Обзор
- Архитектура
- Установка / развёртывание
- Диагностика
- Жизненный цикл
- Параметры оператора
- Справочник CRD/API
1. Обзор
Назначение: оператор shturval-update выполняет обновление платформы Shturval до версии, указанной в ShturvalUpdate.spec.version, проверяет доступность версий через канал обновлений и может запускать обновление по cron-расписанию.
Функции
| Контур | Назначение в эксплуатации |
|---|---|
ShturvalUpdate | хранит целевую версию, текущую версию платформы и состояние выполнения фаз обновления |
ShturvalUpdateChannel | получает матрицу обновлений из registry и публикует доступные версии в status.availableupdates |
ShturvalUpdateSchedule | рассчитывает окно обновления по cron-расписанию и инициирует обновление через дефолтный ShturvalUpdate |
Webhook ShturvalUpdate | проверяет операции с ресурсом и запрещает опасные изменения во время активного обновления |
Сценарии инициации
| Событие | Инициатор | Наблюдаемый эффект |
|---|---|---|
| Ручное обновление платформы | администратор или автоматизация меняет ShturvalUpdate.spec.version | оператор проверяет версию, строит набор фаз и последовательно выполняет обновление |
| Проверка канала обновлений | оператор ShturvalUpdateChannel периодически или после готовности дефолтного ShturvalUpdate | в status.availableupdates появляется отсортированный список доступных версий |
| Плановое обновление | ShturvalUpdateSchedule в активном cron-окне | дефолтный ShturvalUpdate получает новую spec.version и spec.followSchedule |
| Admission validation | Kubernetes API Server при create/update/delete ShturvalUpdate | изменение версии и удаление ресурса блокируются, если обновление ещё не готово |
Ограничения и следствия
| Ограничение | Следствие для администратора |
|---|---|
Дефолтное имя ShturvalUpdate и ShturvalUpdateChannel — shturval-update | channel с другим именем завершается ошибкой; расписание и проверки канала ориентированы на дефолтные ресурсы |
ShturvalUpdateChannel патчит весь объект, а не только status subresource | при внешних изменениях channel-ресурса учитывайте, что контроллер регулярно обновляет сам объект |
Registry URL собирается как https://<SYSTEM_REGISTRY>/repository/shturval_bin_public | для приватного registry нужно корректно задать SYSTEM_REGISTRY и, при необходимости, insecure-режим |
Webhook включён по умолчанию, если ENABLE_WEBHOOKS не равно false | при штатной установке Kubernetes API Server будет обращаться к admission webhook оператора |
Для ShturvalUpdate и ShturvalUpdateChannel заявлены широкие RBAC-права | изменение модели доступа должно проходить отдельную проверку безопасности и совместимости обновлений |
| Алгоритм выбора minor-версии в schedule требует подтверждения | #ВОПРОС: подтвердить ожидаемое поведение выбора версии при spec.allowMinorVersion=true |
Место в цепочке управления
Цепочка управления обновлением

В эксплуатационной цепочке администратор или автоматизация задаёт целевую версию через ShturvalUpdate. ShturvalUpdateChannel предварительно наполняет список доступных версий из registry. Если используется расписание, ShturvalUpdateSchedule выбирает подходящую версию из статуса channel-ресурса и патчит дефолтный update-ресурс. После этого ShturvalUpdate выполняет фазы обновления и отражает ход процесса в status.ready и status.conditions.
Ключевые характеристики
| Характеристика | Значение |
|---|---|
| API group/version | update.shturval.tech/v1beta1 |
| Основной namespace | shturval-update-system; Helm namespace задаётся командой установки #ВОПРОС: нужно ли добавить namespace в Helm values |
| Контроллеры | ShturvalUpdate, ShturvalUpdateChannel, ShturvalUpdateSchedule |
| Deployment | shturval-update-controller-manager |
| Container image | задаётся при установке chart shturval-update |
| Leader election | включается флагом --leader-elect; в manager-манифесте передаётся --leader-elect |
| Metrics | bind address по умолчанию 0; Kustomize включает metrics service и authn/authz patch |
| Health/readiness | адрес probe endpoint по умолчанию :8081 |
| Webhooks | validating/defaulting webhook для ShturvalUpdate; отключается ENABLE_WEBHOOKS=false |
| Pod Security | runAsNonRoot: true, allowPrivilegeEscalation: false, drop ALL |
| HTTP/2 | по умолчанию отключён для metrics и webhook servers |
Контроллеры
| Контроллер | Назначение |
|---|---|
ShturvalUpdateReconciler | выполняет обновление кластера до spec.version, ведёт finalizer и conditions |
ShturvalUpdateChannelReconciler | читает текущую версию, получает update matrix из registry и публикует доступные версии |
ShturvalUpdateScheduleReconciler | рассчитывает cron-окно и запускает обновление через дефолтный ShturvalUpdate |
2. Архитектура
Компоненты рабочей нагрузки
| Компонент | Kubernetes type | Scope | Описание |
|---|---|---|---|
ShturvalUpdate | CRD/custom resource | Namespaced | целевая версия и статус обновления платформы |
ShturvalUpdateChannel | CRD/custom resource | Namespaced | канал обновлений и список доступных версий |
ShturvalUpdateSchedule | CRD/custom resource | Namespaced | cron-расписание и следующий интервал обновления |
shturval-update-controller-manager | Deployment | Namespaced | запускает /shturval-update с leader election |
webhook-service | Service | Namespaced | endpoint для admission webhook |
ServiceMonitor | Prometheus resource | Namespaced | мониторинг metrics endpoint; установка зависит от наличия Prometheus CRD в кластере |
Certificate | cert-manager resource | Namespaced | сертификат webhook server; установка зависит от наличия cert-manager CRD в кластере |
Архитектура развёртывания

Диаграмма показывает, что поставка через Helm/Kustomize создаёт Deployment контроллера, RBAC, webhook, cert-manager и prometheus resources. Внутри manager регистрируются три reconciler-а и webhook для ShturvalUpdate; reconciler-ы работают с Kubernetes API и обращаются к внешнему update registry для получения матрицы обновлений.
Взаимодействие с внешними системами
| Система | Как используется |
|---|---|
| Kubernetes API | хранение CRD, запуск reconcile, применение изменений в ресурсах платформы |
| Update registry | источник matrix-файла по адресу <registry>/update/<channel>/<currentVersion> |
| Shturval service configuration | управление системными сервисами во время фаз обновления |
| Дочерние кластеры | доступ через kubeconfig Secret <clusterId>-kubeconfig в namespace <clusterId>, ключ value |
Связи ресурсов обновления
Иллюстрация: Связи ресурсов обновления

Доступ к дочерним кластерам
Если фаза обновления обращается к дочернему кластеру, оператор ожидает Secret с kubeconfig:
apiVersion: v1
kind: Secret
metadata:
name: <clusterId>-kubeconfig
namespace: <clusterId>
type: Opaque
stringData:
value: |
apiVersion: v1
kind: Config
clusters:
- name: <cluster>
cluster:
server: https://<api-server>
certificate-authority-data: <base64-ca>
contexts:
- name: <cluster>
context:
cluster: <cluster>
user: <user>
current-context: <cluster>
users:
- name: <user>
user:
token: <token>
SSH-ключи и passphrase-protected SSH keys этим контуром не читаются: для доступа используется kubeconfig из ключа value.
3. Установка / развёртывание
Поставка включает два Helm-чарта: shturval-update-crds для CRD и shturval-update для контроллера. Установка должна сначала доставить CRD, затем основной chart с Deployment, RBAC, webhook и сопутствующими объектами.
Обратите внимание! любые изменения параметров установки должны выполняться согласованно с платформой через ShturvalServicePatch (SSP) или другой утверждённый механизм управления сервисами, без ручных правок в обход платформенного lifecycle.
Минимальный порядок установки
| Шаг | Что устанавливается | Результат |
|---|---|---|
| 1 | chart shturval-update-crds | в Kubernetes API появляются CRD ShturvalUpdate, ShturvalUpdateChannel, ShturvalUpdateSchedule |
| 2 | chart shturval-update | запускается controller manager, создаются RBAC, Service и webhook-интеграция |
| 3 | дефолтные CR | создаются ресурсы, через которые оператор определяет текущую версию, канал и расписание |
4. Диагностика
Диагностика строится по status-полям CR и conditions. В исходном техническом руководстве нет готового набора эксплуатационных kubectl get/logs команд, поэтому команды проверки здесь не дублируются.
Общие симптомы
| Симптом | Возможная причина | Действие |
|---|---|---|
ShturvalUpdate.status.ready=false долго не меняется | целевая версия недоступна, не построены фазы или одна из фаз вернула ошибку | проверить status.conditions ресурса ShturvalUpdate |
ShturvalUpdateChannel.status.ready=false | не прочитана текущая версия или недоступна update matrix | проверить status.currentversion, status.lastchecked, registry-параметры |
В status.availableupdates нет ожидаемой версии | channel, текущая версия или semver-ограничения matrix не дают нужный переход | сверить channel и текущую версию платформы |
| Плановое обновление не стартует | cron-окно ещё не наступило, update уже идёт или channel не содержит доступных версий | проверить ShturvalUpdateSchedule.status.nextUpdateStart/End и status.conditions |
Удаление ShturvalUpdate отклонено | webhook запрещает удаление при status.ready=false | дождаться завершения обновления или подтвердить аварийную процедуру отдельно |
Conditions ShturvalUpdate
| Condition | True | False / reasons |
|---|---|---|
VersionIsCorrect | версия доступна и фазы построены | SpecVersionErr, SpecVersionResourceNotFound, SpecVersionNotAvailable, BuildUpdatePhasesErr |
ControllerUpdated | init/controller phase выполнена | reason зависит от конкретной команды update |
PostInitUpdated | post-init phase выполнена | reason зависит от конкретной команды update |
CRDUpdated | CRD phase выполнена | CRDGetFailed, CRDPatchFailed |
PreKubeUpdated | pre-kube phase выполнена | reason зависит от конкретной команды update |
NCIUpdated | kube/NCI phase выполнена | reason зависит от kube-фазы |
StdUpdated | STD phase выполнена | reason зависит от STD-фазы |
SystemServicesUninstall | SSC uninstall phase выполнена | SSCUpdateFail, SSCUninstallFail |
PreSystemServiceUpdated | pre-SSC phase выполнена | reason зависит от release-команды |
SystemServicesUpdated | system services phase выполнена | SSCGetFail, SSCAddFail, SSCUpdateFail, SSCUpdateWait, SSCServices* |
ValidateKubeApiVersion | проверка API Kubernetes выполнена | reason зависит от команды phase |
UpdatePaused | update поставлен на паузу из-за окна расписания | condition снимается контроллером после возобновления |
PostSSCUpdate | post-SSC phase выполнена | reason зависит от release-команды |
DefineClusterVersion | текущая версия кластера определена | UndefinedBaseSscVersions |
Conditions ShturvalUpdateChannel
У ShturvalUpdateChannel отдельные conditions не определены. Для диагностики используются поля status.ready, status.currentversion, status.lastchecked и status.availableupdates.
Conditions ShturvalUpdateSchedule
| Condition | True | False / reasons |
|---|---|---|
TriggerUpdate | ShturvalUpdate успешно пропатчен расписанием | PatchShturvalUpdateError при ошибке запуска update по расписанию |
5. Жизненный цикл
Сквозной жизненный цикл обновления
Иллюстрация: Сквозной жизненный цикл обновления

Обновление через ShturvalUpdate
| Шаг | Ресурс / компонент | Действие |
|---|---|---|
| 1 | ShturvalUpdate | оператор получает ресурс и завершает reconcile без ошибки, если ресурс уже удалён |
| 2 | ShturvalUpdate.status | если текущая версия ещё не определена, оператор заполняет status.currentversion |
| 3 | ShturvalUpdate.status.clusterinfo | если тип кластера ещё не определён, оператор заполняет сведения о кластере |
| 4 | ShturvalUpdate | добавляется finalizer update.shturval.tech/finalizer |
| 5 | ShturvalUpdate.spec.version | если целевая версия пустая, оператор выставляет status.ready=true и не запускает обновление |
| 6 | ShturvalUpdate.status.conditions | при старте нового обновления conditions сбрасываются, ready переводится в false |
| 7 | Update phases | оператор проверяет доступность версии, строит фазы и выполняет команды обновления |
| 8 | ShturvalUpdate.status.currentversion | после успешного выполнения и при отсутствии паузы оператор снова определяет версию кластера |
Finalizer: update.shturval.tech/finalizer. При удалении оператор снимает finalizer и завершает reconcile.
Reconcile ShturvalUpdate
Иллюстрация: Reconcile ShturvalUpdate

Проверка канала обновлений
| Шаг | Ресурс / компонент | Действие |
|---|---|---|
| 1 | ShturvalUpdateChannel | оператор принимает к обработке только дефолтный ресурс с именем shturval-update |
| 2 | ShturvalUpdateChannel.status | ready переводится в false, обновляется lastchecked |
| 3 | Дефолтный ShturvalUpdate | оператор читает текущую версию |
| 4 | Update registry | загружается matrix по URL <registry>/update/<channel>/<currentVersion> |
| 5 | ShturvalUpdateChannel.status.availableupdates | matrix фильтруется по semver-правилам, результат сортируется и записывается в status |
| 6 | ShturvalUpdateChannel.status.ready | после успешной проверки выставляется true |
Finalizer: update.shturval.tech/finalizer. При удалении channel-ресурса оператор снимает finalizer.
Reconcile ShturvalUpdateChannel
Иллюстрация: Reconcile ShturvalUpdateChannel

Плановое обновление
| Шаг | Ресурс / компонент | Действие |
|---|---|---|
| 1 | ShturvalUpdateSchedule | оператор получает расписание и рассчитывает окно по spec.schedule |
| 2 | status.nextUpdateStart/End | записываются начало и конец ближайшего или текущего окна |
| 3 | Дефолтный ShturvalUpdate | если update уже идёт, schedule ожидает следующую попытку |
| 4 | UpdatePaused | если обновление было поставлено на паузу этим schedule, оператор снимает pause-condition |
| 5 | ShturvalUpdateChannel.status.availableupdates | выбирается версия для запуска |
| 6 | Дефолтный ShturvalUpdate | патчатся spec.version и spec.followSchedule, condition TriggerUpdate=True |
При удалении ShturvalUpdateSchedule оператор запрещает удаление, если дефолтный ShturvalUpdate.spec.followSchedule указывает на удаляемое расписание; иначе снимает finalizer.
Reconcile ShturvalUpdateSchedule
Иллюстрация: Reconcile ShturvalUpdateSchedule

Протокол согласования ресурсов
| Шаг | Участник | Действие |
|---|---|---|
| 1 | ShturvalUpdateChannel | читает ShturvalUpdate.status.currentversion, получает matrix и пишет status.availableupdates |
| 2 | ShturvalUpdateSchedule | в cron-окно читает ShturvalUpdateChannel.status.availableupdates и патчит дефолтный ShturvalUpdate |
| 3 | ShturvalUpdate | проверяет spec.version против ShturvalUpdateChannel.status.availableupdates, строит и выполняет фазы |
| 4 | ShturvalUpdateChannel | после готовности дефолтного ShturvalUpdate запускает повторную проверку channel |
6. Параметры оператора
Флаги процесса
| Флаг | Значение по умолчанию | Назначение |
|---|---|---|
--debug | false | включает debug mode |
--metrics-bind-address | 0 | адрес metrics endpoint; :8443 для HTTPS, :8080 для HTTP, 0 отключает metrics service |
--health-probe-bind-address | :8081 | адрес health/readiness probe endpoint |
--leader-elect | false | включает leader election; в manager-манифесте передаётся --leader-elect |
--metrics-secure | true | включает HTTPS для metrics endpoint; false включает HTTP |
--enable-http2 | false | включает HTTP/2 для metrics и webhook servers |
Переменные окружения
| Переменная | Значение по умолчанию / источник | Назначение |
|---|---|---|
WATCH_NAMESPACE | shturval-update-system, если env отсутствует | namespace работы reconciler-ов |
SYNC_PERIOD | 60m | retry interval для ShturvalUpdateChannel |
SCHEDULE_SYNC_PERIOD | в runtime 60m, Helm default 10m | retry interval для ShturvalUpdateSchedule |
SYSTEM_REGISTRY | r.shturval.tech | registry host; оператор добавляет схему и путь /repository/shturval_bin_public |
SYSTEM_REGISTRY_INSECURE | false; auto true для non-default registry без env | insecure-режим HTTP client для registry |
ENABLE_WEBHOOKS | включено, если не false | регистрация webhook |
GODEBUG | tlsmlkem=0 | runtime/build параметр Go |
7. Справочник CRD/API
API group/version для всех ресурсов: update.shturval.tech/v1beta1.
ShturvalUpdate (su, shup, shupdate) — Namespaced
spec field | Type | Required | Description |
|---|---|---|---|
spec.version | string | N | целевая версия платформы; допускается semver с optional v, prerelease и build metadata |
spec.followSchedule | *string | N | имя ShturvalUpdateSchedule, инициировавшего update; пусто для ручного запуска |
status field | Type | Description |
|---|---|---|
status.ready | bool | готовность update-процесса |
status.currentversion | string | текущая версия платформы |
status.clusterinfo.typecluster | string | тип кластера: base или mgmt |
status.clusterinfo.insecure | bool | тип подключения к repository из ShturvalRepoConfig.spec.insecure |
status.conditions | []metav1.Condition | ход обновления и ошибки фаз |
Conditions ShturvalUpdate перечислены в разделе Диагностика.
ShturvalUpdateChannel (suc, shupch, shupdatechannel) — Namespaced
spec field | Type | Required | Description |
|---|---|---|---|
spec.channel | string | N | канал обновлений; пустое значение в runtime трактуется как stable |
status field | Type | Description |
|---|---|---|
status.ready | bool | готовность проверки канала |
status.currentversion | string | текущая версия из дефолтного ShturvalUpdate |
status.lastchecked | metav1.Time | время последней проверки |
status.availableupdates | []string | отсортированный список доступных версий из update matrix |
Conditions у ShturvalUpdateChannel не определены.
ShturvalUpdateSchedule — Namespaced
ShortName marker для ShturvalUpdateSchedule отсутствует. #ВОПРОС: нужен ли короткий alias для kubectl.
spec field | Type | Required | Description |
|---|---|---|---|
spec.schedule | string | Y | cron-выражение |
spec.updatePeriod | metav1.Duration | Y | длительность окна обновления; default 24h0m0s |
spec.pauseIfUpdatePeriodExceed | bool | Y | если true, update ставится на паузу при выходе за окно |
spec.allowMinorVersion | bool | Y | если true, schedule может выбрать последнюю доступную версию из channel status |
status field | Type | Description |
|---|---|---|
status.nextUpdateStart | *metav1.Time | начало ближайшего или текущего окна |
status.nextUpdateEnd | *metav1.Time | конец окна |
status.nextUpdateVersion | *string | версия, выбранная расписанием |
status.conditions | []metav1.Condition | ход планирования |
Conditions ShturvalUpdateSchedule перечислены в разделе Диагностика.
Где настраивать
Сервисы и репозитории → Установленные сервисы → shturval-update → Управлять. Подробнее — Обновление Kubernetes.