Провайдер 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.
Содержание
- Обзор
- Архитектура
- Установка сервиса
- Диагностика
- Жизненный цикл
- Параметры оператора
- Справочник CRD/API
1. Обзор
shturval-manual — оператор Kubernetes, реализующий роль CAPI infrastructure provider для платформы Штурвал. Оператор управляет bare-metal- и SSH-узлами: автоматически регистрирует физические хосты, контролирует их готовность, связывает с объектами Cluster API и выполняет начальную инициализацию (bootstrap) узлов Kubernetes.
Место в цепочке управления
Иллюстрация: Место в цепочке управления

Ключевые характеристики
Обратите внимание! Провайдер 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. Архитектура

Компоненты рабочей нагрузки
| Объект | Имя | Параметры |
|---|---|---|
| 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.infrastructure.cluster.x-k8s.io и завершает итерацию с requeue через 1 секунду.
Подготовка нового хоста
- SSH-подключение — устанавливает соединение по
spec.address. При сетевой ошибке —CanConnectToTheNode=False, requeue 1 с. - Проверка sudo (однократно, пока
CheckSudoнеTrue) — при ошибкеCheckSudo=False. - Развёртывание демона shturvald (однократно, пока
StdDeployedилиStcCompletedнеTrue) — вызовEnsureSTDDeployed(). - Получение информации об узле — через shturvald запрашиваются метаданные (архитектура, hostname, память, CPU, machine-id, статус Kubernetes). Если демон удалён вручную,
StdDeployedсбрасывается. - Проверка занятости — если на узле активен сервис Kubernetes или присутствует kubeconfig, выставляется
ShturvalNodeConfigIsCorrect=False (HostOccupied). - Уникальность machine-id — оператор ведёт in-memory карту machine-id (инициализируется при старте по всем существующим хостам). При дубликате вызывается
ResetMachineID(), итерация перезапускается. - Итог — при прохождении всех шагов выставляются
ShturvalNodeConfigIsCorrect=TrueиMachineIDUnique=True;status.readyformachineстановитсяtrue.
Условие готовности IsReadyForMachine
Хост считается готовым к привязке машины (readyformachine=true) при одновременном выполнении:
CanConnectToTheNode=TrueStcCompleted=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 |