Модуль обновления кластера (shturval-update)

О сервисе

ПараметрЗначение
Название в интерфейсеМодуль обновления кластера
Системное название (идентификатор)shturval-update
Назначение в кластереУправление обновлением кластера (Kubernetes, компоненты платформы); координация процесса обновления узлов и компонентов. Устанавливается в кластер управления.
КритическийДа
Публичный репозиторий— (компонент платформы «Штурвал»)
Зависимостиshturval-update-crds, shturval-networking
Неймспейсshturval-update-system

Содержание

  1. Обзор
  2. Архитектура
  3. Установка / развёртывание
  4. Диагностика
  5. Жизненный цикл
  6. Параметры оператора
  7. Справочник 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 validationKubernetes API Server при create/update/delete ShturvalUpdateизменение версии и удаление ресурса блокируются, если обновление ещё не готово

Ограничения и следствия

ОграничениеСледствие для администратора
Дефолтное имя ShturvalUpdate и ShturvalUpdateChannel — shturval-updatechannel с другим именем завершается ошибкой; расписание и проверки канала ориентированы на дефолтные ресурсы
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/versionupdate.shturval.tech/v1beta1
Основной namespaceshturval-update-system; Helm namespace задаётся командой установки #ВОПРОС: нужно ли добавить namespace в Helm values
КонтроллерыShturvalUpdate, ShturvalUpdateChannel, ShturvalUpdateSchedule
Deploymentshturval-update-controller-manager
Container imageзадаётся при установке chart shturval-update
Leader electionвключается флагом --leader-elect; в manager-манифесте передаётся --leader-elect
Metricsbind address по умолчанию 0; Kustomize включает metrics service и authn/authz patch
Health/readinessадрес probe endpoint по умолчанию :8081
Webhooksvalidating/defaulting webhook для ShturvalUpdate; отключается ENABLE_WEBHOOKS=false
Pod SecurityrunAsNonRoot: true, allowPrivilegeEscalation: false, drop ALL
HTTP/2по умолчанию отключён для metrics и webhook servers

Контроллеры

КонтроллерНазначение
ShturvalUpdateReconcilerвыполняет обновление кластера до spec.version, ведёт finalizer и conditions
ShturvalUpdateChannelReconcilerчитает текущую версию, получает update matrix из registry и публикует доступные версии
ShturvalUpdateScheduleReconcilerрассчитывает cron-окно и запускает обновление через дефолтный ShturvalUpdate

2. Архитектура

Компоненты рабочей нагрузки

КомпонентKubernetes typeScopeОписание
ShturvalUpdateCRD/custom resourceNamespacedцелевая версия и статус обновления платформы
ShturvalUpdateChannelCRD/custom resourceNamespacedканал обновлений и список доступных версий
ShturvalUpdateScheduleCRD/custom resourceNamespacedcron-расписание и следующий интервал обновления
shturval-update-controller-managerDeploymentNamespacedзапускает /shturval-update с leader election
webhook-serviceServiceNamespacedendpoint для admission webhook
ServiceMonitorPrometheus resourceNamespacedмониторинг metrics endpoint; установка зависит от наличия Prometheus CRD в кластере
Certificatecert-manager resourceNamespacedсертификат 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.

Минимальный порядок установки

ШагЧто устанавливаетсяРезультат
1chart shturval-update-crdsв Kubernetes API появляются CRD ShturvalUpdate, ShturvalUpdateChannel, ShturvalUpdateSchedule
2chart 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

ConditionTrueFalse / reasons
VersionIsCorrectверсия доступна и фазы построеныSpecVersionErr, SpecVersionResourceNotFound, SpecVersionNotAvailable, BuildUpdatePhasesErr
ControllerUpdatedinit/controller phase выполненаreason зависит от конкретной команды update
PostInitUpdatedpost-init phase выполненаreason зависит от конкретной команды update
CRDUpdatedCRD phase выполненаCRDGetFailed, CRDPatchFailed
PreKubeUpdatedpre-kube phase выполненаreason зависит от конкретной команды update
NCIUpdatedkube/NCI phase выполненаreason зависит от kube-фазы
StdUpdatedSTD phase выполненаreason зависит от STD-фазы
SystemServicesUninstallSSC uninstall phase выполненаSSCUpdateFail, SSCUninstallFail
PreSystemServiceUpdatedpre-SSC phase выполненаreason зависит от release-команды
SystemServicesUpdatedsystem services phase выполненаSSCGetFail, SSCAddFail, SSCUpdateFail, SSCUpdateWait, SSCServices*
ValidateKubeApiVersionпроверка API Kubernetes выполненаreason зависит от команды phase
UpdatePausedupdate поставлен на паузу из-за окна расписанияcondition снимается контроллером после возобновления
PostSSCUpdatepost-SSC phase выполненаreason зависит от release-команды
DefineClusterVersionтекущая версия кластера определенаUndefinedBaseSscVersions

Conditions ShturvalUpdateChannel

У ShturvalUpdateChannel отдельные conditions не определены. Для диагностики используются поля status.ready, status.currentversion, status.lastchecked и status.availableupdates.

Conditions ShturvalUpdateSchedule

ConditionTrueFalse / reasons
TriggerUpdateShturvalUpdate успешно пропатчен расписаниемPatchShturvalUpdateError при ошибке запуска update по расписанию

5. Жизненный цикл

Сквозной жизненный цикл обновления

Иллюстрация: Сквозной жизненный цикл обновления

Сквозной жизненный цикл обновления

Обновление через ShturvalUpdate

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

Finalizer: update.shturval.tech/finalizer. При удалении оператор снимает finalizer и завершает reconcile.

Reconcile ShturvalUpdate

Иллюстрация: Reconcile ShturvalUpdate

Reconcile ShturvalUpdate

Проверка канала обновлений

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

Finalizer: update.shturval.tech/finalizer. При удалении channel-ресурса оператор снимает finalizer.

Reconcile ShturvalUpdateChannel

Иллюстрация: Reconcile ShturvalUpdateChannel

Reconcile ShturvalUpdateChannel

Плановое обновление

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

При удалении ShturvalUpdateSchedule оператор запрещает удаление, если дефолтный ShturvalUpdate.spec.followSchedule указывает на удаляемое расписание; иначе снимает finalizer.

Reconcile ShturvalUpdateSchedule

Иллюстрация: Reconcile ShturvalUpdateSchedule

Reconcile ShturvalUpdateSchedule

Протокол согласования ресурсов

ШагУчастникДействие
1ShturvalUpdateChannelчитает ShturvalUpdate.status.currentversion, получает matrix и пишет status.availableupdates
2ShturvalUpdateScheduleв cron-окно читает ShturvalUpdateChannel.status.availableupdates и патчит дефолтный ShturvalUpdate
3ShturvalUpdateпроверяет spec.version против ShturvalUpdateChannel.status.availableupdates, строит и выполняет фазы
4ShturvalUpdateChannelпосле готовности дефолтного ShturvalUpdate запускает повторную проверку channel

6. Параметры оператора

Флаги процесса

ФлагЗначение по умолчаниюНазначение
--debugfalseвключает debug mode
--metrics-bind-address0адрес metrics endpoint; :8443 для HTTPS, :8080 для HTTP, 0 отключает metrics service
--health-probe-bind-address:8081адрес health/readiness probe endpoint
--leader-electfalseвключает leader election; в manager-манифесте передаётся --leader-elect
--metrics-securetrueвключает HTTPS для metrics endpoint; false включает HTTP
--enable-http2falseвключает HTTP/2 для metrics и webhook servers

Переменные окружения

ПеременнаяЗначение по умолчанию / источникНазначение
WATCH_NAMESPACEshturval-update-system, если env отсутствуетnamespace работы reconciler-ов
SYNC_PERIOD60mretry interval для ShturvalUpdateChannel
SCHEDULE_SYNC_PERIODв runtime 60m, Helm default 10mretry interval для ShturvalUpdateSchedule
SYSTEM_REGISTRYr.shturval.techregistry host; оператор добавляет схему и путь /repository/shturval_bin_public
SYSTEM_REGISTRY_INSECUREfalse; auto true для non-default registry без envinsecure-режим HTTP client для registry
ENABLE_WEBHOOKSвключено, если не falseрегистрация webhook
GODEBUGtlsmlkem=0runtime/build параметр Go

7. Справочник CRD/API

API group/version для всех ресурсов: update.shturval.tech/v1beta1.

ShturvalUpdate (su, shup, shupdate) — Namespaced

spec fieldTypeRequiredDescription
spec.versionstringNцелевая версия платформы; допускается semver с optional v, prerelease и build metadata
spec.followSchedule*stringNимя ShturvalUpdateSchedule, инициировавшего update; пусто для ручного запуска
status fieldTypeDescription
status.readyboolготовность update-процесса
status.currentversionstringтекущая версия платформы
status.clusterinfo.typeclusterstringтип кластера: base или mgmt
status.clusterinfo.insecureboolтип подключения к repository из ShturvalRepoConfig.spec.insecure
status.conditions[]metav1.Conditionход обновления и ошибки фаз

Conditions ShturvalUpdate перечислены в разделе Диагностика.

ShturvalUpdateChannel (suc, shupch, shupdatechannel) — Namespaced

spec fieldTypeRequiredDescription
spec.channelstringNканал обновлений; пустое значение в runtime трактуется как stable
status fieldTypeDescription
status.readyboolготовность проверки канала
status.currentversionstringтекущая версия из дефолтного ShturvalUpdate
status.lastcheckedmetav1.Timeвремя последней проверки
status.availableupdates[]stringотсортированный список доступных версий из update matrix

Conditions у ShturvalUpdateChannel не определены.

ShturvalUpdateSchedule — Namespaced

ShortName marker для ShturvalUpdateSchedule отсутствует. #ВОПРОС: нужен ли короткий alias для kubectl.

spec fieldTypeRequiredDescription
spec.schedulestringYcron-выражение
spec.updatePeriodmetav1.DurationYдлительность окна обновления; default 24h0m0s
spec.pauseIfUpdatePeriodExceedboolYесли true, update ставится на паузу при выходе за окно
spec.allowMinorVersionboolYесли true, schedule может выбрать последнюю доступную версию из channel status
status fieldTypeDescription
status.nextUpdateStart*metav1.Timeначало ближайшего или текущего окна
status.nextUpdateEnd*metav1.Timeконец окна
status.nextUpdateVersion*stringверсия, выбранная расписанием
status.conditions[]metav1.Conditionход планирования

Conditions ShturvalUpdateSchedule перечислены в разделе Диагностика.


Где настраивать

Сервисы и репозитории → Установленные сервисы → shturval-update → Управлять. Подробнее — Обновление Kubernetes.