Профиль конфигурации клиентского кластера (ClusterProfile)
На этой странице
При создании клиентских кластеров применяются настройки конфигурации, определенные по умолчанию. Начиная с релиза 2.13 в платформе “Штурвал” реализована возможность определить конфигурацию на этапе развертывания кластера. С помощью профиля кластера (ClusterProfile) вы можете задать какие манифесты объектов необходимо применить в кластере (клиентском и/или управления) при инициализации.
Кастомные профили могут быть полезны, например, для применения в различных окружениях или при массовом применении типовой конфигурации.
ClusterProfile - кастомный ресурс API-группы cluster.shturval.tech, управление которым осуществляется в кластере управления. По умолчанию предустановлен дефолтный профиль с именем default-client-cluster-profile.
В графическом интерфейсе профили конфигурации клиентских кластеров доступны для выбора на этапе создания клиентского кластера, шаг “Основные данные” и в режиме расширенных настроек.
Скриншот выбора профиля

Создать профиль кластера
Чтобы добавить требуемую конфигурацию для применения на этапе создания кластера:
- Подготовьте манифесты объектов, которые должны быть созданы. Например, вы можете определить для создаваемого клиентского кластера:
- настройки устанавливаемых сервисов с помощью PatchSSC;
- сетевые политики Cilium и политики безопасности Kyverno;
- конфигурацию узлов кластера c помощью NCI;
- MachineHealthCheck.
Пример манифеста NCI
apiVersion: node.shturval.tech/v1beta2
kind: NodeConfigItem
metadata:
name: admin-user
spec:
nodeconfigselector:
kubernetes.io/os: linux
priority: 100
users:
- group: someusergroup
homedir: ""
shell: /bin/bash
username: someuser
Обратите внимание! При необходимости подстановки имени кластера в манифест, который будет применен при инициализации кластера, используйте плейсхолдер {{.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
- В неймспейсе
kube-systemкластера управления создайте Secret с типом Opaque. Добавьте ключи, в значении которых укажите подготовленные манифесты.
Пример Secret с манифестами NCI и Namespace
apiVersion: v1
kind: Secret
type: Opaque
metadata:
labels:
cluster.shturval.tech/manifest: ""
clientcluster: clientcluster
name: secret-for-profile
namespace: kube-system
data:
key: YXBpVmVyc2lvbjogbm9kZS5zaHR1cnZhbC50ZWNoL3YxYmV0YTIKa2luZDogTm9kZUNvbmZpZ0l0ZW0KbWV0YWRhdGE6CiAgbmFtZTogYWRtaW4tdXNlcgpzcGVjOgogIG5vZGVjb25maWdzZWxlY3RvcjoKICAgIGt1YmVybmV0ZXMuaW8vb3M6IGxpbnV4CiAgcHJpb3JpdHk6IDEwMAogIHVzZXJzOgogICAgLSBncm91cDogc29tZXVzZXJncm91cAogICAgICBob21lZGlyOiAiIgogICAgICBzaGVsbDogL2Jpbi9iYXNoCiAgICAgIHVzZXJuYW1lOiBzb21ldXNlcg==
key2:
YXBpVmVyc2lvbjogdjEKa2luZDogTmFtZXNwYWNlCm1ldGFkYXRhOgogIG5hbWU6IG5zLWJ5LWNsdXN0ZXJwcm9maWxl
Secrets должен быть обязательно присвоен дефолтный лейбл "cluster.shturval.tech/manifest": "". Secrets без дефолтного лейбла будут проигнорированы.
При необходимости добавьте еще лейблы для гибкого управления секретами в разных профилях.
Скриншот


- Подготовьте манифест ClusterProfile, где:
- укажите имя профиля и неймспейс
kube-system; - в блоке
CustomManifestsзадайте совпадающие лейблы Secrets;- Если указан хотя бы один лейбл в селекторе лейблов (matchLabels), возможно не добавлять в
matchExpressionдефолтный лейбл. Он будет присвоен автоматически. - Если используется только дефолтный лейбл
cluster.shturval.tech/manifest, его необходимо добавить в селектор лейблов.
- Если указан хотя бы один лейбл в селекторе лейблов (matchLabels), возможно не добавлять в
- пропишите в каком кластере (клиентском, управления) манифесты из Secret должны деплоиться:
clientManifestsSelectorилиplatformManifestsSelector.
- укажите имя профиля и неймспейс
Обратите внимание! Селектор лейблов работает по принципу объединения. У выбираемого объекта должны быть все указанные лейблы.
Пример кастомного ClusterProfile
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterProfile
metadata:
name: cluster-profile
namespace: kube-system
spec:
customManifests:
- clientManifestsSelector: # Манифесты Secrets, соответствующие селектору, будут применены в клиентском кластере
matchLabels:
clientcluster: clientcluster
platformManifestsSelector: # Манифесты Secrets, соответствующие селектору, будут применены в кластере управления
matchLabels:
cluster.shturval.tech/manifest:
- Загрузите ClusterProfile в кластер управления, например, в графическом интерфейсе с помощью импорта манифестов.
Скриншот

Обратите внимание!
- Переопределять конфигурацию дефолтного ClusterProfile с именем
default-client-cluster-profileстрого запрещено. Это может привести к ошибкам создания клиентских кластеров. - После создания кастомного профиля с настройкой применения манифестов, конфигурация профиля
default-client-cluster-profileбудет добавлена по умолчанию. - Применение кастомного профиля с переопределенными параметрами конфигурации (за исключением настройки применения манифестов) может привести к ошибкам инициализации кластера.
Пример примененного ClusterProfile
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.
- Обновления конфигурации ClusterProfile, указанных в нем Secrets, манифестов объектов в Secrets не приведут к изменению конфигурации ранее созданных клиентских кластеров с этим профилем.
- Любые изменения (обновление, создание новых) Secrets, соответствующих селектору в профиле кластера, приведут к автоматическому обновлению в профиле.
- В кластер управления могут быть созданы ресурсы из API-групп
auth.shturval.techиcuster.x-k8s.ioдля применения в клиентском кластере. - Фазу применения манифестов нельзя переопределить (deployPhase: postsscdeploy), она устанавливается по умолчанию. Манифесты применяются после установки сервисов в кластере.
- Манифесты ресурсов, которыми управляет кластер управления, создаются только в неймспейсе клиентского кластера, заданный неймспейс в манифесте игнорируется.