Как обновить лицензию
Загрузка новой лицензии в платформу.
На этой странице
Общие шаги
- Получите лицензию от поставщика (CE — через Telegram-бот или форму; Enterprise — по договору).
- Обновите лицензию в платформе в зависимости от типа контура.
- Убедитесь, что лицензия применена (проверьте статус на странице «О системе»).
В закрытом контуре, пока лицензия действует, достаточно обновить ShturvalServicePatch (SSP) для shturval-backend.
shturval-backend должен работать в режиме управления Авто (auto): при изменении конфигурации обновления сервиса применяются автоматически. В ручном (manual) режиме обновление лицензии не выполнится.
В открытом контуре и/или если срок действия лицензии истек, выполните шаги инструкции, описанные на вкладке Открытый контур/истёкшая лицензия. Если лицензия истекла, графический интерфейс может стать недоступным после применения SSP, поэтому остальные изменения выполните в консоли.
Пока срок действия лицензии не истек, для её обновления достаточно инструкции на этой вкладке. Если лицензия уже истекла, перейдите к инструкции на вкладке Открытый контур/истёкшая лицензия.
- Подключитесь к кластеру управления.
- Перейдите в Сервисы и репозитории → Установленные сервисы.
- Найдите Модуль программного управления Платформой (shturval-backend).
- Откройте Управлять → вкладка Сервис или Примененные ShturvalServicePatch.
- Создайте ShturvalServicePatch (SSP) для shturval-backend, указав новый номер лицензии в
customvalues. Либо используйте Импорт манифестов для загрузки SSP с лицензией.
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-backend-license
spec:
shturvalServiceConfigName: shturval-backend
customvalues:
license_token: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
license_token | Новый лицензионный токен JSON Web Token (JWT), полученный от команды платформы «Штурвал» | string | eyJhbm5lciI |
- Дождитесь статуса сервиса Patched.
- Перезапустите поды shturval-backend. С дашборда неймспейса shturval-backend перейдите на страницу нагрузки с именем shturval-backend, откройте вкладку Pods. Удалите поды с именем shturval-backend.
- Дождитесь перезапуска подов.
- Проверьте лицензию на странице «О системе» (стартовая страница веб-интерфейса). Если узел передаёт лицензию в реестр, проверьте, что на нём применилась новая авторизация: на странице узла во вкладке Конфигурация узла нет статуса Не применено, а строка
Authorizationв/etc/containerd/certs.d/<имя-реестра>/hosts.tomlсовпадает с полемlicenseв NCI. В выводе есть токен. В кластере уNodeConfigэтого узла в колонкеREADYдолжно бытьTrue:
kubectl get nodeconfig <имя-узла>
Если срок действия лицензии истек и/или платформа в открытом контуре:
- Примените SSP к shturval-backend.
- Снимите запрет на изменение лицензии в
ClusterConfig. - Замените лицензию в
ClusterConfig. - Верните проверку
ClusterConfig. - Замените лицензию в
ClusterProfile. - Для кластеров с провайдером Shturval v2 замените лицензию в
ShturvalProvider. - Замените лицензионный токен в NodeConfigItem.
- Замените лицензионный токен в
/etc/std/nci.jsonна узлах и аннотациюNodeConfig.
Если в закрытом контуре лицензия истекла, выполните шаги 1–5: SSP, ClusterConfig и ClusterProfile. В NCI и файле на узле не будет лицензии.
Если лицензия истекла, графический интерфейс после применения SSP и перезапуска подов может быть недоступен — используйте CLI.
Шаг 1. Применить SSP shturval-backend
- Подключитесь к кластеру управления в консоли.
- Сохраните манифест и примените SSP:
kubectl apply -f shturval-backend-license.yaml
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-backend-license
spec:
shturvalServiceConfigName: shturval-backend
customvalues:
license_token: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
license_token | Новый лицензионный токен JSON Web Token (JWT), полученный от команды платформы «Штурвал» | string | eyJhbm5lciI |
- Проверьте, что объект создан:
kubectl get shturvalservicepatch shturval-backend-license. - Перезапустите поды shturval-backend в неймспейсе
shturval-backendи дождитесь, пока они станут готовы:
kubectl -n shturval-backend rollout restart deployment shturval-backend
kubectl -n shturval-backend rollout status deployment shturval-backend
Шаг 2. Снять запрет на смену лицензии в ClusterConfig
Изменение лицензии в ClusterConfig в кластере управления запрещают два webhook этого ресурса. Чтобы снять запрет, выполните:
- Сохраните YAML объектов, которые будете менять: webhook
ClusterConfig, deploymentshturval-cluster-manager-cluster-manager,ClusterConfig,ClusterProfile,ShturvalProvider(если кластер с провайдером Shturval v2), NodeConfigItem и NodeConfig (для закрытого контура).
kubectl get mutatingwebhookconfiguration,validatingwebhookconfiguration -o yaml > backup-webhooks.yaml
kubectl -n shturval-cluster-manager get deployment shturval-cluster-manager-cluster-manager -o yaml > backup-cluster-manager.yaml
kubectl get clusterconfig -A -o yaml > backup-clusterconfig.yaml
kubectl get clusterprofile -n kube-system -o yaml > backup-clusterprofile.yaml
kubectl get shturvalprovider -o yaml > backup-provider.yaml
kubectl get nodeconfigitem -o yaml > backup-nci.yaml
kubectl get nodeconfig -o yaml > backup-nodeconfig.yaml
Пропустите ShturvalProvider, если в платформе нет провайдера Shturval v2. NodeConfigItem и NodeConfig клиентского кластера получите теми же командами get с kubeconfig этого кластера.
- Снимите запрет и остановите cluster-manager. Запомните, что у обоих webhook было
failurePolicy: Fail, и прежнее количество реплик. Webhook профиля в том же объекте не меняйте.
- Откройте Администрирование → Кастомные ресурсы → API-группа admissionregistration.k8s.io → MutatingWebhookConfiguration.
- Откройте
shturval-cluster-manager-mutating-webhook-configuration. - В манифесте найдите
name: defaulting-webhook-clusterconfig-v1beta1.cluster.shturval.tech. СтрокаfailurePolicyэтого webhook стоит над именем. ЗаменитеFailнаIgnore. - Нажмите Проверить, затем Сохранить.
- Вернитесь на страницу Кастомные ресурсы и найдите ValidatingWebhookConfiguration → перейдите к
shturval-cluster-manager-validating-webhook-configuration. У webhookvclusterconfig-v1beta1.kb.ioзаменитеfailurePolicyнаIgnore. - Нажмите Проверить, затем Сохранить.
- Откройте Неймспейсы →
shturval-cluster-manager→ Нагрузки → Deployments →shturval-cluster-manager-cluster-manager. - На вкладке Deployment запомните количество реплик, укажите 0 и сохраните.
- На вкладке Pods дождитесь, пока поды удалятся.
- Найдите webhook. Имя объекта — строка без отступа. Под ней перечислены его webhook. Если нужное имя стоит первым под объектом, в команде индекс
0. Если вторым —1. Соседнюю строку с профилем не меняйте.
kubectl get mutatingwebhookconfiguration -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .webhooks[*]}{" "}{.name}{"\t"}{.failurePolicy}{"\n"}{end}{end}'
kubectl get validatingwebhookconfiguration -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .webhooks[*]}{" "}{.name}{"\t"}{.failurePolicy}{"\n"}{end}{end}'
В первой команде найдите defaulting-webhook-clusterconfig-v1beta1.cluster.shturval.tech. Во второй — vclusterconfig-v1beta1.kb.io.
- Задайте
failurePolicy: Ignoreтолько этим двум webhook. Подставьте имя объекта и индекс:
kubectl patch mutatingwebhookconfiguration <имя> --type json -p '[{"op":"test","path":"/webhooks/<индекс>/name","value":"defaulting-webhook-clusterconfig-v1beta1.cluster.shturval.tech"},{"op":"replace","path":"/webhooks/<индекс>/failurePolicy","value":"Ignore"}]'
kubectl patch validatingwebhookconfiguration <имя> --type json -p '[{"op":"test","path":"/webhooks/<индекс>/name","value":"vclusterconfig-v1beta1.kb.io"},{"op":"replace","path":"/webhooks/<индекс>/failurePolicy","value":"Ignore"}]'
- Запомните текущее количество реплик и остановите deployment:
kubectl -n shturval-cluster-manager get deployment shturval-cluster-manager-cluster-manager -o jsonpath='{.spec.replicas}{"\n"}'
kubectl -n shturval-cluster-manager scale deployment/shturval-cluster-manager-cluster-manager --replicas=0
- Дождитесь, пока поды этого deployment удалятся:
kubectl -n shturval-cluster-manager get pods
Шаг 3. Обновить лицензию в ClusterConfig
ClusterConfigs всех кластеров доступны в кластере управления. Имя объекта и его неймспейс совпадают с именем кластера. Лицензия — поле spec.license. Подробнее в Кастомные ресурсы платформы.
Замените spec.license в ClusterConfig кластера управления и каждого клиентского кластера. Если лицензия истекла, графический интерфейс недоступен — используйте CLI.
- Подключитесь к кластеру управления.
- Откройте Администрирование → Кастомные ресурсы → API-группа cluster.shturval.tech → ClusterConfig.
- В манифесте каждого
ClusterConfigзаменитеspec.licenseна новый токен.
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterConfig
metadata:
name: clustername
namespace: clustername
spec:
license: <новый токен>
- Подключитесь к кластеру управления.
- Откройте список:
kubectl get clusterconfig -A. - Подставьте имя кластера вместо
clusternameи повторите команду для каждого кластера:
kubectl patch clusterconfig clustername -n clustername --type merge -p '{"spec":{"license":"<новый токен>"}}'
Шаг 4. Вернуть проверку ClusterConfig
Верните deployment и webhook в прежнее состояние.
- Откройте Неймспейсы →
shturval-cluster-manager→ Нагрузки → Deployments →shturval-cluster-manager-cluster-manager. - На вкладке Deployment верните прежнее количество реплик и сохраните. Дождитесь, пока поды станут Ready.
- Откройте Администрирование → Кастомные ресурсы → API-группа admissionregistration.k8s.io → MutatingWebhookConfiguration.
- Найдите и перейдите к
shturval-cluster-manager-mutating-webhook-configuration. - В манифесте найдите
name: defaulting-webhook-clusterconfig-v1beta1.cluster.shturval.tech. СтрокаfailurePolicyэтого webhook стоит над именем. ЗаменитеIgnoreнаFail. - Нажмите Проверить, затем Сохранить.
- Откройте ValidatingWebhookConfiguration →
shturval-cluster-manager-validating-webhook-configuration. У webhookvclusterconfig-v1beta1.kb.ioзаменитеfailurePolicyнаFail. - Нажмите Проверить, затем Сохранить.
- Проставьте прежнее количество реплик и дождитесь готовности:
kubectl -n shturval-cluster-manager scale deployment/shturval-cluster-manager-cluster-manager --replicas=<прежнее число>
kubectl -n shturval-cluster-manager rollout status deployment/shturval-cluster-manager-cluster-manager --timeout=180s
- Верните
failurePolicy: Failу webhookdefaulting-webhook-clusterconfig-v1beta1.cluster.shturval.techв объектеshturval-cluster-manager-mutating-webhook-configurationи у webhookvclusterconfig-v1beta1.kb.ioв объектеshturval-cluster-manager-validating-webhook-configuration. Подставьте имя объекта и индекс:
kubectl patch mutatingwebhookconfiguration <имя> --type json -p '[{"op":"test","path":"/webhooks/<индекс>/name","value":"defaulting-webhook-clusterconfig-v1beta1.cluster.shturval.tech"},{"op":"replace","path":"/webhooks/<индекс>/failurePolicy","value":"Fail"}]'
kubectl patch validatingwebhookconfiguration <имя> --type json -p '[{"op":"test","path":"/webhooks/<индекс>/name","value":"vclusterconfig-v1beta1.kb.io"},{"op":"replace","path":"/webhooks/<индекс>/failurePolicy","value":"Fail"}]'
Шаг 5. Обновить лицензию в ClusterProfile
Профили кластера (ClusterProfile) доступны в неймспейсе kube-system кластера управления. Лицензия — поле spec.license. Изменение spec.license в ClusterConfig не обновляет профили автоматически. См. Что такое профили кластеров (ClusterProfile).
Изменение профиля не применяет изменения в созданных клиентских кластерах.
В графическом интерфейсе изменение default-client-cluster-profile заблокировано. Этот профиль обновите в CLI. Остальные поля профиля не меняйте.
- Откройте Платформа → Профили кластеров → Профили конфигурации клиентских кластеров → на странице профиля вкладка Манифест.
- В каждом кастомном профиле, где
spec.licenseзаполнен, замените токен.
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterProfile
metadata:
name: <имя-профиля>
namespace: kube-system
spec:
license: <новый токен>
- Откройте список профилей:
kubectl get clusterprofile -n kube-system. - Подставьте имя профиля вместо
<имя-профиля>и повторите команду для каждого профиля, гдеspec.licenseзаполнен, включаяdefault-client-cluster-profile:
kubectl patch clusterprofile <имя-профиля> -n kube-system --type merge -p '{"spec":{"license":"<новый токен>"}}'
Шаг 6. Обновить лицензию в ShturvalProvider
Шаг только для провайдера Shturval v2. Новый хост скачивает пакет shturvald с реестра r.shturval.tech: логин user, пароль — spec.licenseToken. В файл /etc/std/nci.json на узле этот пароль не записывается. См. Создание ShturvalProvider.
Замените лицензию во всех ShturvalProvider в кластере управления.
- Подключитесь к кластеру управления.
- Откройте Администрирование → Кастомные ресурсы → API-группа infrastructure.cluster.x-k8s.io → ShturvalProvider.
- В каждом объекте, где
spec.licenseTokenотличается от нового токена, замените только это поле.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: ShturvalProvider
metadata:
name: <имя-провайдера>
spec:
licenseToken: <новый токен>
- Подключитесь к кластеру управления.
- Откройте список:
kubectl get shturvalprovider. - Подставьте имя провайдера и повторите команду для каждого объекта, где токен отличается:
kubectl patch shturvalprovider <имя-провайдера> --type merge -p '{"spec":{"licenseToken":"<новый токен>"}}'
Шаг 7. Обновить токен в NodeConfigItem
В открытом контуре лицензия лежит в NodeConfigItem (NCI) generic-init-config, в разделе Container Runtime: реестр r.shturval.tech, поле Авторизация для репозитория (spec.runtimecfg.registries[].license).
В поле запишите Basic и через пробел результат команды. Кодируется строка user:<лицензия> целиком: логин реестра user, пароль — лицензия.
echo -n 'user:<лицензия>' | base64 -w 0
Изменения потребуется внести в NCI в кластере управления и в каждом клиентском кластере платформы. Kubeconfig клиентского кластера хранится в кластере управления Secret <имя-кластера>-kubeconfig неймспейса <имя-кластера>. См. Доступ к дочерним кластерам.
- Откройте кластер → Администрирование → Конфигурация узлов.
- Откройте NCI
generic-init-config. - В разделе Container Runtime у реестра
r.shturval.techв поле Авторизация для репозитория замените лицензию. Нажмите Сохранить.
- Откройте NCI
generic-init-config.
kubectl get nodeconfigitem generic-init-config -o yaml
- В
spec.runtimecfg.registriesу реестраr.shturval.techзаменитеlicenseна новое значениеBasicи примените объект.
Шаг 8. Обновить файл на уже работающих узлах
В открытом контуре проверьте авторизацию узла в реестр и обновите лицензию в /etc/std/nci.json, если она отличается от новой. Выполните обновление для каждого узла во всех кластерах. Подключитесь к узлу кластера и проверьте авторизацию узла в реестр:
sudo grep -c Authorization /etc/containerd/certs.d/<имя-реестра>/hosts.toml
В открытом контуре <имя-реестра> - r.shturval.tech.
Если команда вывела 0, узел не передаёт лицензию в реестр, внесение изменений в файл /etc/std/nci.json не требуются. shturvald берёт его из NCI и записывает в hosts.toml. Число больше нуля значит, что токен записан в файл. Тогда замените его в /etc/std/nci.json, как приведено далее:
- Перед заменой скопируйте
/etc/std/nci.json. - Откройте
/etc/std/nci.json. Найдите старый токен и замените его на новый. Он записан в строкеpassword, в адресеhttps://user:<токен>@и в значении"license": "Basic ...". - Запишите файл и выставьте права
0600. - На узле посчитайте sha256 файла и запишите сумму. Аннотация
node.shturval.tech/initchecksumстоит наNodeConfigс именем узла. ИмяNodeConfigсовпадает с именем узла. В команду подставьте саму сумму из выводаsha256sum, символы до пробела.
shturvald на каждом цикле считает sha256 файла /etc/std/nci.json и сверяет его с этой аннотацией. После правки файла сумма меняется, поэтому и необходимо записать новую сумму, иначе применение конфигурации останавливается (ConfigApplied=False, причина ChecksumMismatch). Подробнее — в разделе Цикл применения конфигурации сервиса shturval-node-config.
Выполните на узле:
sudo sha256sum /etc/std/nci.json
Выполните в кластере:
kubectl annotate nodeconfig <имя-узла> node.shturval.tech/initchecksum=<сумма> --overwrite
Проверьте лицензию на странице «О системе» (стартовая страница веб-интерфейса). Если узел передаёт лицензию в реестр, проверьте, что на нём применилась новая авторизация: на странице узла во вкладке Конфигурация узла нет статуса Не применено, а строка Authorization в /etc/containerd/certs.d/<имя-реестра>/hosts.toml совпадает с полем license в NCI. В выводе есть токен. В кластере у NodeConfig этого узла в колонке READY должно быть True:
kubectl get nodeconfig <имя-узла>
Дополнительно проверьте, что у обоих webhook ClusterConfig снова failurePolicy: Fail, а количество реплик deployment shturval-cluster-manager-cluster-manager прежнее.
Рекомендации
- Обновляйте лицензию до истечения срока действия.
- Сохраняйте копию лицензии в безопасном месте.
- До истечения срока действия лицензии на платформе отображаются уведомления. Если срок действия лицензии истек, получите новую лицензию и выполните шаги 1–5 в консоли, как на вкладке Открытый контур или истёкшая лицензия.
- Для кластера с провайдером Shturval v2 в открытом контуре и при истёкшей лицензии выполните также шаг 6. Новый хост скачивает
shturvaldс токеном изShturvalProvider. - В закрытом контуре шаги 7 и 8 не требуются, даже если срок действия лицензии закончился: обновите SSP,
ClusterConfigиClusterProfile. В открытом контуре шаги 7 и 8 выполните, только если вhosts.tomlреестра на узле естьAuthorization. Если её нет, авторизацию не заполняйте. Токен в/etc/std/nci.jsonменяйте, только если он уже записан в этом файле.