Провайдер Shturval v2 (shturval-capsm)

О сервисе

ПараметрЗначение
Название в интерфейсеПровайдер Shturval v2
Системное название (идентификатор)shturval-capsm
Назначение в кластереИнтеграция с платформой «Штурвал» v2: развёртывание и управление кластерами через Cluster API при использовании Shturval v2 как инфраструктурного провайдера. Устанавливается в кластер управления.
КритическийДа, если кластер управления развёрнут с провайдером Shturval v2
Публичный репозиторий— (компонент платформы «Штурвал»)
Зависимостиshturval-capsm-crds, shturval-capi-crds
Неймспейсshturval-capsm

Справочно: перечень объектов Shturval* см. в разделе Кастомные ресурсы жизненного цикла узлов — Shturval v2.


Содержание

  1. Обзор
  2. Архитектура
  3. Установка сервиса
  4. Диагностика
  5. Жизненный цикл
  6. Параметры оператора
  7. Справочник CRD/API

1. Обзор

shturval-manual — оператор Kubernetes, реализующий роль CAPI infrastructure provider для платформы Штурвал. Оператор управляет bare-metal- и SSH-узлами: автоматически регистрирует физические хосты, контролирует их готовность, связывает с объектами Cluster API и выполняет начальную инициализацию (bootstrap) узлов Kubernetes.

Место в цепочке управления

Иллюстрация: Место в цепочке управления

Место shturval-capsm в цепочке управления платформы Штурвал

Ключевые характеристики

Обратите внимание! Провайдер shturval-capsm (Shturval v2 / manual) рассчитан на архитектуру x86_64. Перед развёртыванием убедитесь, что целевые узлы соответствуют поддерживаемой архитектуре.

ХарактеристикаЗначение
Группа APIinfrastructure.cluster.x-k8s.io/v1beta1
Namespace оператораshturval-capsm
Leader electionвключён; ID 5eeb8da4.cluster.x-k8s.io — безопасная работа при нескольких репликах
МетрикиПо умолчанию отключены (--metrics-bind-address=0). При включении доступны по HTTPS на порту :8443 с аутентификацией через RBAC
Health / ReadinessHTTP на порту :8081 (/healthz, /readyz)
WebhookMutating webhook для ShturvalCluster на порту :9443
Pod SecurityPod Security Standards: restricted

Контроллеры и webhook

Оператор регистрирует четыре контроллера и один mutating webhook:

Контроллер / компонентНазначение
ShturvalProviderСоздаёт и удаляет объекты ShturvalHost на основе spec.hosts; синхронизирует учётные данные и поля версии
ShturvalHostПодготавливает физический узел через SSH: проверяет доступность, устанавливает демон shturvald, обеспечивает уникальность machine-id, привязывает к ShturvalMachine
ShturvalMachineВыбирает готовый хост, выполняет bootstrap Kubernetes-узла, устанавливает providerID
ShturvalClusterУправляет жизненным циклом CAPI-кластера: устанавливает Ready, при удалении ожидает очистки всех машин
Webhook ShturvalClusterMutating: если spec.controlPlaneEndpoint.port == 0, устанавливает значение по умолчанию 6443

Ограничения эксплуатации

ОграничениеСледствие для администратора
SSH используется только на порту 22Нестандартный SSH-порт узла нельзя задать параметром оператора
Ключи SSH с passphrase не поддерживаютсяДля Secret нужен незашифрованный приватный ключ

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

Иллюстрация: 2. Архитектура

Архитектура оператора shturval-manual

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

ОбъектИмяПараметры
Deploymentcontroller-manager1 реплика, образ r.shturval.tech/capsm/capsm
КонтейнерmanagerЗапрос CPU: 10m, лимит: 500m; запрос RAM: 64Mi, лимит: 128Mi
Liveness-пробаHTTP GET:8081/healthz, задержка 15 с, интервал 20 с
Readiness-пробаHTTP GET:8081/readyz, задержка 5 с, интервал 10 с
Сервис метрикHTTPSпри включении — :8443, доступ только через RBAC (authn/authz)
Webhook-серверHTTPS:9443, mutating webhook для ShturvalCluster
Leader electionвключёнID 5eeb8da4.cluster.x-k8s.io

Параметры безопасности пода

Под развёртывается в соответствии с политикой Pod Security Standards: restricted:

ПараметрЗначение
runAsNonRoottrue

RBAC

Оператор работает от имени ServiceAccount controller-manager, которому назначена ClusterRole manager-role через ClusterRoleBinding.

API GroupРесурсыПрава
"" (core)secretsget, list, watch, create, update, patch, delete
cluster.x-k8s.ioclusters, machines, machines/statusget, list, watch
infrastructure.cluster.x-k8s.ioshturvalclusters, shturvalhosts, shturvalprovidersget, list, watch, create, update, patch, delete
infrastructure.cluster.x-k8s.ioshturvalmachinesget, list, patch, update, watch
infrastructure.cluster.x-k8s.ioshturvalclusters/finalizers, shturvalhosts/finalizers, shturvalmachines/finalizers, shturvalproviders/finalizerspatch, update
infrastructure.cluster.x-k8s.ioshturvalclusters/status, shturvalhosts/status, shturvalmachines/status, shturvalproviders/statusget, patch, update

Дополнительно предусмотрены агрегированные роли для каждого CRD-вида с суффиксами -admin, -editor, -viewer.

Взаимодействие с внешними системами

Оператор подключается по SSH к физическим узлам, адреса которых заданы в ShturvalProvider.spec.hosts. Для аутентификации используются Kubernetes Secrets, на которые ссылаются ShturvalProvider.spec.credentials.secretRef и, при необходимости, ShturvalHost.spec.credentials.ssh.

Secret типа Opaque с данными для подключения по SSH создается в кластере управления в неймспейсе shturval-capsm. Имя формируется из имени экземпляра провайдера Shturval v2 с суффиксом capsm-v2-provider-secret.

Пример Secret:

apiVersion: v1
kind: Secret
metadata:
  name: provider-name-capsm-v2-provider-secret
  namespace: shturval-capsm
type: Opaque
data:
  sshKey: LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KdXNlcnNzaGtleQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0=
  sshUser: c2h0dXJ2YWw=
  sshPassword: bXlwYXNzd29yZA==
КлючОбязательностьОписание
sshUserДаИмя пользователя для SSH-подключения к хосту
sshKeyДаПриватный SSH-ключ
sshPasswordНетПароль SSH-подключения для выполнения команд sudo c паролем

Приватный ключ должен быть незашифрованным, без passphrase: парольная защита ключа не поддерживается.


3. Установка сервиса

Провайдер CAPSM — инфраструктурный провайдер Cluster API (infrastructure.cluster.x-k8s.io). В платформе «Штурвал» подключение и жизненный цикл такого провайдера в управляющем кластере обеспечивает cluster-manager; объекты ShturvalServiceConfig (SSC) для чартов провайдера создаются и сопровождаются как часть платформенной конфигурации, а не как произвольная ручная установка сервисного чарта.

В рабочей среде провайдер представлен двумя SSC:

  • shturval-capsm — основной чарт оператора;
  • shturval-capsm-crds — чарт CRD модуля провайдера.

CRD-чарт выделяется в отдельный SSC, чтобы аннотация helm.sh/resource-policy: keep защищала CRD от удаления при обновлении основного чарта.

Для корректной работы в кластере управления должны быть доступны CRD основного Cluster API (shturval-capi-crds и связанный с ним компонент shturval-capi).

Ниже приведены имена чартов и соответствие spec.customvalues файлу helm/main/values.yaml основного чарта — для сопоставления с релизом и настройки через ShturvalServicePatch (SSP). Это не дублирует полный сценарий развёртывания через UI/API cluster-manager.

Если при развёртывании платформы работа сервиса была отключена, SSC провайдера могли получить режим отсутствия (mode: absent). Чтобы провайдер был доступен для работы с инфраструктурой Shturval v2, переведите сначала режим shturval-capsm-crds в auto, затем shturval-capsm в auto. Изменить режим можно в интерфейсе: на вкладке Платформа в карточке Провайдеры инфраструктуры нажмите Управлять, затем в блоке Сервисы провайдеров переведите переключатель.

Скриншот: вкладка «Платформа» — переход в конфигурацию провайдеров

Вкладка Платформа: карточка Провайдеры инфраструктуры и ссылка Управлять

На скриншоте показан выбор режима Авто для сервиса провайдера (см. скриншот ниже).

Переключение режима сервиса провайдера

3.1 Параметры customvalues

Структура значений основного чарта описывается полем spec.customvalues у соответствующего ShturvalServiceConfig и совпадает с helm/main/values.yaml чарта shturval-capsm. Полный список полей, задаваемых через этот файл:

Рекомендация: не правьте объект ShturvalServiceConfig вручную для смены лимитов, nodeSelector, образа оператора и прочих параметров релиза — такой объект относится к платформенной конфигурации и может быть перезаписан при обновлениях. Все изменения поведения сервиса вносите через ShturvalServicePatch (SSP), накладывающий spec.customvalues поверх базового SSC.

ПолеТипПо умолчаниюОписание
replicaCountint1Количество реплик Deployment
image.repositorystringr.shturval.tech/capsm/capsmРепозиторий образа оператора
image.tagstring—Тег образа. Если не задан, используется appVersion из Chart.yaml
serviceAccount.createbooltrueСоздать ServiceAccount
serviceAccount.namestringcontroller-managerИмя ServiceAccount
resources.limits.cpustring500mЛимит CPU контейнера manager
resources.limits.memorystring128MiЛимит памяти контейнера manager
resources.requests.cpustring10mЗапрос CPU контейнера manager
resources.requests.memorystring64MiЗапрос памяти контейнера manager

Webhook

По умолчанию webhook ShturvalCluster включён. Для отключения установите переменную окружения ENABLE_WEBHOOKS=false в контейнере manager. Webhook требует TLS-сертификат; путь задаётся через --webhook-cert-path (см. раздел 6).

Создание ShturvalProvider

ShturvalProvider — глобальный (cluster-scoped) объект-конфигурация провайдера. При создании ShturvalProvider контроллер автоматически создаёт объекты ShturvalHost для каждого адреса из spec.hosts. Объект должен существовать до создания кластеров и машин.

Пример минимального ShturvalProvider:

apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: ShturvalProvider
metadata:
  name: shturval-demo
spec:
  systemRegistry: registry.example.com
  releaseVersion: "2.14"
  licenseToken: "<лицензионный токен>"
  credentials:
    secretRef:
      name: shturval-demo-provider-secret
      namespace: shturval-capsm
  hosts:
    - address: 192.168.1.10
      labels:
        role: worker
        zone: dc1
    - address: 192.168.1.11
      labels:
        role: master
        zone: dc1
  paused: false

Поле spec.releaseVersion задаёт версию платформы для bootstrap хостов (загрузка stc-<releaseVersion>). Чтобы на кластере управления 2.14.1 развернуть клиентский кластер более ранней версии, укажите полную версию, например releaseVersion: "2.13.1", до добавления хостов — см. Как создать клиентский кластер с провайдером Shturval v2 версии ниже 2.14.1.

После создания ShturvalProvider контроллер создаёт ShturvalHost с именем, равным IP-адресу хоста, и меткой provider_config_name: <имя провайдера>. Поля spec.systemRegistry, spec.releaseVersion и spec.licenseToken автоматически копируются в каждый ShturvalHost.

Не рекомендуется создавать ShturvalHost вручную, минуя ShturvalProvider, если хосты предполагается использовать совместно с провайдером: контроллер может перезаписать такие объекты или зафиксировать конфликт владения.

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

Сервисы и репозитории → Установленные сервисы → shturval-capsm → Управлять. Сервис размещается в кластере управления.

Чтобы включить сервис и настроить экземпляр: вкладка Платформа → карточка Провайдеры инфраструктуры → Управлять. Подробнее — Shturval v2. Общий обзор — Как устроена работа с провайдерами в платформе.


4. Диагностика

Проверка работоспособности оператора

ПроверкаКомандаОжидаемый результат
Под оператора запущенkubectl get pod -n shturval-capsm -l control-plane=controller-managerSTATUS: Running
Livenesskubectl exec -n shturval-capsm <pod> -- wget -qO- http://localhost:8081/healthzok
Readinesskubectl exec -n shturval-capsm <pod> -- wget -qO- http://localhost:8081/readyzok
Метрики доступныПри включенных метриках: запрос к :8443/metrics через ServiceAccount с ролью metrics-readerHTTP 200, содержит controller_runtime_reconcile_total
Логиkubectl logs -n shturval-capsm -l control-plane=controller-managerСтрока starting manager при старте

Диагностика ShturvalHost

kubectl get shturvalhost
kubectl describe shturvalhost <имя-хоста>

Флаги в выводе kubectl get shturvalhost:

КолонкаЗначение
READYFORMACHINEtrue — хост прошёл все проверки и готов к привязке ShturvalMachine
MACHINEATTACHEDANDCONFIRMEDtrue — хост привязан к ShturvalMachine и привязка подтверждена

Conditions для ShturvalHost

status.readyformachine = true выставляется, когда одновременно выполняются: CanConnectToTheNode=True, CheckSudo=True, ShturvalNodeConfigIsCorrect=True и хотя бы одно из: StcCompleted=True или StdDeployed=True.

ConditionЧто проверяетсяДействие при False / Unknown
CanConnectToTheNodeSSH-соединение с хостом установленоПроверить spec.address и корректность SSH-ключа в Secret. Причины: FailedToGetCredentials, FailedToGetHostManager, FailedToConnect, NetworkError
CheckSudoПользователь SSH имеет доступ к sudoПроверить права учётной записи на хосте. Причина: FailedToCheckSudo
StdDeployedДемон shturvald установлен и доступенПроверить наличие демона на узле. Причины: NetworkError, ShturvaldDaemonNotFound
StcDeployedБинарный файл stc загружен на узелПроверить доступность https://public.<systemRegistry>/stc-<releaseVersion>
StcCompletedКоманда stc template успешно завершила подготовку узлаПроверить лог /var/log/stc-template.log на узле
StcMigrationRequiredДля свободного и готового хоста требуется миграция STCПроверить состояние STC на узле и дождаться завершения миграции
MachineIDUniqueЗначение /etc/machine-id уникально среди всех зарегистрированных хостовОператор сбрасывает machine-id автоматически. Причины: NetworkError, FailedToResetMachineID, MachineIDNeedCheck
ShturvalNodeConfigIsCorrectКонфигурация узла корректна; хост не занят другим кластеромПроверить status.nodeInfo.kubestatus. Причины: HostOccupied, HostInfoIsNotCorrect
MachineAttachedК хосту привязана ShturvalMachineСоздать ShturvalMachine с hostSelector, соответствующим меткам хоста

Conditions для ShturvalMachine

ConditionЧто проверяетсяДействие при False
HostAttachedПодходящий ShturvalHost найден и подтвердил привязкуПроверить наличие свободных хостов с нужными метками. Причины: NoApplicableHost, HostNotReadyReason, HostMatchWaitingReason, HostNotMatchReason
K8sComponentsInstallationSucceededКоманда sudo std node status возвращает synchedДождаться завершения синхронизации компонентов Kubernetes на узле. Причины: STDGetStatusFailed, NodeStatusReason
ShturvaldRestartBeforeBootstrapДля версий до 2.14: shturvald перезапущен и узел вернулся в synchedОжидать синхронизации. Причина: ShturvaldRestartedWaitingSyncedReason, ShturvaldRestartFailedReason
K8sNodeBootstrapSucceededBootstrap Kubernetes-узла через BootstrapWithCloudInit выполнен успешноПроверить наличие bootstrap-секрета в CAPI. Причины: BootstrapNotReadyReason, BootstrapExecutionFailedReason, PreBootstrapExecutionFailedReason
K8sProviderIDSetupproviderID установлен в spec.providerID машины и в spec.providerID Kubernetes-узлаУбедиться, что узел появился в кластере с корректным machine-id. Причина ошибки в логах оператора
ReadyМашина полностью готова к работеПроверить conditions HostAttached, K8sComponentsInstallationSucceeded, K8sNodeBootstrapSucceeded, K8sProviderIDSetup

Conditions для ShturvalCluster

ConditionЧто проверяетсяДействие при False
ShturvalClusterReconciliationReadyCluster API установил OwnerReference на кластер; кластер не на паузеПроверить наличие Cluster в CAPI и его статус. Причины: WaitingForClusterOwnerReference, ClusterIsPaused
ShturvalClusterDeletingПри удалении: все ShturvalMachine кластера удаленыДождаться завершения удаления машин. Причины: WaitingForMachinesDeletion, FailedToListMachinesForDeletion

Типичные сбои

СимптомВероятная причинаДействие
CanConnectToTheNode=False, reason FailedToConnectНеверный IP или SSH-порт недоступенПроверить spec.address и сетевую доступность узла
CanConnectToTheNode=False, reason FailedToGetCredentialsSecret с SSH-ключом не найденУбедиться, что Secret из spec.credentials.ssh существует в указанном namespace
StdDeployed=False, reason ShturvaldDaemonNotFoundshturvald удалён с узла вручнуюПереустановить shturvald на узле
ShturvalNodeConfigIsCorrect=False, reason HostOccupiedУзел входит в другой кластер KubernetesВывести узел из кластера или использовать другой хост
MachineIDUnique=False, reason MachineIDNeedCheckДубликат machine-id (клонирование ВМ)Ожидать: оператор автоматически сбросит machine-id
HostAttached=False, reason NoApplicableHostНет свободных хостов с нужными меткамиДобавить хосты в ShturvalProvider.spec.hosts с нужными метками
K8sComponentsInstallationSucceeded=False, reason NodeStatusReasonsudo std node status вернул syncFailed или syncInProgressДля syncFailed — проверить логи shturvald на узле; для syncInProgress — ожидать завершения
ShturvalMachine.status.ready остаётся falseОдно из conditions не выполненоПоследовательно устранить все conditions со статусом False

Просмотр информации об узле

После успешного прохождения всех проверок оператор заполняет status.nodeInfo у ShturvalHost:

kubectl get shturvalhost <имя-хоста> -o jsonpath='{.status.nodeInfo}' | python -m json.tool

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

Контроллер ShturvalProvider

Контроллер полностью управляет жизненным циклом объектов ShturvalHost на основе spec.hosts.

Создание хоста: при добавлении адреса в spec.hosts контроллер создаёт ShturvalHost с именем, равным IP-адресу, присваивает ему метки из spec.hosts[].labels, метку provider_config_name: <имя провайдера>, SSH-учётные данные и поля версии (systemRegistry, releaseVersion, licenseToken). Устанавливает OwnerReference провайдера на хост.

Обновление хоста: при изменении меток в spec.hosts[].labels контроллер синхронизирует их в ShturvalHost. Метки из списка системных (architecture, memory, cpu_cores, ethernet_interface, operating_system, root_volume_size, hostname, provider_config_name) не затрагиваются синхронизацией. Поля systemRegistry, releaseVersion, licenseToken синхронизируются всегда. Метки не обновляются, пока хост привязан к машине (MachineAttached=True).

Удаление хоста: при удалении адреса из spec.hosts контроллер запускает удаление соответствующего ShturvalHost. Ожидает завершения очистки финалайзеров.

Удаление провайдера: провайдер может быть удалён только если ни один из его хостов не привязан к кластеру (нет MachineAttached=True). При удалении оператор снимает финалайзер shturval/<имя-провайдера> с Secret-а с учётными данными.

Credentials для хоста: если в spec.hosts[].credentials заданы индивидуальные учётные данные для хоста, они используются вместо глобальных spec.credentials.

Контроллер ShturvalHost

Контроллер подготавливает физический узел к вступлению в кластер Kubernetes.

Иллюстрация: Контроллер ShturvalHost

Жизненный цикл ShturvalHost

Финалайзер

При первом обнаружении нового ShturvalHost контроллер добавляет финалайзер shturvalhost.infrastructure.cluster.x-k8s.io и завершает итерацию с requeue через 1 секунду.

Подготовка нового хоста

  1. SSH-подключение — устанавливает соединение по spec.address. При сетевой ошибке — CanConnectToTheNode=False, requeue 1 с.
  2. Проверка sudo (однократно, пока CheckSudo не True) — при ошибке CheckSudo=False.
  3. Развёртывание демона shturvald (однократно, пока StdDeployed или StcCompleted не True) — вызов EnsureSTDDeployed().
  4. Получение информации об узле — через shturvald запрашиваются метаданные (архитектура, hostname, память, CPU, machine-id, статус Kubernetes). Если демон удалён вручную, StdDeployed сбрасывается.
  5. Проверка занятости — если на узле активен сервис Kubernetes или присутствует kubeconfig, выставляется ShturvalNodeConfigIsCorrect=False (HostOccupied).
  6. Уникальность machine-id — оператор ведёт in-memory карту machine-id (инициализируется при старте по всем существующим хостам). При дубликате вызывается ResetMachineID(), итерация перезапускается.
  7. Итог — при прохождении всех шагов выставляются ShturvalNodeConfigIsCorrect=True и MachineIDUnique=True; status.readyformachine становится true.

Условие готовности IsReadyForMachine

Хост считается готовым к привязке машины (readyformachine=true) при одновременном выполнении:

  • CanConnectToTheNode=True
  • StcCompleted=True ИЛИ StdDeployed=True

Привязка машины

Когда readyformachine=true, контроллер ищет ShturvalMachine с status.selectedhost == host.name. Из найденных кандидатов выбирается один по приоритету:

приоритет = 10 × len(matchExpressions) + 1 × len(matchLabels)

При одинаковом приоритете выбирается машина с лексикографически меньшим именем. Машины в состоянии удаления пропускаются. После выбора устанавливается status.linkedmachine и MachineAttached=True.

Консистентность привязки

Пока хост привязан (machineAttachedAndConfirmed=true), каждая итерация проверяет существование ShturvalMachine из status.linkedmachine и то, что машина не удаляется. При несоответствии привязка сбрасывается.

Триггеры reconcile

СобытиеОписание
Изменение ShturvalHostСтандартный триггер
Изменение status.selectedhost у ShturvalMachineОператор ставит в очередь reconcile соответствующего хоста

Удаление

При deletionTimestamp != nil контроллер отвязывает связанную машину, очищает служебное состояние хоста и снимает финалайзер shturvalhost.infrastructure.cluster.x-k8s.io.

Контроллер ShturvalMachine

Контроллер выбирает хост и выполняет bootstrap Kubernetes-узла.

Выбор хоста: если status.selectedhost пуст, контроллер ищет свободный (не занятый) ShturvalHost по метке provider_config_name (берётся из spec.providerConfigName машины или из ShturvalCluster.spec.providerConfigName). Дополнительно применяется spec.hostSelector. Если хост найден, но не готов (readyformachine=false) — ожидание. Если хост готов, но не подтвердил выбор — ожидание подтверждения от ShturvalHost.

Проверка статуса установки компонентов: выполняется команда sudo std node status. При статусе synched переходит к bootstrap. При syncInProgress или waitingRebootApprove — ожидание (requeue через 1 минуту). При syncFailed — фиксируется ошибка, reconcile прекращается.

Bootstrap (версия ≥ 2.14): вызывается node.PreBootstrapWithCloudInit(). Если shturvald требует перезапуска — перезапуск и requeue. Затем node.BootstrapWithCloudInit() с данными из bootstrap-секрета CAPI.

Bootstrap (версия < 2.14): удаляется /etc/std/nci.json, перезапускается shturvald, ожидается synched, затем выполняется BootstrapWithCloudInit.

Установка providerID: после успешного bootstrap контроллер подключается к целевому кластеру, находит Kubernetes-узел с совпадающим machine-id и устанавливает spec.providerID в формате shturval://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Удаление: при наличии deletionTimestamp контроллер вызывает node.Reset() на узле для его очистки. Если IgnoreResetError=true — ошибки сброса игнорируются и удаление продолжается. После успешной очистки снимается финалайзер.

Триггер reconcile: изменение статуса ShturvalHost (обновление или удаление) ставит в очередь все связанные машины.

Контроллер ShturvalCluster

reconcileNormal: добавляет финалайзер shturvalcluster.infrastructure.cluster.x-k8s.io, устанавливает status.ready=true и condition ShturvalClusterReconciliationReady=True. Если CAPI-кластер поставил кластер на паузу — выставляет Ready=false.

reconcileDelete: ожидает удаления всех ShturvalMachine с меткой cluster.x-k8s.io/cluster-name: <имя кластера>. Пока машины существуют — requeue каждые 5 секунд. После удаления всех машин снимает финалайзер.


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

Параметры задаются через аргументы запуска контейнера manager. Для изменения используйте механизм кастомизации через cluster-manager или ShturvalServicePatch.

ПараметрТипЗначение по умолчаниюОписание
--leader-electboolfalseВключить leader election. Рекомендуется для production
--health-probe-bind-addressstring:8081Адрес liveness/readiness проб
--metrics-bind-addressstring0Адрес метрик (:8443 — HTTPS, :8080 — HTTP, 0 — отключить)
--metrics-securebooltrueВключить HTTPS для метрик с authn/authz через RBAC
--enable-http2boolfalseВключить HTTP/2 (отключён из-за CVE-2023-44487 и CVE-2023-39325)
--condition-message-max-lengthint32768Максимальная длина текста в полях condition message перед усечением
--metrics-cert-pathstring""Путь к директории с TLS-сертификатом метрик
--metrics-cert-namestringtls.crtИмя файла сертификата метрик
--metrics-cert-keystringtls.keyИмя файла ключа сертификата метрик
--webhook-cert-pathstring""Путь к директории с TLS-сертификатом webhook
--webhook-cert-namestringtls.crtИмя файла сертификата webhook
--webhook-cert-keystringtls.keyИмя файла ключа сертификата webhook

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

ПеременнаяЗначение по умолчаниюОписание
ENABLE_WEBHOOKS"" (включено)Установить false для отключения mutating webhook ShturvalCluster

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

Все ресурсы принадлежат API-группе infrastructure.cluster.x-k8s.io, версия v1beta1.


ShturvalHost

Cluster-scoped объект, представляющий физический SSH-узел. Создаётся и управляется контроллером ShturvalProvider.

Короткое имя: smh
Scope: Cluster
Финалайзер: shturvalhost.infrastructure.cluster.x-k8s.io

spec

ПолеТипОбязательноеОписание
spec.addressstringДаIP-адрес или hostname для SSH-подключения
spec.credentialsobjectНетИндивидуальные SSH-учётные данные хоста. Если не указаны, используются из ShturvalProvider
spec.credentials.ssh.namestringНетИмя Secret с SSH-ключом
spec.credentials.ssh.namespacestringНетNamespace Secret с SSH-ключом
spec.pausedboolНетПриостановить обработку хоста. По умолчанию false
spec.systemRegistrystringНетАдрес системного реестра образов. Заполняется контроллером ShturvalProvider из ShturvalProvider.spec.systemRegistry
spec.releaseVersionstringНетВерсия платформы Штурвал. Заполняется контроллером ShturvalProvider из ShturvalProvider.spec.releaseVersion
spec.licenseTokenstringНетЛицензионный токен. Заполняется контроллером ShturvalProvider из ShturvalProvider.spec.licenseToken
spec.providerIDstringНетУстарело начиная с версии 28. Не используется, будет удалено

status

ПолеТипОписание
status.statusstringТекстовый статус хоста
status.readyformachinebooltrue — хост готов к привязке ShturvalMachine
status.machineAttachedAndConfirmedbooltrue — хост привязан к ShturvalMachine и привязка подтверждена
status.linkedmachine.namestringИмя привязанной ShturvalMachine
status.linkedmachine.namespacestringNamespace привязанной ShturvalMachine
status.conditionsarrayConditions хоста (см. раздел 4)
status.nodeInfo.nodetypestringТип узла: master или worker
status.nodeInfo.archstringПроцессорная архитектура
status.nodeInfo.hostnamestringHostname узла
status.nodeInfo.memoryintОбъём ОЗУ в МБ
status.nodeInfo.cpucoresintКоличество ядер CPU
status.nodeInfo.rootvolumesizeintРазмер корневого тома в МБ
status.nodeInfo.ethinterfacestringИмя основного сетевого интерфейса
status.nodeInfo.operatingsystemstringНазвание ОС
status.nodeInfo.osreleasestringВерсия ОС
status.nodeInfo.kernelversionstringВерсия ядра
status.nodeInfo.machineidstringЗначение /etc/machine-id
status.nodeInfo.kubestatus.service_runningboolЗапущен ли сервис Kubernetes
status.nodeInfo.kubestatus.config_presentboolПрисутствует ли kubeconfig
status.nodeInfo.kubestatus.cluster_namestringИмя кластера-владельца (если занят)
status.nodeInfo.kubestatus.api_addrstringАдрес API-сервера кластера-владельца
status.nodeInfo.disksarrayИнформация о дисках узла
status.nodeInfo.portsarrayИнформация о сетевых портах узла

ShturvalProvider

Cluster-scoped объект глобальной конфигурации провайдера: список хостов, реестр образов, версия Штурвала, лицензия, SSH-учётные данные по умолчанию. Является источником истины для всех ShturvalHost.

Короткое имя: smp
Scope: Cluster
Финалайзер: shturvalprovider.infrastructure.cluster.x-k8s.io

spec

ПолеТипОбязательноеОписание
spec.hostsarrayНетСписок хостов, управляемых этим провайдером
spec.hosts[].addressstringДаIP-адрес или FQDN хоста (валидируется по шаблону IPv4 или FQDN)
spec.hosts[].labelsmap[string]stringНетМетки хоста для использования в spec.hostSelector машин
spec.hosts[].credentials.ssh.namestringНетИмя индивидуального Secret для хоста
spec.hosts[].credentials.ssh.namespacestringНетNamespace индивидуального Secret
spec.systemRegistrystringНетАдрес системного реестра образов
spec.releaseVersionstringНетВерсия платформы Штурвал (используется при bootstrap)
spec.licenseTokenstringНетЛицензионный токен платформы
spec.credentials.secretRef.namestringДаИмя Secret с глобальными SSH-учётными данными
spec.credentials.secretRef.namespacestringДаNamespace Secret с глобальными SSH-учётными данными
spec.pausedboolНетПриостановить обработку провайдера

status

ПолеТипОписание
status.hostsmap[string]objectКарта статусов хостов по адресу
status.hosts[address].readyboolГотовность хоста
status.hosts[address].conditionsarrayConditions хоста (тип HostCreated)

ShturvalCluster

Namespaced объект кластера Kubernetes в терминах Cluster API.

Короткое имя: smc
Scope: Namespace
Финалайзер: shturvalcluster.infrastructure.cluster.x-k8s.io

spec

ПолеТипОбязательноеОписание
spec.controlPlaneEndpoint.hoststringДаHostname или IP API-сервера кластера
spec.controlPlaneEndpoint.portint32ДаПорт API-сервера. Если 0 — webhook автоматически устанавливает 6443
spec.secureboolДаВключить строгие параметры безопасности
spec.deployKeepAliveboolДаРазвернуть компонент KeepAlive
spec.ingressstringДаDNS-запись для Ingress-контроллера
spec.providerConfigNamestringДаИмя ShturvalProvider для этого кластера. Используется при поиске хостов, если ShturvalMachine.spec.providerConfigName не задан

status

ПолеТипОписание
status.readyboolГотовность кластера
status.conditionsarrayConditions кластера (ShturvalClusterReconciliationReady, ShturvalClusterDeleting)
status.failureDomainsarray ([]FailureDomain)Домены отказоустойчивости

ShturvalMachine

Namespaced объект, представляющий узел кластера в терминах Cluster API.

Короткое имя: smm
Scope: Namespace
Финалайзер: shturvalmachine.infrastructure.cluster.x-k8s.io

spec

ПолеТипОбязательноеОписание
spec.nodeTypestringНетТип узла (например master, worker)
spec.hostSelectorobjectНетLabel-селектор для выбора ShturvalHost
spec.hostSelector.matchLabelsmap[string]stringНетУсловия точного совпадения меток
spec.hostSelector.matchExpressionsarrayНетРасширенные условия. Имеют приоритет над matchLabels при выборе кандидата хоста
spec.providerConfigNamestringНетИмя ShturvalProvider для поиска хостов. Если не задан, берётся из ShturvalCluster.spec.providerConfigName
spec.providerIDstringНетУникальный ID узла в формате shturval://<machine-id>. Заполняется автоматически после bootstrap
spec.hostNamestringНетУстарело начиная с версии 28. Будет удалено

status

ПолеТипОписание
status.readyboolГотовность узла к работе
status.addressstringIPv4-адрес основного интерфейса
status.selectedhoststringИмя выбранного ShturvalHost (требует подтверждения от хоста)
status.infoobjectИнформация об узле (аналогично ShturvalHost.status.nodeInfo)
status.initialization.provisioned*booltrue — инфраструктура узла полностью готова (часть контракта Cluster API)
status.failureReasonstringКод терминальной ошибки, требующей ручного вмешательства
status.failureMessagestringОписание терминальной ошибки
status.conditionsarrayConditions узла (см. раздел 4)

ShturvalMachineTemplate

Namespaced шаблон для ShturvalMachine. Используется CAPI при автоматическом создании объектов ShturvalMachine в рамках MachineDeployment или MachineSet.

Короткое имя: smt
Scope: Namespace

spec

ПолеТипОбязательноеОписание
spec.template.metadataobjectНетМетки и аннотации, применяемые к создаваемым ShturvalMachine
spec.template.specobjectДаСпецификация создаваемых ShturvalMachine. Поля идентичны ShturvalMachine.spec