Профиль конфигурации клиентского кластера (ClusterProfile)

При создании клиентских кластеров применяются настройки конфигурации, определенные по умолчанию. Начиная с релиза 2.13 в платформе “Штурвал” реализована возможность определить конфигурацию на этапе развертывания кластера. С помощью профиля кластера (ClusterProfile) вы можете задать какие манифесты объектов необходимо применить в кластере (клиентском и/или управления) при инициализации.

Кастомные профили могут быть полезны, например, для применения в различных окружениях или при массовом применении типовой конфигурации.

ClusterProfile - кастомный ресурс API-группы cluster.shturval.tech, управление которым осуществляется в кластере управления. По умолчанию предустановлен дефолтный профиль с именем default-client-cluster-profile.

В графическом интерфейсе профили конфигурации клиентских кластеров доступны для выбора на этапе создания клиентского кластера, шаг “Основные данные” и в режиме расширенных настроек.

Скриншот выбора профиля

profilecluster1

В будущих релизах планируется расширить перечень предустановленных профилей, например, специализированных для реализации ML-задач.

Создать профиль кластера

Чтобы добавить требуемую конфигурацию для применения на этапе создания кластера:

  1. Подготовьте манифесты объектов, которые должны быть созданы. Например, вы можете определить для создаваемого клиентского кластера:
  • настройки устанавливаемых сервисов с помощью 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
  1. В неймспейсе 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 без дефолтного лейбла будут проигнорированы.

При необходимости добавьте еще лейблы для гибкого управления секретами в разных профилях.

Скриншот

secretforprofile

secretforprofilelabels

  1. Подготовьте манифест ClusterProfile, где:
    • укажите имя профиля и неймспейс kube-system;
    • в блоке CustomManifests задайте совпадающие лейблы Secrets;
      • Если указан хотя бы один лейбл в селекторе лейблов (matchLabels), возможно не добавлять в matchExpression дефолтный лейбл. Он будет присвоен автоматически.
      • Если используется только дефолтный лейбл cluster.shturval.tech/manifest, его необходимо добавить в селектор лейблов.
    • пропишите в каком кластере (клиентском, управления) манифесты из 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: 
  1. Загрузите ClusterProfile в кластер управления, например, в графическом интерфейсе с помощью импорта манифестов.
Скриншот

addprofile

Обратите внимание!

  • Переопределять конфигурацию дефолтного 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"

Особенности работы профилей

  1. Результаты валидации манифестов объектов, включенных в Secret, выводятся в статус ClusterProfile.
  2. Обновления конфигурации ClusterProfile, указанных в нем Secrets, манифестов объектов в Secrets не приведут к изменению конфигурации ранее созданных клиентских кластеров с этим профилем.
  3. Любые изменения (обновление, создание новых) Secrets, соответствующих селектору в профиле кластера, приведут к автоматическому обновлению в профиле.
  4. В кластер управления могут быть созданы ресурсы из API-групп auth.shturval.tech и custer.x-k8s.io для применения в клиентском кластере.
  5. Фазу применения манифестов нельзя переопределить (deployPhase: postsscdeploy), она устанавливается по умолчанию. Манифесты применяются после установки сервисов в кластере.
  6. Манифесты ресурсов, которыми управляет кластер управления, создаются только в неймспейсе клиентского кластера, заданный неймспейс в манифесте игнорируется.
×