Возможность использования внутреннего container registry (registry) реализуется модулем registry
.
Внутренний registry позволяет оптимизировать загрузку и хранение образов, а также обеспечить высокую доступность и отказоустойчивость Deckhouse Kubernetes Platform.
Режимы работы с внутренним registry
Модуль registry
, реализующий внутреннее хранилище, работает в следующих режимах:
Direct
— работа с использованием внутреннего registry. Обращение к внутреннему registry выполняется по фиксированному адресуregistry.d8-system.svc:5001/system/deckhouse
. Фиксированный адрес, при изменении параметров registry, позволяет избежать повторного скачивания образов и перезапуска компонентов. Переключение между режимами и registry выполняется через ModuleConfigdeckhouse
. Переключение выполняется автоматически (подробнее — в примерах переключения ниже). Архитектура режима описана в разделе «Архитектура режима Direct».Unmanaged
— работа без использования внутреннего registry. Обращение внутри кластера выполняется по адресу, который можно задать при установке кластера, или изменить в развернутом кластере.
Для работы в режиме Direct
необходимо использовать CRI containerd или containerd v2 на всех узлах кластера. Для настройки CRI ознакомьтесь с конфигурацией ClusterConfiguration
Ограничения по работе с внутренним registry
Работа с внутренним registry с помощью модуля registry
имеет ряд ограничений и особенностей, касающихся установки, условий работы и переключения режимов.
Ограничения при установке кластера
Bootstrap кластера Deckhouse Kubernetes Platform с включенным режимом Direct
не поддерживается. Кластер разворачивается с настройками для режима Unmanaged
.
Ограничения по условиям работы
Модуль registry
, реализующий возможность использования внутреннего container registry, работает при соблюдении следующих условий:
- Если на узлах кластера используется CRI containerd или containerd v2. Для настройки CRI ознакомьтесь с конфигурацией
ClusterConfiguration
. - Кластер полностью управляется DKP. В Managed Kubernetes кластерах он работать не будет.
Ограничения по переключению режимов
Ограничения по переключению режимов следующие:
- Переключение на режим
Direct
возможно, если на узлах отсутствуют пользовательские конфигурации registry. - Переключение в режим
Unmanaged
доступно только из режимаDirect
. - В режиме
Unmanaged
изменение параметров registry не поддерживается. Для изменения параметров нужно переключиться на режимDirect
, внести необходимые изменения и снова включить режимUnmanaged
.
Примеры переключения
Переключение на режим Direct
Для переключения уже работающего кластера на режим Direct
(включает использование внутреннего registry) выполните следующие шаги:
- Во время первого переключения сервис
Containerd V1
будет перезапущен, так как выполнится переключение на новую конфигурацию авторизации. - При изменении режима или параметров registry Deckhouse Kubernetes Platform будет перезапущена.
-
Если кластер запущен с containerd v1, подготовьте пользовательские конфигурации containerd.
-
Убедитесь, что все master-узлы находятся в состоянии
Ready
и не имеют статусаSchedulingDisabled
, используя следующую команду:d8 k get nodes
Пример вывода:
NAME STATUS ROLES ... master-0 Ready control-plane,master ... master-1 Ready control-plane,master ... master-2 Ready control-plane,master ...
Пример вывода, когда master-узел (
master-2
в примере) находится в статусеSchedulingDisabled
:NAME STATUS ROLES ... master-0 Ready control-plane,master ... master-1 Ready control-plane,master ... master-2 Ready,SchedulingDisabled control-plane,master ...
-
Убедитесь, что модуль
registry
включен и работает. Для этого выполните следующую команду:d8 k get module registry -o wide
Пример вывода:
NAME WEIGHT ... PHASE ENABLED DISABLED MESSAGE READY registry 38 ... Ready True True
-
Установите настройки режима
Direct
в ModuleConfigdeckhouse
. Если используется registry, отличный отregistry.deckhouse.ru
, ознакомьтесь с конфигурацией модуляdeckhouse
для корректной настройки.Пример конфигурации:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: registry: mode: Direct direct: imagesRepo: registry.deckhouse.ru/deckhouse/ee scheme: HTTPS license: <LICENSE_KEY> # Замените на ваш лицензионный ключ
-
Проверьте статус переключения registry в секрете
registry-state
, используя инструкцию.Пример вывода:
conditions: # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready hash: .. mode: Direct target_mode: Direct
Переключение на режим Unmanaged
При изменении режима или параметров registry Deckhouse Kubernetes Platform будет перезапущена.
Переключение в режим Unmanaged
доступно только из режима Direct
. Конфигурационные параметры registry будут взяты из предыдущего активного режима.
Для переключения кластера на режим Unmanaged
выполните следующие шаги:
-
Убедитесь, что все master-узлы находятся в состоянии
Ready
и не имеют статусаSchedulingDisabled
, используя следующую команду:d8 k get nodes
Пример вывода:
NAME STATUS ROLES ... master-0 Ready control-plane,master ... master-1 Ready control-plane,master ... master-2 Ready control-plane,master ...
Пример вывода, когда master-узел (
master-2
в примере) находится в статусеSchedulingDisabled
:NAME STATUS ROLES ... master-0 Ready control-plane,master ... master-1 Ready control-plane,master ... master-2 Ready,SchedulingDisabled control-plane,master ...
-
Убедитесь, что модуль
registry
запущен в режимеDirect
, и статус переключения в режимDirect
имеет значениеReady
. Проверить состояние можно через секретregistry-state
, используя инструкцию. Пример вывода:conditions: # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready hash: .. mode: Direct target_mode: Direct
-
Установите настройки режима
Unmanaged
в ModuleConfigdeckhouse
:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: registry: mode: Unmanaged
-
Проверьте статус переключения registry в секрете
registry-state
, используя инструкцию. Пример вывода:conditions: # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready hash: .. mode: Unmanaged target_mode: Unmanaged
-
При необходимости переключения на предыдущую auth-конфигурацию containerd v1 ознакомьтесь с инструкцией
Подготовка containerd v1
При переключении на режим Direct
сервис containerd v1 будет перезапущен.
Конфигурация авторизации будет изменена на Mirror Auth (данная конфигурация используется по умолчанию в containerd v2).
После возврата в режим Unmanaged
обновлённая конфигурация авторизации останется без изменений.
Пример структуры Mirror Auth-конфигурации:
tree /etc/containerd/registry.d
.
├── registry.d8-system.svc:5001
│ ├── ca.crt
│ └── hosts.toml
└── registry.deckhouse.ru
├── ca.crt
└── hosts.toml
Пример конфигурации файла hosts.toml
:
[host]
[host."https://registry.deckhouse.ru"]
capabilities = ["pull", "resolve"]
skip_verify = true
ca = ["/path/to/ca.crt"]
[host."https://registry.deckhouse.ru".auth]
username = "username"
password = "password"
# If providing auth string:
auth = "<base64>"
Перед переключением убедитесь, что на узлах с containerd v1 отсутствуют пользовательские конфигурации авторизации, расположенные в директории /etc/containerd/conf.d
.
Если такие конфигурации существуют:
-
После удаления пользовательских конфигураций авторизации из директории
/etc/containerd/conf.d
сервис containerd будет перезапущен. Удалённые конфигурации перестанут работать. -
Новые Mirror Auth-конфигурации, добавленные в
/etc/containerd/registry.d
, вступят в силу только после перехода в режимDirect
.
-
Создайте новые Mirror Auth-конфигурации в директории
/etc/containerd/registry.d
. Пример:apiVersion: deckhouse.io/v1alpha1 kind: NodeGroupConfiguration metadata: name: custom-registry spec: bundles: - '*' content: | #!/bin/bash REGISTRY_ADDRESS="registry.io" REGISTRY_SCHEME="https" host_toml=$(cat <<EOF [host] [host."https://registry.deckhouse.ru"] capabilities = ["pull", "resolve"] skip_verify = true ca = ["/path/to/ca.crt"] [host."https://registry.deckhouse.ru".auth] username = "username" password = "password" # If providing auth string: auth = "<base64>" EOF ) mkdir -p "/etc/containerd/registry.d/${REGISTRY_ADDRESS}" echo "$host_toml" > "/etc/containerd/registry.d/${REGISTRY_ADDRESS}/hosts.toml" nodeGroups: - '*' weight: 0
Для проверки новой конфигурации выполните:
# HTTPS: ctr -n k8s.io images pull --hosts-dir=/etc/containerd/registry.d/ registry.io/registry/path:tag # HTTP: ctr -n k8s.io images pull --hosts-dir=/etc/containerd/registry.d/ --plain-http registry.io/registry/path:tag
-
Удалите auth-конфигурации из директории
/etc/containerd/conf.d
.
Переключение на предыдущую конфигурацию авторизации containerd v1
- Переключение возможно только в режиме
Unmanaged
. - При переключении на старую конфигурацию авторизации containerd v1 пользовательские конфигурации в
/etc/containerd/registry.d
перестанут работать. - Добавить пользовательские auth-конфигурации для старой схемы авторизации (в каталог
/etc/containerd/conf.d
) можно только после переключения на неё.
Чтобы переключиться на предыдущую конфигурацию авторизации containerd v1, выполните следующие шаги:
-
Перейдите в режим
Unmanaged
. -
Проверьте статус переключения, используя инструкцию. Пример вывода:
conditions: # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready hash: .. mode: Unmanaged target_mode: Unmanaged
-
Удалите секрет
registry-bashible-config
:d8 k -n d8-system delete secret registry-bashible-config
-
После удаления дождитесь завершения переключения на старую конфигурацию авторизации в containerd v1.
Для отслеживания используйте инструкцию. Пример вывода:conditions: # ... - lastTransitionTime: "..." message: "" reason: "" status: "True" type: Ready hash: .. mode: Unmanaged target_mode: Unmanaged
Просмотр статуса переключения режима registry
Статус переключения режима registry можно получить с помощью следующей команды:
d8 k -n d8-system -o yaml get secret registry-state | yq -C -P '.data | del .state | map_values(@base64d) | .conditions = (.conditions | from_yaml)'
Пример вывода:
conditions:
- lastTransitionTime: "2025-07-15T12:52:46Z"
message: 'registry.deckhouse.ru: all 157 items are checked'
reason: Ready
status: "True"
type: RegistryContainsRequiredImages
- lastTransitionTime: "2025-07-11T11:59:03Z"
message: ""
reason: ""
status: "True"
type: ContainerdConfigPreflightReady
- lastTransitionTime: "2025-07-15T12:47:47Z"
message: ""
reason: ""
status: "True"
type: TransitionContainerdConfigReady
- lastTransitionTime: "2025-07-15T12:52:48Z"
message: ""
reason: ""
status: "True"
type: InClusterProxyReady
- lastTransitionTime: "2025-07-15T12:54:53Z"
message: ""
reason: ""
status: "True"
type: DeckhouseRegistrySwitchReady
- lastTransitionTime: "2025-07-15T12:55:48Z"
message: ""
reason: ""
status: "True"
type: FinalContainerdConfigReady
- lastTransitionTime: "2025-07-15T12:55:48Z"
message: ""
reason: ""
status: "True"
type: Ready
mode: Direct
target_mode: Direct
Вывод отображает состояние процесса переключения. Каждое условие может находиться в статусе True
или False
, а также содержать поле message
с пояснением.
Описание условий:
Условие | Описание |
---|---|
ContainerdConfigPreflightReady |
Состояние проверки конфигурации containerd. Проверяется, что на узлах отсутствуют пользовательские auth конфигурации containerd. |
TransitionContainerdConfigReady |
Состояние подготовки конфигурации containerd в новый режим. Проверяется, что конфигурация containerd успешно подготовлена и содержит одновременно конфигурации нового и старого режима. |
FinalContainerdConfigReady |
Состояние завершения переключения containerd в новый режим. Проверяется, что конфигурация containerd успешно применена и содержит конфигурацию нового режима. |
DeckhouseRegistrySwitchReady |
Состояние переключения Deckhouse и его компонентов на использование нового registry. Значение True указывает, что Deckhouse успешно переключился на сконфигурированный registry и готов к работе. |
InClusterProxyReady |
Состояние готовности In-Cluster Proxy. Проверяется, что In-Cluster Proxy успешно запущен и работает. |
CleanupInClusterProxy |
Состояние очистки In-Cluster Proxy, если прокси не нужен для работы желаемого режима. Проверяется, что все ресурсы, связанные с In-Cluster Proxy, успешно удалены. |
Ready |
Общее состояние готовности registry к работе в указанном режиме. Проверяется, что все предыдущие условия выполнены и модуль готов к работе. |