Flux Notification Controller: статус коммита, Telegram и Mattermost
Published: 2026-03-01
Flux поставляется с Notification Controller, который превращает события реконсиляции в вебхуки. Примитива два: Provider (куда отправлять) и Alert (что и когда отправлять).
Провайдеры
Статус коммита в GitLab
Ставит статус пайплайна на коммит, запустивший реконсиляцию Flux. Разработчики видят зелёный или красный бейдж прямо в MR на GitLab:
yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: gitlab-status
namespace: flux-system
spec:
type: gitlab
address: https://gitlab.example.com
secretRef:
name: gitlab-token
---
apiVersion: v1
kind: Secret
metadata:
name: gitlab-token
namespace: flux-system
stringData:
token: "${GITLAB_TOKEN}"
Токену нужен scope api на аккаунте, владеющем репозиторием. Храните в Vault и создавайте Secret через ESO.
Telegram через generic-вебхук
У Flux нет нативного провайдера Telegram, но generic отправляет JSON POST на любой URL:
yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: telegram
namespace: flux-system
spec:
type: generic
address: http://abot.observability.svc.cluster.local:9444/flux
У abot должен быть эндпоинт /flux, который принимает JSON-событие от Flux и форматирует его в HTML для Telegram.
Или используйте тип провайдера telegram с токеном бота напрямую:
yamlspec:
type: telegram
address: https://t.me/bot_token
channel: "-100123456789"
secretRef:
name: telegram-bot-token
Mattermost
yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: mattermost
namespace: flux-system
spec:
type: mattermost
address: https://chat.example.com/hooks/infra-flux-hook
Алерты
Уведомление об ошибках HelmRelease
yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: helmrelease-failures
namespace: flux-system
spec:
summary: "HelmRelease failed in dev"
providerRef:
name: telegram
eventSeverity: error
eventSources:
- kind: HelmRelease
namespace: dev
name: "*"
name: "*" — все HelmRelease в неймспейсе dev. eventSeverity: error — только неудачные реконсиляции.
Уведомление о применении Kustomization
yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: kustomization-applied
namespace: flux-system
spec:
summary: "Kustomization applied"
providerRef:
name: gitlab-status
eventSeverity: info
eventSources:
- kind: Kustomization
namespace: "*"
name: "*"
Создаёт статус коммита в GitLab на каждую реконсиляцию Kustomization. Разработчики прямо из MR видят, какой слой кластера применился.
Уведомление об автообновлении образов
yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: image-update
namespace: flux-system
spec:
summary: "Image auto-update"
providerRef:
name: telegram
eventSeverity: info
eventSources:
- kind: ImageUpdateAutomation
namespace: "*"
name: "*"
Формат event payload
json{
"involvedObject": {
"kind": "HelmRelease",
"name": "elasticsearch",
"namespace": "dev"
},
"severity": "error",
"reason": "UpgradeFailed",
"message": "Helm upgrade failed: rendered manifests contain a resource...",
"timestamp": "2026-03-01T12:34:56Z"
}
Поле message — полная ошибка Flux, тот же текст, что и в flux get helmreleases.
Организация Alert-ов по кластерам
Все Alert-ы живут в spoke/notifications/ и применяются через Kustomization spoke-кластера. У каждого окружения свои Alert-ы для своего неймспейса — ошибка в dev уходит только в dev-канал.
Отладка
bash# Логи notification controller
kubectl logs -n flux-system deploy/notification-controller -f
# Состояние провайдеров
kubectl get provider -n flux-system
# Детали алерта
kubectl describe alert helmrelease-failures -n flux-system
# Принудительный тест — запустить reconcile
flux reconcile helmrelease my-app -n dev
Если уведомления не приходят, проверьте статус Provider, HTTP-ошибки отправки вебхука в логах контроллера и eventSeverity в Alert.