Как создавать и применять профили кластеров (ClusterProfile)
Справочная информация о назначении и особенностях профилей: Что такое профили кластеров (ClusterProfile).
Создание кастомного профиля
Создание и работа с профилем в графическом интерфейсе
Чтобы создать новый профиль в GUI:
- В Платформе перейдите на страницу Профили конфигурации клиентских кластеров одним из способов:
- в Платформе выберите раздел Профили кластеров → страница Профили конфигурации клиентских кластеров;
- на вкладке Платформа перейдите по кнопке Профили кластеров.
- Нажмите + Создать профиль.
- Укажите Имя профиля.
При необходимости добавьте Лейблы и Аннотации. Например, в аннотациях вы можете указать для каких окружения и требований создаётся профиль. Это поможет в дальнейшем быстрее выбирать и редактировать нужные профили.
Скриншот: создание профиля конфигурации

- В блоке Спецификация заполните нужные параметры. Для создания профиля должен быть задан минимум один параметр спецификации. Недостающие параметры будут заполнены значениями дефолтного профиля
default-client-cluster-profile.
| Поле | Описание |
|---|---|
| Репозиторий | Адрес репозитория образов |
| Адрес внешнего сервиса сбора логов | По умолчанию логи во внешний сервис отправляются по протоколу Elasticsearch v8 в формате json. Если не задан адрес внешнего сервиса - проставляется FQDN логирования платформы |
| Адрес внешнего сервиса мониторинга | По умолчанию метрики во внешний сервис отправляются по протоколу Prometheus/VictoriaMetrics RemoteWrite в формате json. Если не задан адрес внешнего сервиса - проставляется FQDN мониторинга платформы |
| Часовой пояс | Часовой пояс, например, Europe/Moscow. По умолчанию — Europe/Moscow |
| Список серверов NTP | Адреса корпоративных серверов. IP-адрес или FQDN NTP-серверов |
- При необходимости на вкладках:
- Кастомные манифесты добавьте YAML-манифесты объектов;
- переопределите конфигурацию:
- Cluster API;
- Kubelet;
- Kubeadm.
Вкладка Кастомные манифесты
На вкладке Кастомные манифесты задаются YAML-манифесты объектов, которые должны быть созданы при инициализации клиентского кластера.
Вкладка содержит две подвкладки:
- Клиентский кластер — манифесты должны быть созданы в клиентском кластере;
- Кластер управления — манифесты должны быть созданы в неймспейсе клиентского кластера в кластере управления.
Если манифесты были добавлены, при создании профиля в неймспейсе kube-system кластера управления будет создан Secret с загруженными манифестами.
Подвкладки устроены идентично.
Требования к манифестам
Загруженные манифесты проверяются перед использованием профиля.
Поддерживаются как одиночные, так и многообъектные YAML-манифесты (через разделитель ---).
Манифест считается корректным, если выполняются условия:
- содержимое манифеста не пустое;
- YAML синтаксически корректен;
- для манифестов на подвкладке Кластер управления используются только ресурсы разрешённых API-групп.
Проверить список прав для применения манифестов в GUI: кластер управления → Администрирование → Кастомные ресурсы → API-группа rbac.authorization.k8s.io → ClusterRole - shturval-cluster-manager-role.
Если нужных прав нет, см. раздел Если не хватает прав на платформенные манифесты.
Разрешённые API-группы для манифестов кластера управления
| Категория | API-группы | Разрешённые ресурсы |
|---|---|---|
| Kubernetes core | core, apps, authorization.k8s.io, coordination.k8s.io |
configmaps, events, namespaces, secrets; deployments; selfsubjectaccessreviews; leases |
| Cluster API | cluster.x-k8s.io, bootstrap.cluster.x-k8s.io, controlplane.cluster.x-k8s.io, infrastructure.cluster.x-k8s.io |
все ресурсы cluster.x-k8s.io; kubeadmconfigs; kubeadmcontrolplanes; ipaddresses, ippools, ippools/status, ovirtproviders, shturvalproviders, vcdclusters, vsphereclusteridentities |
| Платформа Штурвал | auth.shturval.tech, cluster.shturval.tech, node.shturval.tech, ops.shturval.tech, permissions.shturval.tech, update.shturval.tech |
authoidcclients ; clusterconfigs, clusterconfigs/finalizers, clusterconfigs/status, clusterinfoes, clusterinfoes/finalizers, clusterinfoes/status, clusterprofiles, clusterprofiles/finalizers, clusterprofiles/status; nodeconfigitems; shturvalserviceconfigs; grouproles, tenants; shturvalupdates |
| Observability | observability.kaasops.io, operator.victoriametrics.com |
vectorpipelines; vlsingles, vmagents, vmalertmanagerconfigs, vmalerts, vmrules, vmusers |
В манифестах можно использовать плейсхолдер:
{{ .ClusterName }}
При применении манифеста плейсхолдер будет заменен на имя создаваемого клиентского кластера.
Режимы управления манифестами в профиле
Доступны два режима:
- Базовый — позволяет только загрузить манифесты объектов. Лейблы создаваемым Secrets с манифестами и селектор Secrets в профиле присваиваются автоматически.
- Расширенный — позволяет дополнительно:
- управлять лейблами создаваемого Secret;
- гибко настраивать селектор Secrets для добавления в профиль.
По умолчанию выбран базовый режим. При переключении между режимами загруженные манифесты не сбрасываются. Если повторно добавить в созданный профиль манифест того же объекта, он будет сохранён в новом Secret, но при применении профиля появится ошибка.
Имя Secret с манифестами при загрузке через графический интерфейс формируется автоматически. Для объектов внутри YAML-манифестов действуют стандартные требования Kubernetes.
В базовом режиме можно загрузить манифесты объектов.
Чтобы добавить манифесты:
- В блоке Манифесты объектов нажмите +.
- В открывшемся окне добавьте один или несколько YAML-манифестов. Если манифестов несколько, разделите их строкой
---. - Проверьте, что YAML валиден.
- Нажмите Добавить. Чтобы закрыть окно без сохранения, нажмите Отменить.
После добавления манифесты отображаются в таблице. По каждому объекту отображаются API-группа, Kind, Имя, Namespace и Лейблы. Нажатие на строку с манифестом открывает окно просмотра и редактирования манифеста.
Создаваемым Secrets автоматически присваиваются лейблы:
- служебный
cluster.shturval.tech/manifest- обязателен. Проверяет наличие ключа этого лейбла, его значение не используется; - дополнительный:
cluster.shturval.tech/profile: client-<имя-профиля>— если манифесты загружены на подвкладке Клиентский кластер;cluster.shturval.tech/profile: platform-<имя-профиля>— если манифесты загружены на подвкладке Кластер управления.
При создании профиля лейблы создаваемых Secrets с манифестами автоматически проставляются в:
clientManifestsSelector, если манифесты загружены на подвкладке Клиентский кластер;platformManifestsSelector, если манифесты загружены на подвкладке Кластер управления.
При просмотре профиля доступен блок Secrets со списком Secrets с манифестами для деплоя при создании клиентского кластера. После создания профиля загруженные манифесты не отображаются в блоке Манифесты объектов. Для просмотра загруженных манифестов перейдите на страницу Secret по нажатию на имя в списке.
Скриншот: базовый режим управления манифестами в профиле

Если в расширенном режиме были внесены изменения, при переключении в базовый режим они сбрасываются.
Чтобы загрузить манифесты в расширенном режиме:
- В блоке Манифесты объектов нажмите +.
- В открывшемся окне добавьте один или несколько YAML-манифестов. Если манифестов несколько, разделите их строкой
---. - Проверьте, что YAML валиден.
- Нажмите Добавить.
В блоке Лейблы Secret можно управлять лейблами создаваемого Secret с манифестами. По умолчанию отображаются:
- служебный
cluster.shturval.tech/manifest: profile— его нельзя удалить; - кастомный
cluster.shturval.tech/profile: client-<имя-профиля>илиcluster.shturval.tech/profile: platform-<имя-профиля>— его можно удалить.
Нажатие на + в блоке Лейблы Secret открывает стандартное окно управления лейблами.
В блоке Селектор Secrets в совпадающих выражениях по умолчанию отображается выражение cluster.shturval.tech/manifest Exists — его нельзя удалить.
Не используйте только служебный лейбл cluster.shturval.tech/manifest в селекторе. Такой селектор может выбрать Secrets других профилей. Добавляйте дополнительный уникальный лейбл профиля.
В совпадающих лейблах по умолчанию отображается лейбл Secret:
cluster.shturval.tech/profile: client-<имя-профиля>— на подвкладке Объекты для добавления в клиентский кластер;cluster.shturval.tech/profile: platform-<имя-профиля>— на подвкладке Объекты для добавления в кластер управления.
Этот лейбл можно удалить.
Поиск Secrets выполняется, когда добавлен хотя бы один совпадающий лейбл или одно совпадающее выражение.
Если манифесты загружены, но лейблы и селектор Secrets не указаны, Secret будет создан с манифестами, но не будет добавлен в профиль.
Чтобы управлять добавлением Secrets с манифестами в профиль через Селектор Secrets:
- В блоке Лейблы Secret добавьте необходимый лейбл Secret.
- В блоке Селектор Secrets задайте совпадающие лейблы или совпадающие выражения.
- Проверьте список Secrets, соответствующих селектору.
Все манифесты из Secrets, попавших в выборку, применятся на этапе создания клиентского кластера.
Скриншот: расширенный режим управления манифестами в профиле

Вкладка Cluster API
На вкладке Cluster API задаются параметры конфигурации Cluster API в формате YAML. По умолчанию отображаются параметры и их значения. Переопределить можно только значения существующих параметров. Добавление нового неизвестного параметра будет проигнорировано.
Скриншот: вкладка «Cluster API»

Вкладка Kubelet
На вкладке Kubelet задаются параметры конфигурации Kubelet в формате YAML. По умолчанию отображаются параметры и их значения. Переопределить можно только значения существующих параметров. Добавление нового неизвестного параметра будет проигнорировано.
Скриншот: вкладка «Kubelet»

Вкладка Kubeadm
На вкладке Kubeadm задаются параметры конфигурации Kubeadm в формате YAML. По умолчанию отображаются параметры и их значения. Переопределить можно только значения существующих параметров. Добавление нового неизвестного параметра будет проигнорировано.
Скриншот: вкладка «Kubeadm»

Для создания профиля нажмите Сохранить. После создания профиля проверьте его статус. Если профиль содержит кастомные манифесты, будут найдены Secrets по селектору и отображены результаты проверки каждого Secret.
Шаг 1. Подготовьте манифесты объектов
Подготовьте YAML-манифесты объектов, которые должны быть созданы при инициализации клиентского кластера.
Если необходимо подставить имя создаваемого клиентского кластера, используйте плейсхолдер:
{{ .ClusterName }}
Шаг 2. Создайте Secret с манифестами
В неймспейсе kube-system кластера управления создайте Secret типа Opaque. Добавьте ключи, в значениях которых укажите подготовленные манифесты.
Secret должен иметь служебный лейбл cluster.shturval.tech/manifest. Secrets без этого лейбла будут проигнорированы в профилях.
Дополнительно добавьте уникальный лейбл, по которому будут выбираться только нужные Secrets в профиле.
Пример Secret с манифестами NCI и Namespace
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: secret-for-profile
namespace: kube-system
labels:
cluster.shturval.tech/manifest: ""
cluster.shturval.tech/profile: client-cluster-profile
stringData:
nci.yaml: |
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
namespace.yaml: |
apiVersion: v1
kind: Namespace
metadata:
name: ns-by-clusterprofile
Примечание: В примере используется stringData, поэтому значения не нужно кодировать в base64. Если используется поле data, значения должны быть закодированы в base64.
Сохраните Secret в файл, например secret-for-profile.yaml, и примените в кластере управления:
kubectl apply -f secret-for-profile.yaml
Шаг 3. Подготовьте манифест ClusterProfile
В манифесте ClusterProfile:
- Укажите имя профиля и неймспейс
kube-system. - В блоке
customManifestsзадайте селектор для выбора Secret, указав, где должны деплоиться манифесты из Secret:clientManifestsSelector— в клиентском кластере;platformManifestsSelector— в неймспейсе клиентского кластера в кластере управления.
Не рекомендуется использовать в селекторе профиля только служебный лейбл Secret, потому что он может выбрать Secrets других профилей.
Если в селектор не указан служебный лейбл cluster.shturval.tech/manifest, он будет добавлен автоматически при создании или обновлении профиля.
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterProfile
metadata:
name: cluster-profile
namespace: kube-system
spec:
customManifests:
- deployPhase: postsscdeploy
clientManifestsSelector:
matchLabels:
cluster.shturval.tech/profile: client-cluster-profile
Если необходимо применить манифесты в кластере управления, используйте platformManifestsSelector:
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterProfile
metadata:
name: cluster-profile
namespace: kube-system
spec:
customManifests:
- deployPhase: postsscdeploy
platformManifestsSelector:
matchLabels:
cluster.shturval.tech/profile: client-cluster-profile
Сохраните ClusterProfile в файл cluster-profile.yaml и примените в кластере управления:
kubectl apply -f cluster-profile.yaml
После создания проверьте статус профиля:
kubectl get clusterprofile cluster-profile -n kube-system -o yaml
Если не хватает прав на платформенные манифесты
Манифесты, добавленные в GUI на подвкладке Кластер управления или через CLI в platformManifestsSelector, применяются в кластере управления shturval-cluster-manager. Если в профиле указан ресурс из разрешённой API-группы, но у ClusterRole shturval-cluster-manager-role нет прав на создание такого ресурса, проверка Secret c манифестами в созданном профиле завершится ошибкой.
Пример проверки статуса:
kubectl get clusterprofile cluster-profile -n kube-system -o yaml
Пример ошибки:
status:
extraManifestsStatus:
manifestsStatus:
- deployPhase: postsscdeploy
platformManifestsStatus:
- message: >
1 error occurred:
* key manifest-1: validate key manifests error: 1 error occurred:
* no permission to create auth.shturval.tech/User (resource="users"): access denied
secretRef:
name: for-role
namespace: kube-system
status: incorrect
Скриншот: статус в профиле


Пока статус профиля Not Ready, а Secret имеет статус incorrect, профиль недоступен для выбора при создании клиентского кластера.
Дополнительные права могут потребоваться для создания, например:
- users платформы в API-группе
auth.shturval.tech; - произвольных Pod в API-группе
core.
Что сделать
Выдайте cluster-manager минимальные права только на те ресурсы и действия, которые необходимы для применения манифестов профиля в кластере управления, одним из способов:
- создать
ClusterRoleс лейбломrbac.shturval.tech/shturval-cluster-manager-aggregated-role: "true" - создать
ClusterRoleс кастомным лейблом, который проставить в customvalues shturval-cluster-manager.
В результате права будут добавлены в агрегирующую роль shturval-cluster-manager-role.
В кластере управления создайте ClusterRole с лейблом rbac.shturval.tech/shturval-cluster-manager-aggregated-role: "true".
Пример роли для создания и чтения Pod:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-manager-pods-create-get
labels:
rbac.shturval.tech/shturval-cluster-manager-aggregated-role: "true"
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- create
- get
Примените роль в кластере управления командой или с помощью импорта манифестов.
Пример команды:
kubectl apply -f cluster-manager-pods-create-get.yaml
Этот вариант удобен, если вы хотите управлять набором ролей, которые попадают в агрегирующую роль shturval-cluster-manager-role.
- В кластере управления создайте
ClusterRoleс произвольным лейблом, например, custom/auth-user-role: “true”.
Пример роли для создания и чтения внутренних пользователей платформы:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-manager-auth-users
labels:
custom/auth-user-role: "true"
rules:
- apiGroups:
- auth.shturval.tech
resources:
- users
verbs:
- create
- get
- Создайте
ShturvalServicePatchдля применения к SSCshturval-cluster-manager, где укажите кастомный лейбл вroleAggregateLabels.
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: cluster-manager-auth-users
spec:
shturvalServiceConfigName: shturval-cluster-manager
customvalues:
roleAggregateLabels:
custom/auth-user-role: "true"
- Примените
ClusterRoleиShturvalServicePatchв кластере управления в CLI или через импорт манифестов в GUI.
kubectl apply -f cluster-manager-auth-users-role.yaml
kubectl apply -f cluster-manager-auth-users-rbac-ssp.yaml
Как проверить
После применения ClusterRole проверьте, что права созданной роли попали в агрегирующую роль:
kubectl get clusterrole shturval-cluster-manager-role -o yaml
Затем повторно проверьте статус профиля:
kubectl get clusterprofile cluster-profile -n kube-system -o yaml
Статус должен измениться на Ready, а Secret с манифестами — на valid.
Применение профиля
После создания профиля выберите его при создании клиентского кластера в режиме расширенных настроек.
Перед созданием кластера проверьте, что профиль имеет статус True. Дефолтный профиль всегда доступен для выбора и применяется по умолчанию, если поле “Профиль кластера” оставлено пустым.