Модуль deckhouse реализует ядро Deckhouse Kubernetes Platform (DKP) и выполняет следующие операции:
- обновление платформы;
- управление конфигурацией модулей;
- установка и обновление модулей;
- запуск сборки документации модулей;
- валидация кастомных ресурсов, находящихся под управлением модулей DKP.
Модуль управляет следующими кастомными ресурсами API-группы deckhouse.io:
- управление модулями:
- Module — описание, статус и публикация информации о модуле;
- ModuleConfig — описание пользовательских настроек для модулей;
- ModulePullOverride — описание исключений для выбора версий модулей;
- ModuleRelease — описание, публикация и отслеживание релизов модулей;
- ModuleSettingsDefinition — схема, версии и правила преобразования настроек модуля;
- ModuleSource — описание источника, репозитория или хранилища модулей;
- ModuleUpdatePolicy — правила обновления и автоматизации переходов версий модулей;
- управление платформой:
- DeckhouseRelease — объект, определяющий релиз (версию) DKP и политику обновления платформы;
- управление пакетами (Marketplace):
- Application — описание и желаемое состояние прикладного пакета (группы компонентов или приложения);
- ApplicationPackage — метаданные, источники и настройки пакета;
- ApplicationPackageVersion — описание конкретной версией пакета и ее параметров;
- PackageRepository — объект, описывающий источник репозиториев пакетов и их параметры;
- PackageRepositoryOperation — операции над репозиториями пакетов, такие как синхронизация или обновление;
- управление утилитами:
- CNIMigration — процесс миграции сетевого плагина Container Network Interface (CNI), содержит параметры и статус миграции;
- CNINodeMigration — статус и управление миграцией CNI на уровне отдельных узлов;
- ObjectKeeper — ресурс, обеспечивающий связь между другими ресурсами Kubernetes с использованием
ownerReference; - ModuleDocumentation — описание параметров для генерации и хранения документации модулей;
- управление кастомными ресурсами под управлением модулей DKP:
- ConversionWebhook — настройки и обработчики вебхуков для конверсий ресурсов;
- ValidationWebhook — настройки и обработчики вебхуков для валидации ресурсов.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля deckhouse на уровне 2 модели C4 и его взаимодействие с другими компонентами DKP изображены на следующей диаграмме:
Компоненты модуля
Модуль состоит из следующих компонентов:
-
Deckhouse (Deployment) — контроллер, реализующий операции по управлению платформой.
Контроллер координирует задачи по управлению платформой с использованием механизма очередей.
Контроллер Deckhouse может быть запущен в стандартном режиме или в режиме изоляции хуков. Для этого необходимо создать ConfigMap
chroot-modeв неймспейсеd8-system. В режиме изоляции shell-хуки и скрипты включения модулей выполняются в chroot-окружении с ограниченным набором смонтированных каталогов, что изолирует их от файловой системы контейнера контроллера.Если включен режим высокой доступности (High Availability, HA), запускается несколько экземпляров контроллера Deckhouse. Для обеспечения корректной работы контроллеры Deckhouse проводят выборы лидера с использованием ресурса Lease
deckhouse-leader-election. Контроллер, который был избран как лидер, берёт на себя выполнение всех операций по управлению платформой.Кроме того, с помощью контроллера Deckhouse можно настроить следующие параметры:
Параметр в конфигурации модуля Описание logLevelУровень логирования bundleНабор модулей, включенных по умолчанию releaseChannelКанал обновлений update.modeРежим обновлений update.windows.daysОкна обновлений Подробнее с описанием настроек модуля можно ознакомиться в разделе документации модуля.
Состоит из следующих контейнеров:
- init-downloaded-modules — init-контейнер, подготавливающий структуру каталогов для работы с модулями;
- deckhouse — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к интерфейсу отладки компонентов основного контейнера.
-
Webhook-handler (Deployment) — состоит из одного контейнера handler и реализует универсальный вебхук для конверсий и валидации кастомных ресурсов, находящихся под управлением DKP.
Компонент следит за кастомными ресурсами ConversionWebhook и ValidationWebhook и на их основе создаёт из шаблона Python-файлы хуков для shell-operator. При получении запросов от
kube-apiserverна валидацию или конверсию ресурсов shell-operator запускает необходимый хук и возвращает результат обработки. -
Cni-migration-manager (Deployment) — опциональный компонент, запускающийся на узлах control plane и состоящий из одного контейнера manager. Компонент управляет процессом смены сетевого плагина (CNI) в кластере DKP и фиксирует текущее состояние в кастомном ресурсе CNIMigration. Поддерживается миграция на плагины Flannel, Simple bridge, Cilium. Подробнее с переключением CNI в кластере можно ознакомиться в соответствующем руководстве.
Компонент создаётся глобальным хуком
detect-cni-migrationпри наличии кастомного ресурса CNIMigration. Ресурс CNIMigration создаётся администратором вручную или при использовании командыd8 network cni-migration switch --to-cni <target cni>. -
Cni-migration-agent (DaemonSet) — опциональный компонент, запускающийся на всех узлах кластера и состоящий из одного контейнера agent. Компонент следит за кастомным ресурсом CNIMigration и управляет кастомным ресурсом CNINodeMigration, отражающим текущее состояние миграции на конкретном узле.
Компонент создаётся глобальным хуком
detect-cni-migrationпри наличии кастомного ресурса CNIMigration. Ресурс CNIMigration создаётся администратором вручную или при использовании командыd8 network cni-migration switch --to-cni <target cni>.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
- Kube-apiserver:
- работа с кастомными ресурсами API-группы
deckhouse.io; - отслеживание ресурсов Pod и DaemonSet, а также перезапуск Pod при смене сетевого плагина;
- отслеживание ресурсов, описанных в кастомном ресурсе ObjectKeeper;
- создание и обновление ресурса Lease;
- создание, удаление, изменение и отслеживание ресурсов, описанных в модулях DKP;
- авторизация запросов.
- работа с кастомными ресурсами API-группы
-
Documentation — обновление документации при добавлении или обновлении модуля DKP.
-
Хранилище образов — получение образов компонентов модулей вместе с метаданными, в случае если модуль
registryустановлен в режимеUnmanaged. - Модуль
registry— получение образов компонентов модулей вместе с метаданными, в случае если модульregistryустановлен в одном из следующих режимов:Direct,ProxyилиLocal.
С модулем взаимодействуют следующие внешние компоненты:
- Kube-apiserver — валидация и конверсия кастомных ресурсов DKP.
- Prometheus-main — сбор метрик с контейнеров
deckhouseиwebhook-handler.