Модуль обновления кластера (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.