Доступно в редакциях: CE, BE, SE, SE+, EE, CSE Lite (1.64), CSE Pro (1.64)
Этот модуль настраивает в Deckhouse:
- Уровень логирования
-
Набор модулей, включенных по умолчанию
Обычно используется набор модулей
Default
, который подходит в большинстве случаев.Независимо от используемого набора включенных по умолчанию модулей любой модуль может быть явно включен или выключен в конфигурации Deckhouse (подробнее про включение и отключение модуля).
-
В Deckhouse реализован механизм автоматического обновления. Этот механизм использует 5 каналов обновлений, различающиеся стабильностью и частотой выхода версий. Ознакомьтесь подробнее с тем, как работает механизм автоматического обновления и как установить желаемый канал обновлений.
-
Режим обновлений и окна обновлений
Deckhouse может использовать ручной или автоматический режим обновлений.
В ручном режиме обновлений автоматически применяются только важные исправления (patch-релизы), и для перехода на новый релиз Deckhouse требуется ручное подтверждение.
В автоматическом режиме обновлений, если в кластере не установлены окна обновлений, переход на новый релиз Deckhouse осуществляется сразу после его появления на соответствующем канале обновлений. Если же в кластере установлены окна обновлений, переход на более свежий релиз Deckhouse начнется в ближайшее доступное окно обновлений после появления новой версии на канале обновлений.
-
Сервис валидирования кастомных ресурсов
Сервис валидирования предотвращает создание кастомных ресурсов с некорректными данными или внесение таких данных в уже существующие кастомные ресурсы. Отслеживаются только ресурсы, находящиеся под управлением модулей Deckhouse.
Обновление релизов Deckhouse
Просмотр статуса релизов Deckhouse
Список последних релизов в кластере можно получить командной kubectl get deckhousereleases
. По умолчанию хранятся 10 последних релизов и все будущие.
Каждый релиз может иметь один из следующих статусов:
Pending
— релиз находится в ожидании, ждет окна обновления, настроек канареечного развертывания и т. д. Подробности можно увидеть с помощью командыkubectl describe deckhouserelease $name
.Deployed
— релиз применен. Это значит, что образ пода Deckhouse уже поменялся на новую версию, но при этом процесс обновления всех компонентов кластера идет асинхронно, так как зависит от многих настроек.Superseded
— релиз устарел и больше не используется.Suspended
— релиз отменен (например, в нем обнаружилась ошибка). Релиз переходит в этот статус, если его отменили и при этом он еще был применен в кластере.
Процесс обновления
В момент перехода в статус Deployed
релиз меняет версию (tag) образа Deckhouse. После запуска Deckhouse начнет проверку и обновление всех модулей, которые поменялись с предыдущего релиза. Длительность обновления зависит от настроек и размера кластера.
Например, если у вас много NodeGroup
, они будут обновляться продолжительное время, если много IngressNginxController
— они будут
обновляться по одному и это тоже займет некоторое время.
Ручное применение релизов
Если выбран ручной режим обновления и скопилось несколько релизов, их можно сразу одобрить к применению. В этом случае Deckhouse будет обновляться последовательно, сохраняя порядок релизов и меняя статус каждого примененного релиза.
Закрепление релиза
Под закреплением релиза подразумевается полное или частичное отключение автоматического обновления версий Deckhouse.
Есть три варианта ограничения автоматического обновления Deckhouse:
-
Установить ручной режим обновления.
В этом случае вы остановитесь на текущей версии, сможете получать обновления в кластер, но для применения обновления необходимо будет выполнить ручное действие. Это носится и к patch-версиям, и к минорным версиям.
Для установки ручного режима обновления необходимо в ModuleConfig
deckhouse
установить параметр settings.update.mode вManual
:kubectl patch mc deckhouse --type=merge -p='{"spec":{"settings":{"update":{"mode":"Manual"}}}}'
-
Установить режим автоматического обновления для патч-версий.
В этом случае вы остановитесь на текущем релизе, но будете получать patch-версии текущего релиза. Для применения обновления минорной версии релиза необходимо будет выполнить ручное действие.
Например: текущая версия DKP
v1.65.2
, после установки режима автоматического обновления для патч-версий, Deckhouse сможет обновиться до версииv1.65.6
, но не будет обновляться до версииv1.66.*
и выше.Для установки режима автоматического обновления для патч-версий необходимо в ModuleConfig
deckhouse
установить параметр settings.update.mode вAutoPatch
:kubectl patch mc deckhouse --type=merge -p='{"spec":{"settings":{"update":{"mode":"AutoPatch"}}}}'
-
Установить конкретный тег для Deployment
deckhouse
и удалить параметр releaseChannel из конфигурации модуляdeckhouse
.В таком случае DKP останется на конкретной версии, никакой информации о новых доступных версиях (объекты DeckhouseRelease) в кластере появляться не будет.
Пример установки версии
v1.66.3
для DKP EE и удаления параметраreleaseChannel
из конфигурации модуляdeckhouse
:kubectl -ti -n d8-system exec svc/deckhouse-leader -c deckhouse -- kubectl set image deployment/deckhouse deckhouse=registry.deckhouse.ru/deckhouse/ee:v1.66.3 kubectl patch mc deckhouse --type=json -p='[{"op": "remove", "path": "/spec/settings/releaseChannel"}]'
Priority Classes
Модуль создает в кластере набор классов приоритета (PriorityClass) и назначает их компонентам, установленным Deckhouse, и приложениям в кластере.
Функциональность классов приоритета реализуется планировщиком (scheduler), который позволяет учитывать приоритет пода (определяемый его принадлежностью к классу) при планировании.
Например, при развертывании в кластере подов с priorityClassName: production-low
, если в кластере не будет доступных ресурсов для данного пода, Kubernetes начнет вытеснять поды с наименьшим приоритетом.
То есть сначала будут вытеснены все поды с priorityClassName: develop
, затем — с cluster-low
и так далее.
При указании класса приоритета очень важно понимать тип приложения и окружение, в котором оно будет работать. Указание любого класса приоритета не уменьшит его фактический приоритет, так как если у пода не установлен приоритет, то планировщик считает его самым низким.
Нельзя использовать классы приоритета system-node-critical
, system-cluster-critical
, cluster-medium
, cluster-low
.
Устанавливаемые модулем классы приоритета (в порядке приоритета от высшего к низшему):
Класс приоритета | Описание | Значение |
---|---|---|
system-node-critical |
Компоненты кластера, которые обязаны присутствовать на узле. Также полностью защищает от вытеснения kubelet’ом. Примеры: node-exporter , csi и другие. |
2000001000 |
system-cluster-critical |
Компоненты кластера, без которых его корректная работа невозможна. Этим PriorityClass’ом обязательно помечаются MutatingWebhooks и Extension API servers. Также полностью защищает от вытеснения kubelet’ом. Примеры: kube-dns , kube-proxy , cni-flannel , cni-cillium и другие. |
2000000000 |
production-high |
Stateful-приложения, отсутствие которых в production-окружении приводит к полной недоступности сервиса или потере данных. Примеры: PostgreSQL , Memcached , Redis , MongoDB и другие. |
9000 |
cluster-medium |
Компоненты кластера, влияющие на мониторинг (алерты, диагностика) и автомасштабирование. Без мониторинга невозможно оценить масштабы происшествия, без автомасштабирования — предоставить приложениям необходимые ресурсы. Примеры: deckhouse , node-local-dns , grafana , upmeter и другие. |
7000 |
production-medium |
Основные stateless-приложения в production-окружении, которые отвечают за работу сервиса для посетителей. | 6000 |
deployment-machinery |
Компоненты кластера, используемые для сборки и деплоя в кластер. | 5000 |
production-low |
Приложения в production-окружении (cron-задания, административные панели, batch-процессы), без которых можно обойтись некоторое время. Если batch или cron-задачи нельзя прерывать, их следует отнести к production-medium . |
4000 |
staging |
Staging-окружения для приложений. | 3000 |
cluster-low |
Компоненты кластера, без которых эксплуатация возможна, но которые желательны. Примеры: dashboard , cert-manager , prometheus и другие. |
2000 |
develop (по умолчанию) |
Develop-окружения для приложений. Класс по умолчанию, если не указан иной класс. | 1000 |
standby |
Класс не предназначен для приложений. Используется в системных целях для резервирования узлов. | -1 |