Переключение DKP с EE на CSE
Переключение 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 или от имени суперпользователя).
Переключение с использованием модуля registry
- Убедитесь, что кластер был переключен на использование модуля
registry. Если модуль не задействован, перейдите к инструкции по переключению без модуляregistry. - Настройте кластер на использование необходимой версии Kubernetes (информация о версионности приведена в разделе Переключение DKP с EE на CSE). Для этого:
-
Выполните команду:
d8 platform edit cluster-configuration - Измените параметр
kubernetesVersionна необходимое значение, например,"1.27"(в кавычках) для Kubernetes 1.27. - Сохраните изменения. Узлы кластера начнут последовательно обновляться.
- Дождитесь окончания обновления. Отслеживать ход обновления можно с помощью команды
d8 k get no. Обновление можно считать завершенным, когда в выводе команды у каждого узла кластера в колонкеVERSIONпоявится обновленная версия.
-
-
Подготовьте переменные с лицензионным ключом:
LICENSE_TOKEN=<PUT_YOUR_LICENSE_TOKEN_HERE> -
Запустите временный под Deckhouse новой редакции, чтобы получить актуальные дайджесты и список модулей:
d8 k create secret docker-registry cse-image-pull-secret \ --docker-server=registry-cse.deckhouse.ru \ --docker-username=license-token \ --docker-password=${LICENSE_TOKEN} DECKHOUSE_VERSION=$(d8 k -n d8-system get deploy deckhouse -ojson | jq -r '.spec.template.spec.containers[] | select(.name == "deckhouse") | .image' | awk -F: '{print $NF}') d8 k run cse-image \ --image=registry-cse.deckhouse.ru/deckhouse/cse/install:$DECKHOUSE_VERSION \ --overrides="{\"spec\": {\"imagePullSecrets\":[{\"name\": \"cse-image-pull-secret\"}]}}" \ --command sleep -- infinityКак только под перейдёт в статус
Running, выполните следующие команды: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')) -
Убедитесь, что используемые в кластере модули поддерживаются в Deckhouse CSE. Например, в Deckhouse CSE 1.58 и 1.64 отсутствует модуль
cert-manager. Поэтому, перед отключением модуляcert-managerнеобходимо перевести режим работы HTTPS некоторых компонентов (напримерuser-authnилиprometheus) на альтернативные варианты работы, либо изменить глобальный параметр, отвечающий за режим работы HTTPS в кластере.Отобразить список модулей, которые не поддерживаются в Deckhouse CSE и будут отключены, можно следующей командой:
echo $MODULES_WILL_DISABLEПроверьте список и убедитесь, что функциональность указанных модулей не задействована в кластере, и вы готовы к их отключению.
Отключите неподдерживаемые в Deckhouse CSE модули:
echo $MODULES_WILL_DISABLE | tr ' ' '\n' | awk {'print "d8 k -n d8-system exec deploy/deckhouse -- deckhouse-controller module disable",$1'} | bashВ Deckhouse CSE не поддерживается компонент earlyOOM. Отключите его с помощью настройки.
Дождитесь перехода пода Deckhouse в статус
Readyи выполнения всех задач в очереди.d8 k -n d8-system exec -it svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue listПроверьте, что отключенные модули перешли в состояние
Disabled.d8 k get modules -
Удалите созданный секрет и под:
d8 k delete pod/cse-image d8 k delete secret/cse-image-pull-secret -
Выполните переключение на новую редакцию. Для этого укажите следующие параметры в ModuleConfig
deckhouse(для подробной настройки ознакомьтесь с конфигурацией модуляdeckhouse):--- # Пример для Direct-режима. apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: registry: mode: Direct direct: # Relax mode используется для проверки наличия текущей версии Deckhouse в указанном registry. # Для переключения между редакциями необходимо использовать данный режим проверки registry. checkMode: Relax imagesRepo: registry-cse.deckhouse.ru/deckhouse/cse scheme: HTTPS # Укажите свой параметр <LICENSE_TOKEN>. license: <LICENSE_TOKEN> --- # Пример для Unmanaged-режима. apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: registry: mode: Unmanaged unmanaged: # Relax mode используется для проверки наличия текущей версии Deckhouse в указанном registry. # Для переключения между редакциями необходимо использовать данный режим проверки. checkMode: Relax imagesRepo: registry-cse.deckhouse.ru/deckhouse/cse scheme: HTTPS # Укажите свой параметр <LICENSE_TOKEN>. license: <LICENSE_TOKEN> -
Дождитесь переключения registry. Для проверки выполнения переключения воспользуйтесь инструкцией.
Пример вывода:
conditions: - lastTransitionTime: "..." message: |- Mode: Relax registry-cse.deckhouse.ru: all 1 items are checked reason: Ready status: "True" type: RegistryContainsRequiredImages # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready -
После переключения, удалите из ModuleConfig
deckhouseпараметрcheckMode: Relax, чтобы активировать выполнение проверки по умолчанию. Удаление запустит проверку наличия критически важных компонентов в registry. -
Дождитесь выполнения проверки. Статус переключения режима registry можно получить, воспользовавшись инструкцией.
Пример вывода:
conditions: - lastTransitionTime: "..." message: |- Mode: Default registry-cse.deckhouse.ru: all 155 items are checked reason: Ready status: "True" type: RegistryContainsRequiredImages # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready -
Проверьте, не осталось ли в кластере подов с адресом registry для Deckhouse EE:
Для Unmanaged-режима:
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Для других режимов, использующих фиксированный адрес (данная проверка не учитывает внешние модули):
# Получаем список актуальных дайджестов из файла images_digests.json внутри Deckhouse. IMAGES_DIGESTS=$(d8 k -n d8-system exec -i svc/deckhouse-leader -c deckhouse -- cat /deckhouse/modules/images_digests.json | jq -r '.[][]' | sort -u) # Проверяем, есть ли поды, использующие образы Deckhouse по адресу `registry.d8-system.svc:5001/system/deckhouse` # с дайджестом, отсутствующим в списке актуальных дайджестов из IMAGES_DIGESTS. d8 k get pods -A -o json | jq -r --argjson digests "$(printf '%s\n' $IMAGES_DIGESTS | jq -R . | jq -s .)" ' .items[] | {name: .metadata.name, namespace: .metadata.namespace, containers: .spec.containers} | select(.containers != null) | select( .containers[] | select(.image | test("registry.d8-system.svc:5001/system/deckhouse") and test("@sha256:")) | .image as $img | ($img | split("@") | last) as $digest | ($digest | IN($digests[]) | not) ) | .namespace + "\t" + .name ' | sort -uЕсли в выводе присутствуют поды модуля
chrony, заново включите данный модуль (в Deckhouse CSE этот модуль по умолчанию выключен):d8 k -n d8-system exec deploy/deckhouse -- deckhouse-controller module enable chrony
Переключение без модуля registry
-
Если модуль
registryвключен, отключите его с помощью инструкции. - Настройте кластер на использование необходимой версии Kubernetes (информация о версионности приведена в разделе Переключение DKP с EE на CSE). Для этого:
-
Выполните команду:
d8 platform edit cluster-configuration - Измените параметр
kubernetesVersionна необходимое значение, например,"1.27"(в кавычках) для Kubernetes 1.27. - Сохраните изменения. Узлы кластера начнут последовательно обновляться.
- Дождитесь окончания обновления. Отслеживать ход обновления можно с помощью команды
d8 k get no. Обновление можно считать завершенным, когда в выводе команды у каждого узла кластера в колонкеVERSIONпоявится обновленная версия.
-
-
Подготовьте переменные с лицензионным ключом и создайте ресурс NodeGroupConfiguration для переходной авторизации в
registry-cse.deckhouse.ru:Перед созданием ресурса ознакомьтесь с разделом Как добавить конфигурацию для дополнительного registry
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. -
Выполните следующие команды для запуска временного пода Deckhouse 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")Дополнительная команда, которая необходима только при переключении на Deckhouse CSE версии 1.64:
CSE_DECKHOUSE_INIT_CONTAINER=$(d8 k exec cse-image -- cat deckhouse/candi/images_digests.json | jq -r ".common.init") -
Убедитесь, что используемые в кластере модули поддерживаются в Deckhouse CSE. Например, в Deckhouse CSE 1.58 и 1.64 отсутствует модуль
cert-manager. Поэтому, перед отключением модуляcert-managerнеобходимо перевести режим работы HTTPS некоторых компонентов (напримерuser-authnилиprometheus) на альтернативные варианты работы, либо изменить глобальный параметр, отвечающий за режим работы HTTPS в кластере.Отобразить список модулей, которые не поддерживаются в Deckhouse CSE и будут отключены, можно следующей командой:
echo $MODULES_WILL_DISABLEПроверьте список и убедитесь, что функциональность указанных модулей не задействована в кластере, и вы готовы к их отключению.
Отключите неподдерживаемые в Deckhouse CSE модули:
echo $MODULES_WILL_DISABLE | tr ' ' '\n' | awk {'print "d8 k -n d8-system exec deploy/deckhouse -- deckhouse-controller module disable",$1'} | bashВ Deckhouse CSE не поддерживается компонент earlyOOM. Отключите его с помощью настройки.
Дождитесь перехода пода Deckhouse в статус
Readyи выполнения всех задач в очереди.d8 k -n d8-system exec -it svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue listПроверьте, что отключенные модули перешли в состояние
Disabled.d8 k get modules -
Создайте ресурс NodeGroupConfiguration:
d8 k apply -f - <<EOF 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 Deckhouse 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 | d8 k -n d8-system exec -i svc/deckhouse-leader -c deckhouse -- d8 k replace -f - -
Измените образ Deckhouse на образ Deckhouse CSE:
Команда для Deckhouse 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Команда для Deckhouse 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 -
Дождитесь перехода пода Deckhouse в статус
Readyи выполнения всех задач в очереди. Если в процессе возникает ошибкаImagePullBackOff, подождите автоматического перезапуска пода.Чтобы узнать статус пода Deckhouse, используйте следующую команду:
d8 k -n d8-system get po -l app=deckhouseЧтобы проверить состояние очереди Deckhouse, используйте следующую команду:
d8 k -n d8-system exec deploy/deckhouse -c deckhouse -- deckhouse-controller queue listПример вывода (очереди пусты):
Summary: - 'main' queue: empty. - 88 other queues (0 active, 88 empty): 0 tasks. - no tasks to handle. -
Проверьте, не осталось ли в кластере подов с адресом registry для Deckhouse 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, заново включите данный модуль (в Deckhouse CSE этот модуль по умолчанию выключен):d8 k -n d8-system exec deploy/deckhouse -- deckhouse-controller module enable chrony -
Очистите временные файлы, ресурс NodeGroupConfiguration и переменные:
-
Удалите временный файл:
rm /tmp/cse-deckhouse-registry.yaml -
Удалите ресурс NodeGroupConfiguration:
d8 k delete ngc containerd-cse-config.sh cse-set-sha-images.sh -
Удалите под:
d8 k delete pod cse-image -
Создайте и примените временный ресурс NodeGroupConfiguration для очистки:
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/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
Переключение DKP на CE/BE/SE/SE+/EE может быть выполнено одним из следующих способов:
- Работоспособность инструкции подтверждена только для версий 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.
Переключение с помощью модуля registry
-
Убедитесь, что кластер был переключен на использование модуля
registry. Если модуль не используется, перейдите к инструкции. -
Подготовьте переменные с лицензионным ключом и названием новой редакции:
Заполнять переменную
LICENSE_TOKENпри переключении на редакцию CE не требуется. Значение переменнойNEW_EDITIONдолжно быть равно желаемой редакции DKP, например для переключения на редакцию:- CE, переменная должна быть
ce; - BE, переменная должна быть
be; - SE, переменная должна быть
se; - SE+, переменная должна быть
se-plus; - EE, переменная должна быть
ee.
NEW_EDITION=<PUT_YOUR_EDITION_HERE> LICENSE_TOKEN=<PUT_YOUR_LICENSE_TOKEN_HERE> - CE, переменная должна быть
-
Проверьте, чтобы очередь Deckhouse была пустой и без ошибок:
d8 k -n d8-system exec -it svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue listПример вывода (очереди пусты):
Summary: - 'main' queue: empty. - 88 other queues (0 active, 88 empty): 0 tasks. - no tasks to handle. -
Запустите временный под Deckhouse новой редакции, чтобы получить актуальные дайджесты и список модулей:
Для CE редакции:
DECKHOUSE_VERSION=$(d8 k -n d8-system get deploy deckhouse -ojson | jq -r '.spec.template.spec.containers[] | select(.name == "deckhouse") | .image' | awk -F: '{print $NF}') d8 k run $NEW_EDITION-image --image=registry.deckhouse.ru/deckhouse/$NEW_EDITION/install:$DECKHOUSE_VERSION --command sleep -- infinityДля других редакций:
d8 k create secret docker-registry $NEW_EDITION-image-pull-secret \ --docker-server=registry.deckhouse.ru \ --docker-username=license-token \ --docker-password=${LICENSE_TOKEN} DECKHOUSE_VERSION=$(d8 k -n d8-system get deploy deckhouse -ojson | jq -r '.spec.template.spec.containers[] | select(.name == "deckhouse") | .image' | awk -F: '{print $NF}') d8 k run $NEW_EDITION-image \ --image=registry.deckhouse.ru/deckhouse/$NEW_EDITION/install:$DECKHOUSE_VERSION \ --overrides="{\"spec\": {\"imagePullSecrets\":[{\"name\": \"$NEW_EDITION-image-pull-secret\"}]}}" \ --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 platform module disable",$1'} | bashДождитесь, пока под Deckhouse перейдёт в состояние
Readyи убедитесь в выполнении всех задач в очереди:d8 k -n d8-system exec -it svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue listПример вывода (очереди пусты):
Summary: - 'main' queue: empty. - 88 other queues (0 active, 88 empty): 0 tasks. - no tasks to handle. -
Удалите созданный секрет и под:
d8 k delete pod/$NEW_EDITION-image d8 k delete secret/$NEW_EDITION-image-pull-secret -
Выполните переключение на новую редакцию. Для этого укажите следующие параметры в ModuleConfig
deckhouse(для подробной настройки ознакомьтесь с конфигурацией модуляdeckhouse):--- # Пример для Direct режима apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: registry: mode: Direct direct: # Relax mode используется для проверки наличия текущей версии Deckhouse в указанном registry # Для переключения между редакциями необходимо использовать данный режим проверки registry checkMode: Relax # Укажите свой параметр <NEW_EDITION> imagesRepo: registry.deckhouse.ru/deckhouse/<NEW_EDITION> scheme: HTTPS # Укажите свой параметр <LICENSE_TOKEN> # Если переключение выполняется на CE редакцию, удалите данный параметр license: <LICENSE_TOKEN> --- # Пример для Unmanaged режима apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: registry: mode: Unmanaged unmanaged: # Relax mode используется для проверки наличия текущей версии Deckhouse в указанном registry # Для переключения между редакциями необходимо использовать данный режим проверки checkMode: Relax # Укажите свой параметр <NEW_EDITION> imagesRepo: registry.deckhouse.ru/deckhouse/<NEW_EDITION> scheme: HTTPS # Укажите свой параметр <LICENSE_TOKEN> # Если переключение выполняется на CE редакцию, удалите данный параметр license: <LICENSE_TOKEN> -
Дождитесь переключения registry. Для проверки выполнения переключения воспользуйтесь инструкцией.
Пример вывода:
conditions: - lastTransitionTime: "..." message: |- Mode: Relax registry.deckhouse.ru: all 1 items are checked reason: Ready status: "True" type: RegistryContainsRequiredImages # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready -
После переключения, удалите из ModuleConfig
deckhouseпараметрcheckMode: Relax, чтобы активировать выполнение проверки по умолчанию. Удаление запустит проверку наличия критически важных компонентов в registry. -
Дождитесь выполнения проверки. Статус переключения режима registry можно получить, воспользовавшись инструкцией.
Пример вывода:
conditions: - lastTransitionTime: "..." message: |- Mode: Default registry.deckhouse.ru: all 155 items are checked reason: Ready status: "True" type: RegistryContainsRequiredImages # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready -
Проверьте, нет ли в неймспейсах
d8-*подов в состоянии ошибки, которые не могут загрузить образы. Это необходимо сделать вручную, так как в настоящий момент модули Deckhouse не переинициализируются автоматически после изменений, описанных выше.Получите список подов:
d8 k get po -AПолучите детальную информацию о проблемных подах:
d8 k describe po <pod_name> <namespace>Повторно загрузите соответствующие проблемным подам модули, выполнив на всех master-узлах команду:
rm -rf /var/lib/deckhouse/downloaded/<module-name>/Для получения
<module-name>выполните команду:d8 k get modulesПосле удаления данных нужных модулей перезапустите Deckhouse:
d8 k rollout restart deploy -n d8-system deckhouse -
Проверьте, не осталось ли в кластере подов со старым адресом registry, где
<YOUR-PREVIOUS-EDITION>— название вашей прошлой редакции:Для Unmanaged-режима:
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Для других режимов, использующих фиксированный адрес (данная проверка не учитывает внешние модули):
# Получаем список актуальных digest'ов из файла images_digests.json внутри Deckhouse IMAGES_DIGESTS=$(d8 k -n d8-system exec -i svc/deckhouse-leader -c deckhouse -- cat /deckhouse/modules/images_digests.json | jq -r '.[][]' | sort -u) # Проверяем, есть ли поды, использующие образы Deckhouse по адресу `registry.d8-system.svc:5001/system/deckhouse` # с digest'ом, отсутствующим в списке актуальных digest'ов из IMAGES_DIGESTS d8 k get pods -A -o json | jq -r --argjson digests "$(printf '%s\n' $IMAGES_DIGESTS | jq -R . | jq -s .)" ' .items[] | {name: .metadata.name, namespace: .metadata.namespace, containers: .spec.containers} | select(.containers != null) | select( .containers[] | select(.image | test("registry.d8-system.svc:5001/system/deckhouse") and test("@sha256:")) | .image as $img | ($img | split("@") | last) as $digest | ($digest | IN($digests[]) | not) ) | .namespace + "\t" + .name ' | sort -u
Переключение без использования модуля registry
-
Если модуль
registryвключен, отключите его с помощью инструкции. -
Подготовьте переменные с лицензионным ключом и названием новой редакции:
Заполнять переменные
NEW_EDITIONиAUTH_STRINGпри переключении на редакцию CE не требуется. Значение переменнойNEW_EDITIONдолжно быть равно желаемой редакции DKP, например для переключения на редакцию:- 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, переменная должна быть
-
Проверьте, чтобы очередь Deckhouse была пустой и без ошибок:
d8 k -n d8-system exec -it svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue listПример вывода (очереди пусты):
Summary: - 'main' queue: empty. - 88 other queues (0 active, 88 empty): 0 tasks. - no tasks to handle. -
Создайте ресурс
NodeGroupConfigurationдля переходной авторизации вregistry.deckhouse.ru:Перед созданием ресурса ознакомьтесь с разделом Как добавить конфигурацию для дополнительного registry.
При переходе на редакцию 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 $NF}') 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 platform module disable",$1'} | bashДождитесь, пока под Deckhouse перейдёт в состояние
Readyи убедитесь в выполнении всех задач в очереди:d8 k -n d8-system exec -it svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue listПример вывода (очереди пусты):
Summary: - 'main' queue: empty. - 88 other queues (0 active, 88 empty): 0 tasks. - no tasks to handle. -
Выполните команду
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и переменные:При переходе на редакцию 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