Что такое профили кластеров (ClusterProfile)
Назначение профиля в платформе
ClusterProfile — кастомный ресурс API-группы cluster.shturval.tech (см. Кастомные ресурсы платформы). Управление профилями выполняется в кластере управления. По умолчанию предустановлен профиль default-client-cluster-profile.
Кастомные профили полезны для разных окружений и массового применения типовой конфигурации.
В платформе «Штурвал» с помощью кастомного профиля кластера (ClusterProfile) можно переопределить настройки конфигурации клиентских кластеров:
- параметры репозитория образов, логирования, мониторинга, часового пояса и NTP;
- конфигурации
Cluster API,KubeletиKubeadm; - добавить YAML-манифесты объектов, которые будут созданы в клиентском кластере или в кластере управления при инициализации клиентского кластера.
Переопределять конфигурацию дефолтного ClusterProfile с именем default-client-cluster-profile строго запрещено. Это может привести к ошибкам создания клиентских кластеров.
Если конфигурация дефолтного профиля была изменена, верните её к исходным значениям в соответствии с данными из ClusterConfig кластера управления.
Пример дефолтного профиля default-client-cluster-profile
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterProfile
metadata:
name: default-client-cluster-profile
namespace: kube-system
labels:
shturval.tech/shturval-cluster-profile-config: ""
spec:
license: '<license из ClusterConfig>'
loggingEndpoint: '<loggingUrl из статуса ClusterConfig>'
monitoringEndpoint: '<monitoringUrl из статуса ClusterConfig>'
repositoryConfig:
commonUrl: '<systemRegistryConfig.commonUrl из ClusterConfig>'
time_zone: Europe/Moscow
ntpServers: []
clusterAPIConfiguration:
machineDeployment:
nodeDeletionTimeout: 10m0s
nodeDrainTimeout: 10m0s
nodeVolumeDetachTimeout: 5m0s
kubeadmControlPlaneConfiguration:
MachineTemplate:
nodeDeletionTimeout: 10m0s
nodeDrainTimeout: 10m0s
nodeVolumeDetachTimeout: 5m0s
clusterConfiguration:
apiServer:
extraArgs:
authorization-mode: Node,RBAC
default-not-ready-toleration-seconds: '30'
default-unreachable-toleration-seconds: '30'
profiling: 'false'
certificatesDir: /etc/kubernetes/pki
controllerManager:
extraArgs:
bind-address: 0.0.0.0
node-monitor-grace-period: 20s
node-monitor-period: 2s
profiling: 'false'
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: <systemRegistryConfig.commonUrl из ClusterConfig кластера управления>
networking:
dnsDomain: cluster.local
podSubnet: 172.16.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler:
extraArgs:
bind-address: 0.0.0.0
profiling: 'false'
initConfiguration:
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
skipPhases:
- addon/kube-proxy
joinConfiguration:
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
kubeletConfiguration:
cgroupDriver: systemd
enableProfilingdeployers.Handler: false
imageGCHighThresholdPercent: 70
imageGCLowThresholdPercent: 65
imageMinimumGCAge: 15m0s
nodeStatusUpdateFrequency: 4s
readOnlyPort: 0
rotateCertificates: true
tlsMinVersion: VersionTLS13
Создание профилей описано на странице: Как создавать и применять профили кластеров (ClusterProfile).
Как работает профиль кластера
ClusterProfile — это шаблон конфигурации клиентского кластера. Профиль выбирается при создании клиентского кластера и применяется во время его инициализации.
Если часть параметров в кастомном профиле не заполнена, они автоматически дозаполняются значениями из дефолтного профиля default-client-cluster-profile.
Профили создаются в неймспейсе kube-system кластера управления. Обновление конфигурации ClusterProfile не изменяет конфигурацию ранее созданных клиентских кластеров с этим профилем.
Secrets с YAML-манифестами
Через профиль можно добавить YAML-манифесты объектов, которые должны быть созданы при развёртывании клиентского кластера. Например:
- настройки устанавливаемых сервисов с помощью
ShturvalServicePatch; - сетевые политики Cilium и политики безопасности Kyverno;
- конфигурацию узлов кластера с помощью NCI;
MachineHealthCheck.
Эти объекты хранятся в Secrets неймспейса kube-system кластера управления.
Secret с манифестами должен иметь обязательный лейбл cluster.shturval.tech/manifest. Secrets без этого лейбла будут проигнорированы в профилях. Дополнительно рекомендуется добавлять уникальный лейбл, по которому выбираются только Secrets, нужные для определенного профиля.
В блоке customManifests селектор указывает, где должны применяться манифесты из Secret:
clientManifestsSelector— в клиентском кластере;platformManifestsSelector— в неймспейсе клиентского кластера в кластере управления. Манифесты ресурсов, которыми управляет кластер управления, создаются только в неймспейсе клиентского кластера. Неймспейс, заданный в манифесте, в этом случае игнорируется.
Для манифестов, которые применяются в кластере управления через platformManifestsSelector, важны права shturval-cluster-manager. Если в профиль добавлен ресурс из разрешённой API-группы, но у cluster-manager нет прав на его создание или чтение, проверка Secret завершится ошибкой. Например, дополнительные права нужны для произвольного создания users.auth.shturval.tech или pods.
Все манифесты из Secrets, попавших в выборку, применятся на этапе инициализации после установки сервисов клиентского кластера.
Фазу применения манифестов нельзя переопределить: deployPhase: postsscdeploy устанавливается по умолчанию.
Если в манифесте необходимо использовать имя создаваемого клиентского кластера, используйте плейсхолдер {{.ClusterName}}. При применении манифеста платформа заменит его на фактическое имя кластера.
apiVersion: cluster.x-k8s.io/v1beta2
kind: MachineHealthCheck
metadata:
name: "{{.ClusterName}}-default-healthcheck"
namespace: "{{.ClusterName}}"
spec:
checks:
nodeStartupTimeoutSeconds: 0
unhealthyNodeConditions:
- status: Unknown
timeoutSeconds: 600
type: Ready
- status: 'False'
timeoutSeconds: 600
type: Ready
clusterName: "{{.ClusterName}}"
remediation:
triggerIf:
unhealthyLessThanOrEqualTo: 39%
selector:
matchLabels:
cluster.x-k8s.io/deployment-name: "{{.ClusterName}}-default"
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterProfile
metadata:
creationTimestamp: 2026-01-22T07:55:09Z
generation: 1
labels:
k8slens-edit-resource-version: v1beta1
shturval.tech/shturval-cluster-profile-config: ""
name: cluster-profile
namespace: kube-system
resourceVersion: "29842860"
uid: 44a09930-9728-418b-a8c6-51e791a2aa64
spec:
customManifests:
- clientManifestsSelector:
matchExpressions:
- key: cluster.shturval.tech/manifest
operator: Exists
matchLabels:
clientcluster: clientcluster
platformManifestsSelector:
matchExpressions:
- key: cluster.shturval.tech/manifest
operator: Exists
matchLabels: {}
# Здесь будут параметры конфигурации дефолтного профиля кластера
status:
extraManifestsStatus:
manifestsStatus:
- clientManifestsStatus:
- secretRef:
name: secretname
namespace: kube-system
status: valid
deployPhase: postsscdeploy
platformManifestsStatus:
- secretRef:
name: secretname
namespace: kube-system
status: valid
ready:
status: "True"
Особенности работы профилей с манифестами
- Результаты валидации манифестов объектов, включённых в Secret, выводятся в статус
ClusterProfile. - Любые изменения Secrets, соответствующих селектору в профиле кластера, включая обновление и создание новых Secrets, приводят к автоматическому обновлению в профиле.
- Добавить в профиль ресурсы для применения в кластере управления возможно только из разрешённых API-групп.
Разрешённые API-группы для манифестов кластера управления
| Категория | API-группы |
|---|---|
| Kubernetes core | core, apps, coordination.k8s.io |
| Cluster API | cluster.x-k8s.io, bootstrap.cluster.x-k8s.io, controlplane.cluster.x-k8s.io, infrastructure.cluster.x-k8s.io |
| Платформа Штурвал | auth.shturval.tech, cluster.shturval.tech, node.shturval.tech, ops.shturval.tech, permissions.shturval.tech, update.shturval.tech |
| Observability | observability.kaasops.io, operator.victoriametrics.com |
- Проверка платформенных манифестов учитывает не только API-группу, но и права cluster-manager на действие с ресурсом. При отсутствии прав в статусе профиля появится ошибка проверки Secret, а профиль нельзя будет выбрать при создании клиентского кластера. Как расширить права, см. в разделе Если не хватает прав на платформенные манифесты.
- Создание профиля не применяет манифесты сразу. Манифесты из профиля применяются только при создании клиентского кластера, в котором выбран этот профиль.
Статус профиля
Статус профиля показывает, можно ли использовать профиль при создании клиентского кластера, и связан только с проверкой манифестов.
| Статус | Значение |
|---|---|
True, сообщение custom manifests not configured, в GUI Not Ready |
Кастомные манифесты не заданы. Профиль можно использовать |
True, в GUI Ready |
Все найденные Secrets с манифестами прошли проверку. Профиль можно использовать |
False, в GUI Not Ready |
Один или несколько Secrets не прошли проверку, либо по селектору не удалось найти Secrets |
| Статус не отображается | Контроллер ещё не обработал профиль |
Если статус профиля False или один из Secrets имеет статус incorrect, профиль будет недоступен для выбора при создании клиентского кластера.