Переключение 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