В руководстве рассматривается DKP Enterprise Edition, но механизмы аналогичны для других редакций.
Руководство тестировалось на d8 v0.17.1.
В руководстве используется сторонняя утилита crane для анализа container registry. Перед началом работ установите её в соответствии с официальной инструкцией.
Механика обновления платформы с помощью релизных каналов
Обновления Deckhouse Kubernetes Platform (DKP) основаны на каналах обновлений. Канал обновлений, заданный для установленной у вас копии DKP, можно посмотреть в ModuleConfig deckhouse
, выполнив команду:
d8 k get mc deckhouse -o jsonpath='{.spec.settings.releaseChannel}'
Пример вывода:
Stable
Технически обновление DKP выглядит следующим образом: в registry находится образ с неизменным именем release-channel
и тегом по названию канала обновлений, который указывает на образ уже конкретной версии DKP (при выпуске новой версии этот образ заменяется на новый).
Рассмотрим содержимое образа DKP Enterprise Edition с каналом обновления alpha
.
Для этого используйте команду:
crane export registry.deckhouse.ru/deckhouse/ee/release-channel:alpha | tar -tf -
В результате будет выведен список файлов и директорий, содержащихся внутри образа:
changelog.yaml
version.json
.werf
.werf/stapel
.werf/tmp
.werf/tmp/ssh-auth-sock
В образе содержатся два основных файла:
changelog.yaml
— содержит описание изменений;-
version.json
— содержит данные о canary-развёртывании релиза (canary
), требования (requirements
) и нарушения (disruptions
) (устаревшее поле) релиза, а также саму версию релиза в полеversion
.Чтобы посмотреть содержимое файла
version.json
, выполните команду:crane export registry.deckhouse.ru/deckhouse/ee/release-channel:alpha | tar -xOf - version.json | jq
Пример содержимого
version.json
:{ "canary": { "alpha": { "enabled": true, "waves": 2, "interval": "5m" }, "beta": { "enabled": false, "waves": 1, "interval": "1m" }, "early-access": { "enabled": true, "waves": 6, "interval": "30m" }, "stable": { "enabled": true, "waves": 6, "interval": "30m" }, "rock-solid": { "enabled": false, "waves": 5, "interval": "5m" } }, "requirements": { "k8s": "1.29", "disabledModules": "delivery,l2-load-balancer,ceph-csi", "migratedModules": "", "autoK8sVersion": "1.31", "ingressNginx": "1.9", "nodesMinimalOSVersionUbuntu": "18.04", "nodesMinimalOSVersionDebian": "10", "istioMinimalVersion": "1.19", "metallbHasStandardConfiguration": "true", "unmetCloudConditions": "true", "nodesMinimalLinuxKernelVersion": "5.8.0" }, "disruptions": { "1.36": [ "ingressNginx" ] }, "version": "v1.71.5" }
При изменении значения в поле версии (version
) в файле version.json
в registry DKP в кластере применяет новый релиз: создаётся deckhouserelease
и начинается процесс обновления.
Если для модуля deckhouse
задан ручной режим обновления (поле settings.update.mode
), обновление версии требуется подтвердить вручную.
При разрыве минорных версий между версией в кластере и версией в образе release-channel
DKP автоматически попробует восстановить промежуточные deckhouserelease
для выполнения последовательного обновления.
Обратите внимание, что DKP нельзя обновлять непоследовательно, пропуская минорные релизы (это не относится к патч-релизам). В минорных релизах зачастую присутствуют миграции, которые должны применяться последовательно. Эти миграции время от времени удаляются. Пропуск минорных релизов может привести к следующим последствиям:
- образование «мусора»;
- некорректная работа кластера из-за невыполненных миграций.
Механика обновления модулей платформы
Модули платформы имеют схожую механику обновления, но их релизный цикл отвязан от релизов платформы и полностью самостоятелен.
В кластере есть ресурсы ModuleSource, которые отслеживаются DKP, и на основе которых обнаруживается список доступных модулей.
Чтобы посмотреть, из какого репозитория будут устанавливаться модули, используйте команду:
d8 k get ms deckhouse -o jsonpath='{.spec.registry.repo}'
Пример вывода:
registry.deckhouse.ru/deckhouse/ee/modules
Посмотреть содержимое репозитория можно с помощью команды:
crane ls registry.deckhouse.ru/deckhouse/ee/modules
Пример вывода:
commander-agent
console
csi-ceph
csi-nfs
observability
operator-postgres
pod-reloader
prompp
sds-local-volume
sds-node-configurator
sds-replicated-volume
secrets-store-integration
snapshot-controller
stronghold
virtualization
В качестве примера рассмотрим содержимое образа модуля console
. В registry лежит образ с неизменным именем release
и тегом по имени канала, указывающим на образ уже конкретной версии модуля console
(при выпуске новой версии модуля этот образ заменяется на новый).
Чтобы посмотреть содержимое этого образа, используйте команду:
crane export registry.deckhouse.ru/deckhouse/ee/modules/console/release:alpha | tar -tf -
Пример вывода:
changelog.yaml
version.json
Образ модуля, аналогично образу самой платформы DKP, содержит файлы changelog.yaml
и version.json
.
Для просмотра содержимого файла version.json
используйте команду:
crane export registry.deckhouse.ru/deckhouse/ee/modules/console/release:alpha | tar -xOf - version.json | jq
Пример содержимого version.json
:
{
"version": "v1.39.4"
}
В поле version
содержится версия модуля. При её изменении DKP применяет новый релиз (создаётся modulerelease
и начинается процесс обновления).
Обратите внимание, что модули нельзя обновлять непоследовательно, пропуская через минорные релизы (это не относится к патч-релизам). В минорных релизах зачастую присутствуют миграции, которые должны применяться последовательно. Эти миграции время от времени удаляются. Пропуск минорных релизов может привести к следующим последствиям:
- образование «мусора»;
- некорректная работа кластера из-за невыполненных миграций.
При отсутствии необходимых минорных версий DKP выведет ошибку вида minor version is greater than deployed $version by one
.
При разрыве минорных версий между версией в кластере и версией в образе release
DKP автоматически попробует восстановить промежуточные modulerelease
для выполнения последовательного обновления.
Механика обновления баз данных сканера уязвимостей
Доступно в DKP EE, DKP CSE Lite (1.67) и DKP CSE Pro (1.67).
Базы уязвимостей обновляются раз в 6 часов. Модуль operator-trivy
в кластере самостоятельно скачивает их из registry один раз за этот промежуток.
Образы баз уязвимостей на примере DKP EE имеют постоянные имена и теги и находятся по путям:
registry.deckhouse.ru/deckhouse/ee/security/trivy-db:2
registry.deckhouse.ru/deckhouse/ee/security/trivy-java-db:1
registry.deckhouse.ru/deckhouse/ee/security/trivy-checks:0
Для настройки периодического обновления образов баз данных уязвимостей используйте конструкцию вида:
d8 mirror pull --source='registry.deckhouse.ru/deckhouse/ee' --license='YOUR_LICENSE_TOKEN' --no-platform --no-modules $(pwd)/d8-bundle-security-db && d8 mirror push $(pwd)/d8-bundle-security-db YOUR_PRIVATE_REGISTRY_HOSTNAME:5050/dkp/ee --registry-login='YOUR_REGISTRY_LOGIN' --registry-password='YOUR_REGISTRY_PASSWORD' --tls-skip-verify
Пример сценария обновления платформы, модулей и баз данных уязвимостей
Чтобы выполнить в закрытом окружении обновление DKP, используемых модулей и баз данных уязвимостей до актуальных версий, скачайте последние патч-релизы всех минорных версий платформы и указанных модулей и загрузите их в ваш registry.
Если запустить конструкцию d8 mirror pull --source='registry.deckhouse.ru/deckhouse/ee' --license='YOUR_LICENSE_TOKEN' $(pwd)/d8-bundle
для скачивания всех образов, находящихся на релизных каналах, и всех модулей (которых уже более 30 для DKP EE), то в результате получится объёмный d8-bundle
(на момент написания руководства объём директории d8-bundle
составил более 50 ГБ).
Чтобы этого не происходило, выкачивать следует только соответствующие вашей версии образы по следующей инструкции:
-
Получите версию DKP в Вашем кластере с помощью команды:
d8 k -n d8-system get deployment deckhouse -o json | jq -r '.metadata.annotations | {"core.deckhouse.io/edition","core.deckhouse.io/version"}'
Пример вывода:
{ "core.deckhouse.io/edition": "EE", "core.deckhouse.io/version": "v1.68.13" }
-
Получите список установленных модулей в кластере:
d8 k get mr | grep Deployed
Пример вывода:
commander-agent-v1.2.4 Deployed 13d console-v1.35.1 Deployed 7d4h
Добавьте полученный список к команде
d8 mirror pull
в виде ключей:--include-module='commander-agent@v1.2.4' --include-module='console@v1.35.1'
.Или используйте однострочник вида:
d8 k get mr -o json | jq -r '.items[] | select(.status.phase == "Deployed") | "--include-module='\''\(.spec.moduleName)@\(.spec.version)'\''"' | paste -sd " " -
-
Сформируйте финальную команду для скачивания образов, используя полученные ранее параметры:
d8 mirror pull --source='registry.deckhouse.ru/deckhouse/ee' --license='YOUR_LICENSE_TOKEN' --since-version='v1.68.13' --include-module='commander-agent@1.2.4' --include-module='console@1.35.1' $(pwd)/d8-bundle
Если вы настроили периодическое скачивание и загрузку в ваш registry баз данных уязвимостей, то можно добавить флаг
--no-security-db
для исключения их из процесса перекачивания образов.В результате выполнения команды будут скачаны последние патч-релизы всех минорных версий платформы и указанных модулей, начиная с последних патч-версий минорных версий релиза до актуальных версий, находящихся на релизных каналах.
-
Загрузите полученные артефакты в ваш registry следующей командой:
d8 mirror push $(pwd)/d8-bundle YOUR_PRIVATE_REGISTRY_HOSTNAME:5050/dkp/ee --registry-login='YOUR_REGISTRY_LOGIN' --registry-password='YOUR_REGISTRY_PASSWORD' --tls-skip-verify
-
Проверьте состояние обновления в кластере с помощью команд:
d8 k get deckhousereleases.deckhouse.io d8 k get modulereleases.deckhouse.io d8 system queue list
Возможные проблемы
Release is suspended
При попытке скачать образы платформы с помощью команды d8 mirror pull d8-bundle/ --license='YOUR_LICENSE_KEY'
возможно возникновение следующей ошибки:
Sep 9 00:10:57.145 INFO ╔ Pull Deckhouse Kubernetes Platform
Sep 9 00:11:01.532 ERROR Pull Deckhouse Kubernetes Platform failed error="Find tags to mirror: Find versions to mirror: get stable release version from registry: Cannot mirror Deckhouse: source registry contains suspended release channel \"stable\", try again later"
Error: pull failed, see the log for details
Это значит, что на одном из каналов обновлений развертывание релиза остановлено. Такая ситуация возникает, если в образ канала обновлений поступает версия, на которую нужно обновляться, но случилась ситуация, при которой дальнейшее развертывание релиза на канал остановлено — образ канала обновлений патчится, и в него добавляется флаг suspend
.
Тем не менее скачать версию платформы в таком случае все равно возможно с указанием флага --deckhouse-tag
для d8 mirror pull
. Например:
d8 mirror pull d8-bundle/ --license='YOUR_LICENSE_KEY' --deckhouse-tag='v1.71.3'
Пример вывода:
Sep 16 12:56:25.074 INFO ╔ Pull Deckhouse Kubernetes Platform
Sep 16 12:56:25.713 INFO ║ Skipped releases lookup as tag "v1.71.3" is specifically requested with --deckhouse-tag
Sep 16 12:56:25.714 INFO ║ Creating OCI Image Layouts
Sep 16 12:56:25.720 INFO ║ Resolving tags
Sep 16 12:56:26.715 INFO ║╔ Pull release channels and installers
Sep 16 12:56:26.716 INFO ║║ Beginning to pull Deckhouse release channels information
Sep 16 12:56:26.717 INFO ║║ [1 / 1] Pulling registry.deckhouse.ru/deckhouse/ee/release-channel:v1.71.3
Sep 16 12:56:27.087 INFO ║║ Deckhouse release channels are pulled!
Sep 16 12:56:27.087 INFO ║║ Beginning to pull installers
Sep 16 12:56:27.087 INFO ║║ [1 / 1] Pulling registry.deckhouse.ru/deckhouse/ee/install:v1.71.3
...
Особенности при работе с сертифицированной редакцией платформы
Обновление по механизму «каналов обновлений» на текущий момент для CSE редакции не реализовано.
Адрес registry: registry-cse.deckhouse.ru/deckhouse/cse
.
Процесс обновления описан на странице Обновления DKP Certified Security Edition.