Провайдер 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. Перед развёртыванием убедитесь, что целевые узлы соответствуют поддерживаемой архитектуре.

Характеристика Значение
Группа API infrastructure.cluster.x-k8s.io/v1beta1
Namespace оператора shturval-capsm
Leader election включён; ID 5eeb8da4.cluster.x-k8s.io — безопасная работа при нескольких репликах
Метрики HTTPS на порту :8443; аутентификация через RBAC
Health / Readiness HTTP на порту :8081 (/healthz, /readyz)
Webhook Mutating webhook для ShturvalCluster на порту :9443
Pod Security Pod Security Standards: restricted

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

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

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

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

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

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

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

Объект Имя Параметры
Deployment controller-manager 1 реплика, образ 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:

Параметр Значение
runAsNonRoot true

RBAC

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

API Group Ресурсы Права
"" (core) secrets get, list, watch, create, update, patch, delete
cluster.x-k8s.io clusters, machines, machines/status get, list, watch
infrastructure.cluster.x-k8s.io shturvalclusters, shturvalhosts, shturvalproviders get, list, watch, create, update, patch, delete
infrastructure.cluster.x-k8s.io shturvalmachines get, list, patch, update, watch
infrastructure.cluster.x-k8s.io shturvalclusters/finalizers, shturvalhosts/finalizers, shturvalmachines/finalizers, shturvalproviders/finalizers patch, update
infrastructure.cluster.x-k8s.io shturvalclusters/status, shturvalhosts/status, shturvalmachines/status, shturvalproviders/status get, 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.

Поле Тип По умолчанию Описание
replicaCount int 1 Количество реплик Deployment
image.repository string r.shturval.tech/capsm/capsm Репозиторий образа оператора
image.tag string Тег образа. Если не задан, используется appVersion из Chart.yaml
serviceAccount.create bool true Создать ServiceAccount
serviceAccount.name string controller-manager Имя ServiceAccount
resources.limits.cpu string 500m Лимит CPU контейнера manager
resources.limits.memory string 128Mi Лимит памяти контейнера manager
resources.requests.cpu string 10m Запрос CPU контейнера manager
resources.requests.memory string 64Mi Запрос памяти контейнера 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

После создания 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-manager STATUS: Running
Liveness kubectl exec -n shturval-capsm <pod> -- wget -qO- http://localhost:8081/healthz ok
Readiness kubectl exec -n shturval-capsm <pod> -- wget -qO- http://localhost:8081/readyz ok
Метрики доступны Запрос к :8443/metrics через ServiceAccount с ролью metrics-reader HTTP 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:

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

Conditions для ShturvalHost

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

Condition Что проверяется Действие при False / Unknown
CanConnectToTheNode SSH-соединение с хостом установлено Проверить 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 на узле
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
K8sNodeBootstrapSucceeded Bootstrap Kubernetes-узла через BootstrapWithCloudInit выполнен успешно Проверить наличие bootstrap-секрета в CAPI. Причины: BootstrapNotReadyReason, BootstrapExecutionFailedReason, PreBootstrapExecutionFailedReason
K8sProviderIDSetup providerID установлен в spec.providerID машины и в spec.providerID Kubernetes-узла Убедиться, что узел появился в кластере с корректным machine-id. Причина ошибки в логах оператора

Conditions для ShturvalCluster

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

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

Симптом Вероятная причина Действие
CanConnectToTheNode=False, reason FailedToConnect Неверный IP или SSH-порт недоступен Проверить spec.address и сетевую доступность узла
CanConnectToTheNode=False, reason FailedToGetCredentials Secret с SSH-ключом не найден Убедиться, что Secret из spec.credentials.ssh существует в указанном namespace
StdDeployed=False, reason ShturvaldDaemonNotFound shturvald удалён с узла вручную Переустановить shturvald на узле
ShturvalNodeConfigIsCorrect=False, reason HostOccupied Узел входит в другой кластер Kubernetes Вывести узел из кластера или использовать другой хост
MachineIDUnique=False, reason MachineIDNeedCheck Дубликат machine-id (клонирование ВМ) Ожидать: оператор автоматически сбросит machine-id
HostAttached=False, reason NoApplicableHost Нет свободных хостов с нужными метками Добавить хосты в ShturvalProvider.spec.hosts с нужными метками
K8sComponentsInstallationSucceeded=False, reason NodeStatusReason sudo 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 контроллер удаляет machine-id из внутренней карты. Удаление финалайзера передаётся контроллеру ShturvalProvider.

Контроллер 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-elect bool false Включить leader election. Рекомендуется для production
--health-probe-bind-address string :8081 Адрес liveness/readiness проб
--metrics-bind-address string 0 Адрес метрик (:8443 — HTTPS, :8080 — HTTP, 0 — отключить)
--metrics-secure bool true Включить HTTPS для метрик с authn/authz через RBAC
--enable-http2 bool false Включить HTTP/2 (отключён из-за CVE-2023-44487 и CVE-2023-39325)
--condition-message-max-length int 32768 Максимальная длина текста в полях condition message перед усечением
--metrics-cert-path string "" Путь к директории с TLS-сертификатом метрик
--metrics-cert-name string tls.crt Имя файла сертификата метрик
--metrics-cert-key string tls.key Имя файла ключа сертификата метрик
--webhook-cert-path string "" Путь к директории с TLS-сертификатом webhook
--webhook-cert-name string tls.crt Имя файла сертификата webhook
--webhook-cert-key string tls.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.address string Да IP-адрес или hostname для SSH-подключения
spec.credentials object Нет Индивидуальные SSH-учётные данные хоста. Если не указаны, используются из ShturvalProvider
spec.credentials.ssh.name string Нет Имя Secret с SSH-ключом
spec.credentials.ssh.namespace string Нет Namespace Secret с SSH-ключом
spec.paused bool Нет Приостановить обработку хоста. По умолчанию false
spec.systemRegistry string Нет Адрес системного реестра образов. Заполняется контроллером ShturvalProvider из ShturvalProvider.spec.systemRegistry
spec.releaseVersion string Нет Версия платформы Штурвал. Заполняется контроллером ShturvalProvider из ShturvalProvider.spec.releaseVersion
spec.licenseToken string Нет Лицензионный токен. Заполняется контроллером ShturvalProvider из ShturvalProvider.spec.licenseToken
spec.providerID string Нет Устарело начиная с версии 28. Не используется, будет удалено

status

Поле Тип Описание
status.status string Текстовый статус хоста
status.readyformachine bool true — хост готов к привязке ShturvalMachine
status.machineAttachedAndConfirmed bool true — хост привязан к ShturvalMachine и привязка подтверждена
status.linkedmachine.name string Имя привязанной ShturvalMachine
status.linkedmachine.namespace string Namespace привязанной ShturvalMachine
status.conditions array Conditions хоста (см. раздел 4)
status.nodeInfo.nodetype string Тип узла: master или worker
status.nodeInfo.arch string Процессорная архитектура
status.nodeInfo.hostname string Hostname узла
status.nodeInfo.memory int Объём ОЗУ в МБ
status.nodeInfo.cpucores int Количество ядер CPU
status.nodeInfo.rootvolumesize int Размер корневого тома в МБ
status.nodeInfo.ethinterface string Имя основного сетевого интерфейса
status.nodeInfo.operatingsystem string Название ОС
status.nodeInfo.osrelease string Версия ОС
status.nodeInfo.kernelversion string Версия ядра
status.nodeInfo.machineid string Значение /etc/machine-id
status.nodeInfo.kubestatus.service_running bool Запущен ли сервис Kubernetes
status.nodeInfo.kubestatus.config_present bool Присутствует ли kubeconfig
status.nodeInfo.kubestatus.cluster_name string Имя кластера-владельца (если занят)
status.nodeInfo.kubestatus.api_addr string Адрес API-сервера кластера-владельца

ShturvalProvider

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

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

spec

Поле Тип Обязательное Описание
spec.hosts array Нет Список хостов, управляемых этим провайдером
spec.hosts[].address string Да IP-адрес или FQDN хоста (валидируется по шаблону IPv4 или FQDN)
spec.hosts[].labels map[string]string Нет Метки хоста для использования в spec.hostSelector машин
spec.hosts[].credentials.ssh.name string Нет Имя индивидуального Secret для хоста
spec.hosts[].credentials.ssh.namespace string Нет Namespace индивидуального Secret
spec.systemRegistry string Нет Адрес системного реестра образов
spec.releaseVersion string Нет Версия платформы Штурвал (используется при bootstrap)
spec.licenseToken string Нет Лицензионный токен платформы
spec.credentials.secretRef.name string Да Имя Secret с глобальными SSH-учётными данными
spec.credentials.secretRef.namespace string Да Namespace Secret с глобальными SSH-учётными данными
spec.paused bool Да Приостановить обработку провайдера

status

Поле Тип Описание
status.hosts map[string]object Карта статусов хостов по адресу
status.hosts[address].ready bool Готовность хоста
status.hosts[address].conditions array Conditions хоста (тип HostCreated)

ShturvalCluster

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

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

spec

Поле Тип Обязательное Описание
spec.controlPlaneEndpoint.host string Да Hostname или IP API-сервера кластера
spec.controlPlaneEndpoint.port int32 Да Порт API-сервера. Если 0 — webhook автоматически устанавливает 6443
spec.secure bool Да Включить строгие параметры безопасности
spec.deployKeepAlive bool Да Развернуть компонент KeepAlive
spec.ingress string Да DNS-запись для Ingress-контроллера
spec.providerConfigName string Да Имя ShturvalProvider для этого кластера. Используется при поиске хостов, если ShturvalMachine.spec.providerConfigName не задан

status

Поле Тип Описание
status.ready bool Готовность кластера
status.conditions array Conditions кластера (ShturvalClusterReconciliationReady, ShturvalClusterDeleting)
status.failureDomains map Домены отказоустойчивости

ShturvalMachine

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

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

spec

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

status

Поле Тип Описание
status.ready bool Готовность узла к работе
status.address string IPv4-адрес основного интерфейса
status.selectedhost string Имя выбранного ShturvalHost (требует подтверждения от хоста)
status.info object Информация об узле (аналогично ShturvalHost.status.nodeInfo)
status.initialization.provisioned *bool true — инфраструктура узла полностью готова (часть контракта Cluster API)
status.failureReason string Код терминальной ошибки, требующей ручного вмешательства
status.failureMessage string Описание терминальной ошибки
status.conditions array Conditions узла (см. раздел 4)

ShturvalMachineTemplate

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

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

spec

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