Deckhouse Kubernetes Platform (DKP) генерирует алерты в систему мониторинга и может автоматически отправлять уведомления о будущих минорных обновлениях во внешние системы. Это помогает заранее планировать обновления и подготовиться к ним.
Условия отправки уведомлений во внешние системы:
- для DKP установлен автоматический режим обновления;
- планируется смена минорной версии (уведомления о патч-версиях не отправляются);
- настроен вебхук для уведомлений.
Алерты в системе мониторинга
Если обновление требует внесения изменений в кластер (например, обновление версии Kubernetes или ОС), DKP сгенерирует специальные предупреждения. Среди них:
- D8NodeHasDeprecatedOSVersion — в кластере обнаружены узлы с неподдерживаемой версией ОС;
- HelmReleasesHasResourcesWithDeprecatedVersions — в некоторых Helm-релизах используются устаревшие ресурсы;
- KubernetesVersionEndOfLife — установленная версия Kubernetes более не поддерживается.
При появлении данных предупреждений обязательно устраните их причины перед обновлением. Это поможет избежать сбоев в работе кластера и обеспечить его стабильность после обновления.
Настройка уведомлений
В режиме обновлений Auto
можно настроить вызов вебхука для получения оповещения о предстоящем обновлении минорной версии DKP.
Кроме того, оповещения формируются не только при обновлении DKP, но и при обновлении любых модулей, включая их отдельные обновления. В отдельных случаях система может инициировать отправку нескольких оповещений одновременно (по 10–20 оповещений) с интервалом около 15 секунд.
Оповещения доступны только в режиме обновлений Auto
, в режиме Manual
они не формируются.
Вебхук указывать не обязательно: если параметр update.notification.webhook
не задан, но указано время в параметре update.notification.minimalNotificationTime
, применение новой версии всё равно будет отложено на указанный период. В этом случае оповещением о появлении новой версии можно считать появление в кластере ресурса DeckhouseRelease с именем новой версии.
После появления новой минорной версии DKP на используемом канале обновлений, но до момента её применения в кластере, на указанный адрес вебхука будет выполнен POST-запрос.
Параметр minimalNotificationTime позволяет отложить установку обновления на заданный период, обеспечивая время для реакции на оповещение с учётом окон обновлений. Если при этом вебхук недоступен, каждая неудачная попытка отправки будет сдвигать время применения на ту же величину, что может привести к бесконечному откладыванию обновления.
Если ваш вебхук возвращает любой код вне диапазона 2хх, DKP повторяет отправку уведомления до пяти раз с экспоненциальной задержкой между попытками. Если все попытки окажутся неуспешными, выпуск блокируется до восстановления доступности вебхука.
Для удобной обработки ошибок и отладки при возврате кодов ошибок вебхук должен возвращать JSON-ответ следующей структуры:
code
— необязательный внутренний код ошибки для программной обработки;message
— человекочитаемое описание того, что пошло не так.
Если вебхук возвращает успешный статус HTTP (2xx), DKP считает уведомление успешным вне зависимости от содержимого ответа.
Поддерживаемые параметры
update.notification.webhook
— URL-адрес для отправки уведомлений. POST-запрос с информацией об обновлении отправляется сразу после появления новой минорной версии на используемом канале обновлений, но до установки обновления в кластере.update.notification.auth
— параметры аутентификации при вызове вебхука. Если параметр не указан, аутентификация не используется.update.notification.auth.basic
— базовый вариант аутентификации. Имя пользователя и пароль передаются в заголовкеAuthorization
в форматеBasic <base64(username:password)>
.update.notification.auth.basic.username
— имя пользователя.update.notification.auth.basic.password
— пароль.
update.notification.auth.bearerToken
— аутентификация с использованием токена. Токен передаётся в заголовкеAuthorization
в форматеBearer <token>
.
update.notification.minimalNotificationTime
— минимальный интервал между появлением новой минорной версии на используемом канале обновлений и началом обновления. Указывается в часах и минутах:30m
,1h
,2h30m
,24h
. Если настроено окно обновлений, то сначала учитывается интервалminimalNotificationTime
, после чего произойдёт установка обновления, но только в рамках заданного окна.update.notification.tlsSkipVerify
— отключение проверки TLS-сертификата при вызове вебхука (например, если используется самоподписанный сертификат). По умолчаниюfalse
.
Пример настройки update.notification
с базовой аутентификацией:
update:
notification:
webhook: https://release-webhook.mydomain.com
minimalNotificationTime: 4h
auth:
basic:
username: myusername
password: mypassword
tlsSkipVerify: true
Пример настройки update.notification
без аутентификации:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: deckhouse
spec:
version: 1
settings:
update:
releaseChannel: Stable
mode: Auto
notification:
webhook: https://release-webhook.mydomain.com
minimalNotificationTime: 8h
Формат уведомлений
При выполнении условий отправки уведомления
DKP отправляет на указанный вебхук POST-запрос с заголовком Content-Type: application/json
.
Пример тела запроса:
{
"version": "1.68",
"requirements": {"k8s": "1.29.0"},
"changelogLink": "https://github.com/deckhouse/deckhouse/blob/main/CHANGELOG/CHANGELOG-v1.68.md",
"applyTime": "2025-02-01T14:30:00Z00:00",
"message": "New Deckhouse Release 1.68 is available. Release will be applied at: Wednesday, 05-Feb-25 14:30:00 UTC"
}
Описание полей в формате уведомлений:
version
— номер минорной версии (строка);requirements
— объект с требованиями к новой версии (например, минимальная версия Kubernetes);changelogLink
— ссылка на changelog с описанием изменений в новой минорной версии;applyTime
— дата и время планируемого обновления в формате RFC3339. Учитывает заданные окна обновлений;message
— короткое текстовое уведомление о доступной минорной версии и запланированном времени её установки.