Stronghold Enterprise Edition (EE) можно обновить до Stronghold Certified Security Edition (CSE) одним из следующих способов:
- в исполнении Standalone;
- в исполнении DKP.
Поддерживается обновление с Stronghold EE 1.15.x до Stronghold CSE 1.16.0. Если используется версия Stronghold EE ниже 1.15.x, сначала обновитесь до последней версии ветки.
При обновлении до Stronghold CSE возможна временная недоступность сервиса.
Обновление в исполнении DKP
Для перехода на Stronghold CSE требуется DKP CSE версии 1.73 и выше.
Перед началом обновления выполните следующие действия:
Проверьте текущую версию Stronghold:
stronghold versionСохраните unseal-ключи и root-токен в защищённое хранилище. Пример:
d8 k -n d8-stronghold get secret stronghold-keys -o yaml > stronghold-keys.yaml chmod 600 stronghold-keys.yamlСоздайте резервную копию или снимок (snapshot) кластера Stronghold. Пример:
export STRONGHOLD_ADDR=https://$(d8 k -n d8-stronghold get ing stronghold -o json | jq -r '.spec.rules[0].host') d8 stronghold login -method=oidc -path=oidc_deckhouse # Либо через root-токен: ## d8 stronghold login -method=token d8 stronghold operator raft snapshot save stronghold-$(date +%F_%H-%M).snapПроверить снимок можно с помощью команды:
ls -lh ./stronghold-*.snapПолученные файлы храните за пределами кластера DKP.
Подготовьте пакет или бинарный файл Stronghold CSE 1.16.0 на каждом узле.
Убедитесь, что ModuleConfig
strongholdсуществует:d8 k get mc stronghold -o yamlЕсли ModuleConfig отсутствует, создайте его:
cat | d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: stronghold spec: enabled: false EOF
Отключение автообновления модуля
Для отключения автообновления модуля выполните следующие действия:
Определите текущий канал обновлений модуля
stronghold:d8 k get module stronghold -o jsonpath='{.properties.releaseChannel}'Если команда не выводит значение, используйте канал
stableв следующем шаге.Создайте ресурс ModuleUpdatePolicy c ручным режимом обновления, указав в поле
releaseChannelтекущий канал обновлений, и примените его:cat <<EOF > stronghold-mup.yaml apiVersion: deckhouse.io/v1alpha2 kind: ModuleUpdatePolicy metadata: name: stronghold-update-policy spec: releaseChannel: <STRONGHOLD_RELEASE_CHANNEL> update: mode: Manual EOF d8 k apply -f stronghold-mup.yaml d8 k get mup stronghold-update-policyОжидаемый вывод:
NAME RELEASE CHANNEL UPDATE MODE stronghold-update-policy Stable ManualУкажите созданный ресурс ModuleUpdatePolicy в ModuleConfig
stronghold:d8 k patch moduleconfig stronghold --type merge --patch '{"spec":{"updatePolicy":"stronghold-update-policy"}}'Проверьте, что значение сохранилось:
d8 k get mc stronghold -o jsonpath='{.spec.updatePolicy}'Ожидаемый вывод:
stronghold-update-policyУбедитесь, что изменения применились в модуле
stronghold:d8 k get module stronghold -o jsonpath='{.properties.updatePolicy}'Ожидаемый вывод:
stronghold-update-policyЕсли используется DKP CSE 1.67 и ниже, либо если модуль ещё ни разу не запускался, вывод команды будет пустым. Дополнительные действия в таком случае не требуются.
Проверки перед началом обновления
Проверьте версию DKP. Для перехода на Stronghold CSE требуется DKP CSE версии 1.73 и выше. Проверить версию DKP можно с помощью команды:
d8 k -n d8-system get configmap d8-deckhouse-version-info -o yamlТакже проверить версию DKP можно в веб-интерфейсе Deckhouse на главной странице панели управления кластером (
https://console.<CLUSTER_DOMAIN>).Если понадобится обновить или переключить редакцию DKP, воспользуйтесь инструкциями:
Убедитесь, что DKP работает штатно, leader-узел определён, очередь пуста:
d8 k -n d8-system get deploy deckhouse d8 k -n d8-system get pod -l leader=true d8 system queue listОжидаемый вывод:
Deployment
deckhouseнаходится в состоянииReady:NAME READY UP-TO-DATE AVAILABLE AGE deckhouse 3/3 3 3 1dЕсть рабочий под в статусе
Running:NAME READY STATUS RESTARTS AGE deckhouse-596d944f95-d82m8 2/2 Running 0 1dОчередь задач пуста:
Summary: - 'main' queue: empty. - 121 other queues (0 active, 121 empty): 0 tasks. - no tasks to handle.
Убедитесь, что модуль
strongholdвключён и находится в рабочем состоянии:d8 k get module stronghold d8 k get moduleconfig stronghold -o yamlПроверьте, что:
- для
strongholdзначенияEnabledиReadyравныTrue; - объект ModuleConfig
strongholdсуществует; - в
spec.settings.licenseуказан лицензионный ключ.
- для
Убедитесь, что используется Stronghold EE версии 1.15.x. Это можно сделать одним из следующих способов:
Через веб-интерфейс Deckhouse — откройте главную страницу панели управления кластером (
https://console.<CLUSTER_DOMAIN>) и проверьте, что в нижней части страницы указана версия 1.15.x с суффиксомee.По манифесту или образу пода. Для этого выполните команду:
d8 k -n d8-stronghold get pod -o yaml | grep versionВ лейблах подов должна быть указана версия 1.15.x с суффиксом
ee.По логам. Для этого выполните команду:
d8 k -n d8-stronghold logs stronghold-0 | head -20В стартовых строках баннера должна быть указана версия с редакцией:
Version: Stronghold v1.15.0+ee
Подготовка модуля к установке
Подготовьте Stronghold CSE в вашем хранилище образов (выполняется на машине с доступом к загрузке образов в хранилище). Проверьте контрольную сумму архива и загрузите бандл модуля Stronghold CSE:
# Проверьте контрольную сумму архива: gost12sum module-stronghold.tar # Переместите архив в директорию modules: mkdir modules mv module-stronghold.tar modules/. # Адрес хоста хранилища образов. Например, 10.129.0.18:5000 или my-registry.com export REGISTRY_HOST="<REGISTRY_HOST:PORT>" # Адрес хранилища образов DKP. Например, 10.129.0.18:5000/dkp-cse/stable export MODULES_MODULE_REPO="${REGISTRY_HOST}/<PATH_TO_DKP_REPO>" # Используйте учётную запись с правами на запись в хранилище образов. d8 mirror push modules $MODULES_MODULE_REPO -u <USERNAME> -p <PASSWORD>Создайте ModuleSource для Stronghold CSE. Убедитесь средствами вашей инфраструктуры, что хранилище образов доступно с каждого master-узла. Подготовьте и примените ModuleSource:
# Путь к модулям в хранилище образов. MODULES_MODULE_SOURCE="$MODULES_MODULE_REPO/modules" # Имя пользователя, имеющего доступ на чтение образов. REGISTRY_USER="<REGISTRY_USER>" # Пароль пользователя. REGISTRY_PASSWORD="<REGISTRY_PASSWORD>" # Сертификат УЦ домена, используемого для хранилища образов. REGISTRY_CA_CERT="<CA_CERT_FOR_REGISTRY>" AUTH_STRING=$(echo -n "${REGISTRY_USER}:${REGISTRY_PASSWORD}" | base64) DOCKER_CFG=$(echo -n '{"auths":{"'${REGISTRY_HOST}'":{"username":"'${REGISTRY_USER}'","password":"'${REGISTRY_PASSWORD}'","auth":"'${AUTH_STRING}'"}}}' | base64 -w0) cat <<EOF > stronghold-cse-ms.yaml apiVersion: deckhouse.io/v1alpha1 kind: ModuleSource metadata: name: stronghold-cse spec: registry: ca: "$REGISTRY_CA_CERT" dockerCfg: $DOCKER_CFG repo: $MODULES_MODULE_SOURCE scheme: HTTPS EOF # Проверьте конфигурацию. cat stronghold-cse-ms.yaml # Примените ресурс. d8 k apply -f stronghold-cse-ms.yamlПроверьте статус ModuleSource:
d8 k get modulesource stronghold-cse -o yamlПроверьте, что в статусе отсутствуют ошибки, а поле
status.messageпустое:... status: message: "" ...
Переключение модуля Stronghold с редакции EE на CSE
Обновите ModuleConfig stronghold для использования нового ModuleSource:
Проверьте наличие ModuleConfig
stronghold:d8 k get mc stronghold -o yamlДобавьте в ModuleConfig поле
spec.sourceсо значениемstronghold-cse:d8 k patch moduleconfig stronghold --type merge --patch '{"spec":{"source":"stronghold-cse"}}' d8 k get moduleconfig stronghold -o yamlПроверьте, что изменения применились:
- в ModuleConfig
strongholdприсутствует значениеspec.source: stronghold-cse; - остальные поля в
spec.settingsне изменились.
- в ModuleConfig
Если после переключения источника модуль сообщает о проблеме с лицензией, обновите только поле лицензии (
CSE_LICENSE):d8 k patch moduleconfig stronghold --type merge --patch '{"spec":{"settings":{"license":"<CSE_LICENSE>"},"version":1}}'Если модуль ранее был выключен, включите его:
d8 system module enable strongholdДождитесь стабилизации DKP и пустой очереди:
d8 k -n d8-system get pods -l app=deckhouse d8 system queue listПроверьте, что:
- под
deckhouseнаходится в состоянииRunning/Ready; - очередь пуста.
- под
Переключите ModuleUpdatePolicy в режим AutoPatch:
Измените режим обновления:
d8 k patch mup stronghold-update-policy --type merge --patch '{"spec":{"update":{"mode":"AutoPatch"}}}'Проверьте, что режим обновления изменился:
d8 k get mup stronghold-update-policyОжидаемый вывод:
NAME RELEASE CHANNEL UPDATE MODE stronghold-update-policy Stable AutoPatch
Проверьте завершение перехода на редакцию CSE:
Проверьте состояние модуля:
d8 k get modules strongholdОжидаемый вывод:
NAME STAGE SOURCE PHASE ENABLED READY stronghold General Availability stronghold-cse Ready True TrueПроверьте источник модуля:
d8 k get modulesource stronghold-cse -o yaml d8 k get moduleconfig stronghold -o yaml d8 k get module stronghold -o yamlПроверьте, что:
- отсутствуют ошибки
auth,tls,x509,timeout; - отсутствуют предупреждающие события;
- в ModuleConfig
strongholdуказаноspec.source: stronghold-cse; - в Module
strongholdуказаноproperties.source: stronghold-cse.
- отсутствуют ошибки
Проверьте поды
stronghold:d8 k -n d8-stronghold get poПроверьте, что:
- отсутствуют состояния
ImagePullBackOff,ErrImagePull,CrashLoopBackOff; - поды
stronghold-*находятся в состоянииRunningи имеют готовность2/2.
- отсутствуют состояния
Альтернативный способ через установку нового кластера требуемой версии
Если не удалось пройти проверки перед началом обновления, то есть привести текущий кластер DKP и модуль stronghold к требуемым версиям DKP CSE 1.73 и выше и Stronghold EE 1.15.x, можно перенести кластер Stronghold на новый кластер DKP CSE 1.73 путём восстановления резервной копии.
Для этого выполните следующие действия:
Выполните резервное копирование данных кластера.
Разверните кластер DKP CSE 1.73.
Начиная с раздела Отключение автообновления модуля, последовательно выполните все шаги на новом кластере.
Восстановите резервную копию, unseal-ключи и root-токен. Команды выполняются на хосте, где находятся файлы резервной копии
stronghold-*.snapи ключиstronghold-keys.yaml. Пример восстановления резервной копии кластера Stronghold:Восстановите снимок (snapshot):
export STRONGHOLD_ADDR=https://$(d8 k -n d8-stronghold get ing stronghold -o json | jq -r '.spec.rules[0].host') d8 stronghold login -method=oidc -path=oidc_deckhouse # Либо через root-токен: ## d8 stronghold login -method=token d8 stronghold operator raft snapshot restore -force stronghold-<SNAPSHOT_DATE>.snapВосстановите unseal-ключи и root-токен:
d8 k -n d8-stronghold delete secret stronghold-keys d8 k -n d8-stronghold create -f stronghold-keys.yamlПроверьте поды
stronghold:d8 k -n d8-stronghold get poПроверьте, что:
- отсутствуют состояния
ImagePullBackOff,ErrImagePull,CrashLoopBackOff; - поды
stronghold-*находятся в состоянииRunningи имеют готовность2/2.
- отсутствуют состояния