При разработке модулей может возникнуть необходимость загрузить и развернуть модуль в обход каналов обновления. Для этого используется ресурс ModulePullOverride.
Пример:
1apiVersion: deckhouse.io/v1alpha1
2kind: ModulePullOverride
3metadata:
4 name: <module-name>
5spec:
6 imageTag: <tag of the module image>
7 scanInterval: <image digest check interval. Default: 15s>
8 source: <ModuleSource ref>
Требования к параметрам ресурса:
-
Имя модуля metadata.name должно соответствовать имени модуля в ModuleSource (параметр
.status.modules.[].name
). -
Тег образа контейнера spec.imageTag может быть любым. Например, ~pr333~, ~my-branch~.
-
Параметр ModuleSource spec.source выдает данные для авторизации в registry.
Необязательный интервал времени spec.scanInterval устанавливает интервал для проверки образов в registry. По умолчанию задан интервал в 15 секунд.
Для принудительного обновления можно задать больший интервал, а также использовать аннотацию renew=""
.
Пример команды:
1kubectl annotate mpo <name> renew=""
Принцип действия
При разработке этого ресурса указанный модуль не будет учитывать ModuleUpdatePolicy, а также не будет загружать и создавать объекты ModuleRelease.
Вместо этого модуль будет загружаться при каждом изменении параметра imageDigest
и будет применяться в кластере.
При этом в статусе ресурса ModuleSource этот модуль получит признак overridden: true
, который укажет на то, что используется ресурс ModulePullOverride.
После удаления ModulePullOverride модуль продолжит функционировать, но если для него применена политика ModuleUpdatePolicy, то при наличии загрузятся новые релизы, которые заменят текущую “версию разработчика”.
Пример
-
В ModuleSource присутствуют два модуля
echo
иhello-world
. Для них определена политика обновления, они загружаются и устанавливаются в DKP:1apiVersion: deckhouse.io/v1alpha1 2kind: ModuleSource 3metadata: 4 name: test 5spec: 6 registry: 7 ca: "" 8 dockerCfg: someBase64String== 9 repo: registry.example.com/deckhouse/modules 10 scheme: HTTPS 11status: 12 modules: 13 - name: echo 14 policy: test-alpha 15 - name: hello-world 16 policy: test-alpha 17 modulesCount: 2
-
Создайте ресурс ModulePullOverride для модуля
echo
:1apiVersion: deckhouse.io/v1alpha1 2kind: ModulePullOverride 3metadata: 4 name: echo 5spec: 6 imageTag: main-patch-03354 7 source: test
Этот ресурс будет проверять тег образа
registry.example.com/deckhouse/modules/echo:main-patch-03354
(ms:spec.registry.repo/mpo:metadata.name:mpo:spec.imageTag
). -
При каждом обновлении статус этого ресурса будет меняться:
1apiVersion: deckhouse.io/v1alpha1 2kind: ModulePullOverride 3metadata: 4 name: echo 5spec: 6 imageTag: main-patch-03354 7 scanInterval: 15s 8 source: test 9status: 10 imageDigest: sha256:ed958cc2156e3cc363f1932ca6ca2c7f8ae1b09ffc1ce1eb4f12478aed1befbc 11 message: "" 12 updatedAt: "2023-12-07T08:41:21Z"
где:
- imageDigest — уникальный идентификатор образа контейнера, который был загружен.
- lastUpdated — время последней загрузки образа.
-
При этом ModuleSource приобретет вид:
1apiVersion: deckhouse.io/v1alpha1 2kind: ModuleSource 3metadata: 4 name: test 5spec: 6 registry: 7 ca: "" 8 dockerCfg: someBase64String== 9 repo: registry.example.com/deckhouse/modules 10 scheme: HTTPS 11status: 12 modules: 13 - name: echo 14 overridden: true 15 - name: hello-world 16 policy: test-alpha 17 modulesCount: 2
Артефакты модуля в container registry
После сборки модуля его артефакты должны быть загружены в container registry по пути, который является источником для загрузки и запуска модулей в DKP. Путь, по которому загружаются артефакты модулей в registry, указывается в ресурсе ModuleSource.
Пример иерархии образов контейнеров после загрузки артефактов модулей module-1
и modules-2
в registry:
1registry.example.io
2📁 modules-source
3├─ 📁 module-1
4│ ├─ 📦 v1.23.1
5│ ├─ 📦 d4bf3e71015d1e757a8481536eeabda98f51f1891d68b539cc50753a-1589714365467
6│ ├─ 📦 e6073b8f03231e122fa3b7d3294ff69a5060c332c4395e7d0b3231e3-1589714362300
7│ ├─ 📦 v1.23.2
8│ └─ 📁 release
9│ ├─ 📝 v1.23.1
10│ ├─ 📝 v1.23.2
11│ ├─ 📝 alpha
12│ └─ 📝 beta
13└─ 📁 module-2
14 ├─ 📦 v0.30.147
15 ├─ 📦 d4bf3e71015d1e757a8481536eeabda98f51f1891d68b539cc50753a-1589714365467
16 ├─ 📦 e6073b8f03231e122fa3b7d3294ff69a5060c332c4395e7d0b3231e3-1589714362300
17 ├─ 📦 v0.31.1
18 └─ 📁 release
19 ├─ 📝 v0.30.147
20 ├─ 📝 v0.31.1
21 ├─ 📝 alpha
22 └─ 📝 beta
Container registry должен поддерживать вложенную структуру репозиториев. Подробнее об этом в разделе требований.
Далее приведен список команд для работы с источником модулей. В примерах используется утилита crane. Установите ее по инструкции. Для macOS воспользуйтесь brew
.
Вывод списка модулей в источнике модулей
1crane ls <REGISTRY_URL>/<MODULE_SOURCE>
Пример:
1$ crane ls registry.example.io/modules-source
2module-1
3module-2
Вывод списка образов модуля
1crane ls <REGISTRY_URL>/<MODULE_SOURCE>/<MODULE_NAME>
Пример:
1$ crane ls registry.example.io/modules-source/module-1
2v1.23.1
3d4bf3e71015d1e757a8481536eeabda98f51f1891d68b539cc50753a-1589714365467
4e6073b8f03231e122fa3b7d3294ff69a5060c332c4395e7d0b3231e3-1589714362300
5v1.23.2
В примере в модуле module-1
присутствуют два образа модуля и два образа контейнеров приложений.
Вывод файлов в образе модуля
1crane export <REGISTRY_URL>/<MODULE_SOURCE>/<MODULE_NAME>:<MODULE_TAG> - | tar -tf -
Пример:
1crane export registry.example.io/modules-source/module-1:v1.23.1 - | tar -tf -
Ответ будет достаточно большим.
Вывод списка образов контейнеров приложений модуля
1crane export <REGISTRY_URL>/<MODULE_SOURCE>/<MODULE_NAME>:<MODULE_TAG> - | tar -Oxf - images_digests.json
Пример:
1$ crane export registry.example.io/modules-source/module-1:v1.23.1 - | tar -Oxf - images_digests.json
2{
3 "backend": "sha256:fcb04a7fed2c2f8def941e34c0094f4f6973ea6012ccfe2deadb9a1032c1e4fb",
4 "frontend": "sha256:f31f4b7da5faa5e320d3aad809563c6f5fcaa97b571fffa5c9cab103327cc0e8"
5}
Просмотр списка релизов
1crane ls <REGISTRY_URL>/<MODULE_SOURCE>/<MODULE_NAME>/release
Пример:
1$ crane ls <REGISTRY_URL>/<MODULE_SOURCE>/<MODULE_NAME>/release
2v1.23.1
3v1.23.2
4alpha
5beta
В примере в container registry два релиза и используются два канала обновлений: alpha
и beta
.
Вывод версии, используемой на канале обновлений alpha
1crane export <REGISTRY_URL>/<MODULE_SOURCE>/<MODULE_NAME>/release:alpha - | tar -Oxf - version.json
Пример:
1$ crane export registry.example.io/modules-source/module-1/release:alpha - | tar -Oxf - version.json
2{"version":"v1.23.2"}