Переключение DKP с EE на CSE
Инструкция подразумевает использование публичного адреса container registry: registry-cse.deckhouse.ru.
В DKP CSE не поддерживается работа облачных кластеров и некоторых модулей. Подробнее о поддерживаемых модулях можно узнать на странице сравнения редакций.
Миграция на DKP CSE возможна только с версии DKP EE 1.58, 1.64 или 1.67.
Актуальные версии DKP CSE: 1.58.2 для релиза 1.58, 1.64.1 для релиза 1.64 и 1.67.0 для релиза 1.67. Эти версии потребуется использовать далее для указания переменной DECKHOUSE_VERSION.
Переход поддерживается только между одинаковыми минорными версиями, например, с DKP EE 1.64 на DKP CSE 1.64. Переход с версии EE 1.58 на CSE 1.67 потребует промежуточной миграции: сначала на EE 1.64, затем на EE 1.67, и только после этого — на CSE 1.67. Попытки обновить версию на несколько релизов сразу могут привести к неработоспособности кластера.
Deckhouse CSE 1.58 и 1.64 поддерживает Kubernetes версии 1.27, DKP CSE 1.67 поддерживает Kubernetes версий 1.27 и 1.29.
При переключении на DKP CSE возможна временная недоступность компонентов кластера.
Для переключения кластера Deckhouse Enterprise Edition на Certified Security Edition выполните следующие действия (все команды выполняются на master-узле кластера от имени пользователя с настроенным контекстом kubectl или от имени суперпользователя):
-
Настройте кластер на использование необходимой версии Kubernetes (см. примечание выше про доступные версии Kubernetes). Для этого выполните команду:
d8 system edit cluster-configuration -
Измените параметр
kubernetesVersionна необходимое значение, например,"1.27"(в кавычках) для Kubernetes 1.27. -
Сохраните изменения. Узлы кластера начнут последовательно обновляться.
-
Дождитесь окончания обновления. Отслеживать ход обновления можно с помощью команды
d8 k get no. Обновление можно считать завершенным, когда в выводе команды у каждого узла кластера в колонкеVERSIONпоявится обновленная версия. -
Подготовьте переменные с токеном лицензии и создайте NodeGroupConfiguration для переходной авторизации в
registry-cse.deckhouse.ru:LICENSE_TOKEN=<PUT_YOUR_LICENSE_TOKEN_HERE> AUTH_STRING="$(echo -n license-token:${LICENSE_TOKEN} | base64 )" d8 k apply -f - <<EOF --- apiVersion: deckhouse.io/v1alpha1 kind: NodeGroupConfiguration metadata: name: containerd-cse-config.sh spec: nodeGroups: - '*' bundles: - '*' weight: 30 content: | _on_containerd_config_changed() { bb-flag-set containerd-need-restart } bb-event-on 'containerd-config-file-changed' '_on_containerd_config_changed' mkdir -p /etc/containerd/conf.d bb-sync-file /etc/containerd/conf.d/cse-registry.toml - containerd-config-file-changed << "EOF_TOML" [plugins] [plugins."io.containerd.grpc.v1.cri"] [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry-cse.deckhouse.ru"] endpoint = ["https://registry-cse.deckhouse.ru"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."registry-cse.deckhouse.ru".auth] auth = "$AUTH_STRING" EOF_TOML EOFДождитесь завершения синхронизации и появления файла
/etc/containerd/conf.d/cse-registry.tomlна узлах.Статус синхронизации можно отследить по значению
UPTODATE(отображаемое число узлов в этом статусе должно совпадать с общим числом узлов (NODES) в группе):d8 k get ng -o custom-columns=NAME:.metadata.name,NODES:.status.nodes,READY:.status.ready,UPTODATE:.status.upToDate -wПример вывода:
NAME NODES READY UPTODATE master 1 1 1 worker 2 2 2В журнале systemd-сервиса bashible должно появиться сообщение
Configuration is in sync, nothing to doв результате выполнения следующей команды:journalctl -u bashible -n 5Пример вывода:
Aug 21 11:04:28 master-ee-to-cse-0 bashible.sh[53407]: Configuration is in sync, nothing to do. Aug 21 11:04:28 master-ee-to-cse-0 bashible.sh[53407]: Annotate node master-ee-to-cse-0 with annotation node.deckhouse.io/configuration-checksum=9cbe6db6c91574b8b732108a654c99423733b20f04848d0b4e1e2dadb231206a Aug 21 11:04:29 master-ee-to-cse-0 bashible.sh[53407]: Successful annotate node master-ee-to-cse-0 with annotation node.deckhouse.io/configuration-checksum=9cbe6db6c91574b8b732108a654c99423733b20f04848d0b4e1e2dadb231206a Aug 21 11:04:29 master-ee-to-cse-0 systemd[1]: bashible.service: Deactivated successfully. -
Выполните следующие команды для запуска временного пода DKP CSE для получения актуальных дайджестов и списка модулей:
DECKHOUSE_VERSION=v<ВЕРСИЯ_DECKHOUSE_CSE> # Например, DECKHOUSE_VERSION=v1.58.2 d8 k run cse-image --image=registry-cse.deckhouse.ru/deckhouse/cse/install:$DECKHOUSE_VERSION --command sleep -- infinityКак только под перейдёт в статус
Running, выполните следующие команды:CSE_SANDBOX_IMAGE=$(d8 k exec cse-image -- cat deckhouse/candi/images_digests.json | grep pause | grep -oE 'sha256:\w*') CSE_K8S_API_PROXY=$(d8 k exec cse-image -- cat deckhouse/candi/images_digests.json | grep kubernetesApiProxy | grep -oE 'sha256:\w*') CSE_MODULES=$(d8 k exec cse-image -- ls -l deckhouse/modules/ | awk {'print $9'} |grep -oP "\d.*-\w*" | cut -c5-) USED_MODULES=$(d8 k get modules -o custom-columns=NAME:.metadata.name,SOURCE:.properties.source,STATE:.properties.state,ENABLED:.status.phase | grep Embedded | grep -E 'Enabled|Ready' | awk {'print $1'}) MODULES_WILL_DISABLE=$(echo $USED_MODULES | tr ' ' '\n' | grep -Fxv -f <(echo $CSE_MODULES | tr ' ' '\n')) CSE_DECKHOUSE_KUBE_RBAC_PROXY=$(d8 k exec cse-image -- cat deckhouse/candi/images_digests.json | jq -r ".common.kubeRbacProxy")Дополнительная команда, которая необходима только при переключении на DKP CSE версии 1.64:
CSE_DECKHOUSE_INIT_CONTAINER=$(d8 k exec cse-image -- cat deckhouse/candi/images_digests.json | jq -r ".common.init") -
Убедитесь, что используемые в кластере модули поддерживаются в DKP CSE. Например, в Deckhouse CSE 1.58 и 1.64 отсутствует модуль
cert-manager. Поэтому, перед отключением модуляcert-managerнеобходимо перевести режим работы HTTPS некоторых компонентов (напримерuser-authnилиprometheus) на альтернативные варианты работы, либо изменить глобальный параметр отвечающий за режим работы HTTPS в кластере.Отобразить список модулей, которые не поддерживаются в DKP CSE и будут отключены, можно следующей командой:
echo $MODULES_WILL_DISABLEПроверьте список и убедитесь, что функциональность указанных модулей не задействована вами в кластере, и вы готовы к их отключению.
Отключите неподдерживаемые в DKP CSE модули:
echo $MODULES_WILL_DISABLE | tr ' ' '\n' | awk {'print "d8 system module disable",$1'} | bashВ DKP CSE не поддерживается компонент earlyOOM. Отключите его с помощью настройки.
Дождитесь перехода пода DKP в статус
Readyи выполнения всех задач в очереди.d8 system queue listПроверьте, что отключенные модули перешли в состояние
Disabled.d8 k get modules -
Создайте NodeGroupConfiguration:
apiVersion: deckhouse.io/v1alpha1 kind: NodeGroupConfiguration metadata: name: cse-set-sha-images.sh spec: nodeGroups: - '*' bundles: - '*' weight: 50 content: | _on_containerd_config_changed() { bb-flag-set containerd-need-restart } bb-event-on 'containerd-config-file-changed' '_on_containerd_config_changed' bb-sync-file /etc/containerd/conf.d/cse-sandbox.toml - containerd-config-file-changed << "EOF_TOML" [plugins] [plugins."io.containerd.grpc.v1.cri"] sandbox_image = "registry-cse.deckhouse.ru/deckhouse/cse@$CSE_SANDBOX_IMAGE" EOF_TOML sed -i 's|image: .*|image: registry-cse.deckhouse.ru/deckhouse/cse@$CSE_K8S_API_PROXY|' /var/lib/bashible/bundle_steps/051_pull_and_configure_kubernetes_api_proxy.sh sed -i 's|crictl pull .*|crictl pull registry-cse.deckhouse.ru/deckhouse/cse@$CSE_K8S_API_PROXY|' /var/lib/bashible/bundle_steps/051_pull_and_configure_kubernetes_api_proxy.sh EOFДождитесь завершения синхронизации
bashibleна всех узлах.Состояние синхронизации можно отследить по значению
UPTODATEстатуса (отображаемое число узлов в этом статусе должно совпадать с общим числом узлов (NODES) в группе):d8 k get ng -o custom-columns=NAME:.metadata.name,NODES:.status.nodes,READY:.status.ready,UPTODATE:.status.upToDate -wВ журнале systemd-сервиса
bashibleна узлах должно появиться сообщениеConfiguration is in sync, nothing to doв результате выполнения следующей команды:journalctl -u bashible -n 5Пример вывода:
Aug 21 11:04:28 master-ee-to-cse-0 bashible.sh[53407]: Configuration is in sync, nothing to do. Aug 21 11:04:28 master-ee-to-cse-0 bashible.sh[53407]: Annotate node master-ee-to-cse-0 with annotation node.deckhouse.io/configuration-checksum=9cbe6db6c91574b8b732108a654c99423733b20f04848d0b4e1e2dadb231206a Aug 21 11:04:29 master-ee-to-cse-0 bashible.sh[53407]: Successful annotate node master-ee-to-cse-0 with annotation node.deckhouse.io/configuration-checksum=9cbe6db6c91574b8b732108a654c99423733b20f04848d0b4e1e2dadb231206a Aug 21 11:04:29 master-ee-to-cse-0 systemd[1]: bashible.service: Deactivated successfully. -
Актуализируйте секрет доступа к registry DKP CSE, выполнив следующую команду:
d8 k -n d8-system create secret generic deckhouse-registry \ --from-literal=".dockerconfigjson"="{\"auths\": { \"registry-cse.deckhouse.ru\": { \"username\": \"license-token\", \"password\": \"$LICENSE_TOKEN\", \"auth\": \"$AUTH_STRING\" }}}" \ --from-literal="address"=registry-cse.deckhouse.ru \ --from-literal="path"=/deckhouse/cse \ --from-literal="scheme"=https \ --type=kubernetes.io/dockerconfigjson \ --dry-run='client' \ -o yaml | kubectl -n d8-system exec -i svc/deckhouse-leader -c deckhouse -- kubectl replace -f - -
Измените образ DKP на образ DKP CSE:
Команда для DKP CSE версии 1.58:
d8 k -n d8-system set image deployment/deckhouse kube-rbac-proxy=registry-cse.deckhouse.ru/deckhouse/cse@$CSE_DECKHOUSE_KUBE_RBAC_PROXY deckhouse=registry-cse.deckhouse.ru/deckhouse/cse:$DECKHOUSE_VERSIONКоманда для DKP CSE версии 1.64 и 1.67:
d8 k -n d8-system set image deployment/deckhouse init-downloaded-modules=registry-cse.deckhouse.ru/deckhouse/cse@$CSE_DECKHOUSE_INIT_CONTAINER kube-rbac-proxy=registry-cse.deckhouse.ru/deckhouse/cse@$CSE_DECKHOUSE_KUBE_RBAC_PROXY deckhouse=registry-cse.deckhouse.ru/deckhouse/cse:$DECKHOUSE_VERSION -
Дождитесь перехода пода DKP в статус
Readyи выполнения всех задач в очереди. Если в процессе возникает ошибкаImagePullBackOff, подождите автоматического перезапуска пода.Посмотреть статус пода DKP:
d8 k -n d8-system get po -l app=deckhouseПроверить состояние очереди DKP:
d8 system queue list -
Проверьте, не осталось ли в кластере подов с адресом registry для DKP EE:
d8 k get pods -A -o json | jq -r '.items[] | select(.spec.containers[] | select(.image | contains("deckhouse.ru/deckhouse/ee"))) | .metadata.namespace + "\t" + .metadata.name' | sort | uniqЕсли в выводе присутствуют поды модуля
chrony, заново включите данный модуль (в DKP CSE этот модуль по умолчанию выключен):d8 system module enable chrony -
Очистите временные файлы, ресурс NodeGroupConfiguration и переменные:
rm /tmp/cse-deckhouse-registry.yaml d8 k delete ngc containerd-cse-config.sh cse-set-sha-images.sh d8 k delete pod cse-imageapiVersion: deckhouse.io/v1alpha1 kind: NodeGroupConfiguration metadata: name: del-temp-config.sh spec: nodeGroups: - '*' bundles: - '*' weight: 90 content: | if [ -f /etc/containerd/conf.d/cse-registry.toml ]; then rm -f /etc/containerd/conf.d/cse-registry.toml fi if [ -f /etc/containerd/conf.d/cse-sandbox.toml ]; then rm -f /etc/containerd/conf.d/cse-sandbox.toml fi EOFПосле синхронизации (статус синхронизации на узлах можно отследить по значению
UPTODATEу NodeGroup) удалите созданный ресурс NodeGroupConfiguration:d8 k delete ngc del-temp-config.sh
Переключение DKP на CE/BE/SE/SE+/EE
При использовании модуля registry переключение между редакциями выполняется только в режиме Unmanaged.
Чтобы перейти в режим Unmanaged, воспользуйтесь инструкцией.
- Работоспособность инструкции подтверждена только для версий Deckhouse от
v1.70. Если ваша версия младше, используйте соответствующую ей документацию. - Для коммерческих изданий требуется действующий лицензионный ключ с поддержкой нужного издания. При необходимости можно запросить временный ключ.
- Инструкция подразумевает использование публичного адреса container registry:
registry.deckhouse.ru. В случае использования другого адреса container registry измените команды или воспользуйтесь инструкцией по переключению Deckhouse на использование стороннего registry. - В редакциях Deckhouse CE/BE/SE/SE+ не поддерживается работа облачных провайдеров Dynamix, Openstack, VCD, vSphere (vSphere поддерживается в редакции SE+) и ряда модулей.
- Все команды выполняются на master-узле существующего кластера под пользователем
root.
Ниже описаны шаги для переключения кластера с любой редакцию на одну из поддерживаемых: Community Edition, Basic Edition, Standard Edition, Standard Edition+, Enterprise Edition.
-
Подготовьте переменные с токеном лицензии и названием новой редакции:
Заполнять переменные
NEW_EDITIONиAUTH_STRINGпри переключении на редакцию Deckhouse CE не требуется. Значение переменнойNEW_EDITIONдолжно быть равно желаемой редакции Deckhouse, например для переключения на редакцию:- CE, переменная должна быть
ce; - BE, переменная должна быть
be; - SE, переменная должна быть
se; - SE+, переменная должна быть
se-plus; - EE, переменная должна быть
ee.
NEW_EDITION=<PUT_YOUR_EDITION_HERE> LICENSE_TOKEN=<PUT_YOUR_LICENSE_TOKEN_HERE> AUTH_STRING="$(echo -n license-token:${LICENSE_TOKEN} | base64 )" - CE, переменная должна быть
-
Проверьте, чтобы очередь DKP была пустой и без ошибок:
d8 system queue list -
Создайте ресурс NodeGroupConfiguration для переходной авторизации в
registry.deckhouse.ru:При переходе на редакцию Deckhouse CE пропустите этот шаг.
d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: NodeGroupConfiguration metadata: name: containerd-$NEW_EDITION-config.sh spec: nodeGroups: - '*' bundles: - '*' weight: 30 content: | _on_containerd_config_changed() { bb-flag-set containerd-need-restart } bb-event-on 'containerd-config-file-changed' '_on_containerd_config_changed' mkdir -p /etc/containerd/conf.d bb-sync-file /etc/containerd/conf.d/$NEW_EDITION-registry.toml - containerd-config-file-changed << "EOF_TOML" [plugins] [plugins."io.containerd.grpc.v1.cri"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.deckhouse.ru".auth] auth = "$AUTH_STRING" EOF_TOML EOFДождитесь появления файла
/etc/containerd/conf.d/$NEW_EDITION-registry.tomlна узлах и завершения синхронизации bashible. Чтобы отследить статус синхронизации, проверьте значениеUPTODATE(число узлов в этом статусе должно совпадать с общим числом узлов (NODES) в группе):d8 k get ng -o custom-columns=NAME:.metadata.name,NODES:.status.nodes,READY:.status.ready,UPTODATE:.status.upToDate -wПример вывода:
NAME NODES READY UPTODATE master 1 1 1 worker 2 2 2Также в журнале systemd-сервиса bashible должно появиться сообщение
Configuration is in sync, nothing to doв результате выполнения следующей команды:journalctl -u bashible -n 5Пример вывода:
Aug 21 11:04:28 master-ee-to-se-0 bashible.sh[53407]: Configuration is in sync, nothing to do. Aug 21 11:04:28 master-ee-to-se-0 bashible.sh[53407]: Annotate node master-ee-to-se-0 with annotation node.deckhouse.io/ configuration-checksum=9cbe6db6c91574b8b732108a654c99423733b20f04848d0b4e1e2dadb231206a Aug 21 11:04:29 master ee-to-se-0 bashible.sh[53407]: Successful annotate node master-ee-to-se-0 with annotation node.deckhouse.io/ configuration-checksum=9cbe6db6c91574b8b732108a654c99423733b20f04848d0b4e1e2dadb231206a Aug 21 11:04:29 master-ee-to-se-0 systemd[1]: bashible.service: Deactivated successfully. -
Запустите временный под Deckhouse новой редакции, чтобы получить актуальные дайджесты и список модулей:
DECKHOUSE_VERSION=$(d8 k -n d8-system get deploy deckhouse -ojson | jq -r '.spec.template.spec.containers[] | select(.name == "deckhouse") | .image' | awk -F: '{print $2}') d8 k run $NEW_EDITION-image --image=registry.deckhouse.ru/deckhouse/$NEW_EDITION/install:$DECKHOUSE_VERSION --command sleep -- infinity -
После перехода пода в статус
Runningвыполните следующие команды:NEW_EDITION_MODULES=$(d8 k exec $NEW_EDITION-image -- ls -l deckhouse/modules/ | grep -oE "\d.*-\w*" | awk {'print $9'} | cut -c5-) USED_MODULES=$(d8 k get modules -o custom-columns=NAME:.metadata.name,SOURCE:.properties.source,STATE:.properties.state,ENABLED:.status.phase | grep Embedded | grep -E 'Enabled|Ready' | awk {'print $1'}) MODULES_WILL_DISABLE=$(echo $USED_MODULES | tr ' ' '\n' | grep -Fxv -f <(echo $NEW_EDITION_MODULES | tr ' ' '\n')) -
Убедитесь, что используемые в кластере модули поддерживаются в желаемой редакции.
Посмотреть список модулей, которые не поддерживаются в новой редакции и будут отключены:
echo $MODULES_WILL_DISABLEПроверьте полученный список и убедитесь, что функциональность указанных модулей не используется вами в кластере и вы готовы их отключить.
Отключите неподдерживаемые новой редакцией модули:
echo $MODULES_WILL_DISABLE | tr ' ' '\n' | awk {'print "d8 system module disable",$1'} | bashДождитесь, пока под Deckhouse перейдёт в состояние
Readyи убедитесь в выполнении всех задач в очереди. -
Выполните команду
deckhouse-controller helper change-registryиз пода Deckhouse с параметрами новой редакции:Для переключения на BE/SE/SE+/EE издания:
DOCKER_CONFIG_JSON=$(echo -n "{\"auths\": {\"registry.deckhouse.ru\": {\"username\": \"license-token\", \"password\": \"${LICENSE_TOKEN}\", \"auth\": \"${AUTH_STRING}\"}}}" | base64 -w 0) d8 k --as system:sudouser -n d8-cloud-instance-manager patch secret deckhouse-registry --type merge --patch="{\"data\":{\".dockerconfigjson\":\"$DOCKER_CONFIG_JSON\"}}" d8 k -n d8-system exec -ti svc/deckhouse-leader -c deckhouse -- deckhouse-controller helper change-registry --user=license-token --password=$LICENSE_TOKEN --new-deckhouse-tag=$DECKHOUSE_VERSION registry.deckhouse.ru/deckhouse/$NEW_EDITIONДля переключения на CE издание:
d8 k -n d8-system exec -ti svc/deckhouse-leader -c deckhouse -- deckhouse-controller helper change-registry --new-deckhouse-tag=$DECKHOUSE_VERSION registry.deckhouse.ru/deckhouse/ce -
Проверьте, не осталось ли в кластере подов со старым адресом registry, где
<YOUR-PREVIOUS-EDITION>— название вашей прошлой редакции:d8 k get pods -A -o json | jq -r '.items[] | select(.spec.containers[] | select(.image | contains("deckhouse.ru/deckhouse/<YOUR-PREVIOUS-EDITION>"))) | .metadata.namespace + "\t" + .metadata.name' | sort | uniq -
Удалите временные файлы, ресурс NodeGroupConfiguration и переменные:
При переходе на редакцию Deckhouse CE пропустите этот шаг.
d8 k delete ngc containerd-$NEW_EDITION-config.sh d8 k delete pod $NEW_EDITION-image d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1alpha1 kind: NodeGroupConfiguration metadata: name: del-temp-config.sh spec: nodeGroups: - '*' bundles: - '*' weight: 90 content: | if [ -f /etc/containerd/conf.d/$NEW_EDITION-registry.toml ]; then rm -f /etc/containerd/conf.d/$NEW_EDITION-registry.toml fi EOFПосле завершения синхронизации bashible (статус синхронизации на узлах отображается по значению
UPTODATEу NodeGroup) удалите созданный ресурс NodeGroupConfiguration:d8 k delete ngc del-temp-config.sh