Модуль обновления кластера (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 validation Kubernetes API Server при create/update/delete ShturvalUpdate изменение версии и удаление ресурса блокируются, если обновление ещё не готово

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

Ограничение Следствие для администратора
Дефолтное имя ShturvalUpdate и ShturvalUpdateChannelshturval-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

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

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

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.