Flux CD — это набор инструментов для GitOps в Kubernetes. Он следит за Git-репозиторием и автоматически приводит состояние кластера в соответствие с описанными в нём манифестами и Helm-чартами. Flux работает как контроллер внутри кластера: подтягивает изменения из Git, применяет их через Kubernetes API и отслеживает статус каждого ресурса. Проект является graduated-проектом CNCF.
Когда вы впервые поднимаете GitOps в Kubernetes, Flux CD кажется достаточным: flux bootstrap, манифесты в Git, контроллеры тянут состояние кластера.
Но лучше перейти на Flux Operator:
-
Декларативный дистрибутив — версия, реестр образов и состав контроллеров в FluxInstance вместо ручного сопровождения манифестов
gotk-components. -
Единая синхронизация с Git —
FluxInstance.spec.syncвместо разрозненной ручной сборки нескольких объектов. -
Обновления и откат через Git — с тем же аудитом и ревью, что и для приложений.
-
Наблюдаемость — отчёты, метрики и Status Page, не только
flux getв CLI. -
Привычный GitOps —
GitRepository,Kustomization,HelmReleaseостаются; меняется способ установки и жизненного цикла самого Flux.
Здесь зафиксирован путь от классического bootstrap к Flux Operator (FluxInstance) и FluxCD Status Page.
Часть 1. Классический Flux: bootstrap и приложения
Предварительные условия
-
Чистый кластер Kubernetes.
-
Flux CLI — Installing the Flux CLI. Проверка:
flux version --client. -
Доступ к Git-репозиторию для
flux bootstrap; при необходимости — PAT (см. ниже).
GitHub Personal Access Token для bootstrap
Для flux bootstrap github токен передаётся через GITHUB_TOKEN или вводится в интерактиве.
-
Repository access — только нужный репозиторий (например
fluxcd-operator-and-status-page). -
Permissions: Contents — Read and write; Metadata — Read-only; Administration — Read-only.
С флагом --token-auth Flux сохраняет PAT в Secret в кластере; для PAT достаточно Administration → Read-only.
Команда bootstrap
Запустите bootstrap из любой машины с установленным Flux CLI и доступом к кластеру. Команда создаст в репозитории директорию base/flux-system/ с манифестами контроллеров (gotk-components.yaml) и синхронизации (gotk-sync.yaml), а также закоммитит их в ветку main.
flux bootstrap github \ --token-auth \ --owner=patsevanton \ --repository=fluxcd-operator-and-status-page \ --branch=main \ --path=base
Фрагмент типичного вывода:
Please enter your GitHub personal access token (PAT):► connecting to github.com► cloning branch "main" from Git repository "https://github.com/patsevanton/fluxcd-operator-and-status-page.git"✔ cloned repository...✔ all components are healthy
После bootstrap обновите локальную копию репозитория, чтобы подтянуть созданные файлы:
git pull
Проверка после bootstrap
Flux уже синхронизирует ваши приложения. Показать состояние всех ресурсов FluxCD:
flux get all -A
Команда ниже фильтрует вывод, оставляя только ресурсы с проблемами. Видно, что broken-demo сломан — он нужен для тестирования алертов FluxCD:
flux get all -A | grep -v "succeeded" | grep -v Applied | grep -v pulled | grep -v "stored artifact" | grep -v ReadyNAMESPACE NAME REVISION SUSPENDEDREADYMESSAGE NAMESPACE NAME REVISION SUSPENDEDREADYMESSAGE NAMESPACE NAME REVISIONSUSPENDEDREADYMESSAGE NAMESPACE NAME REVISIONSUSPENDEDREADYMESSAGE NAMESPACE NAME REVISION SUSPENDEDREADYMESSAGE flux-systemkustomization/broken-demo False FalseHelmRelease/broken-demo/broken-demo dry-run failed (Invalid): HelmRelease.helm.toolkit.fluxcd.io "broken-demo" is invalid: [spec.chart.spec.sourceRef.kind: Unsupported value: "OCIRepository": supported values: "HelmRepository", "GitRepository", "Bucket", <nil>: Invalid value: "null": some validation rules were not checked because the object was invalid; correct the existing errors to complete validation] Namespace/broken-demo created
Проверить HelmReleases отдельно:
flux get helmreleases -n flux-systemNAME REVISIONSUSPENDEDREADYMESSAGE prometheus-operator-crds28.0.1 False True Helm install succeeded for release flux-system/prometheus-operator-crds.v1 with chart prometheus-operator-crds@28.0.1vmks 0.74.1 False True Helm upgrade succeeded for release vmks/vmks.v2 with chart victoria-metrics-k8s-stack@0.74.1
Проверить Kustomization’ы:
flux get kustomizations -ANAMESPACE NAME REVISION SUSPENDEDREADYMESSAGE flux-systembroken-demo False FalseHelmRelease/broken-demo/broken-demo dry-run failed (Invalid): HelmRelease.helm.toolkit.fluxcd.io "broken-demo" is invalid: [spec.chart.spec.sourceRef.kind: Unsupported value: "OCIRepository": supported values: "HelmRepository", "GitRepository", "Bucket", <nil>: Invalid value: "null": some validation rules were not checked because the object was invalid; correct the existing errors to complete validation] flux-systemflux-system main@sha1:05119ed0False True Applied revision: main@sha1:05119ed0 flux-systemprometheus-crds main@sha1:05119ed0False True Applied revision: main@sha1:05119ed0 flux-systemvictoria-metricsmain@sha1:05119ed0False True Applied revision: main@sha1:05119ed0
Часть 2. Переход на Flux Operator
Установка Flux Operator
Для установки Flux Operator выполните шаги ниже вручную из корня репозитория.
Создайте директорию для манифестов оператора:
mkdir -p apps/flux-operator
Добавьте Kustomization для flux-operator в конец файла base/apps.yaml (существующие записи victoria-metrics, broken-demo, prometheus-crds останутся на месте):
cat <<'EOF' >> base/apps.yaml---apiVersion: kustomize.toolkit.fluxcd.io/v1kind: Kustomizationmetadata: name: flux-operator namespace: flux-systemspec: interval: 10m sourceRef: kind: GitRepository name: flux-system serviceAccountName: kustomize-controller path: ./apps/flux-operator prune: true wait: true timeout: 10mEOF
Создайте HelmRepository для OCI-чарта ControlPlane:
cat <<'EOF' > apps/flux-operator/sources.yamlapiVersion: source.toolkit.fluxcd.io/v1kind: HelmRepositorymetadata: name: cp-flux-operator namespace: flux-systemspec: interval: 24h type: oci url: oci://ghcr.io/controlplaneio-fluxcd/chartsEOF
Создайте HelmRelease оператора. Обратите внимание на секцию web — она включает Status Page и настраивает Ingress:
cat <<'EOF' > apps/flux-operator/helmrelease.yamlapiVersion: helm.toolkit.fluxcd.io/v2kind: HelmReleasemetadata: name: flux-operator namespace: flux-systemspec: interval: 30m timeout: 10m chart: spec: chart: flux-operator version: "0.47.0" sourceRef: kind: HelmRepository name: cp-flux-operator namespace: flux-system interval: 30m releaseName: flux-operator values: web: enabled: true config: baseURL: http://flux.apatsev.org.ru/ ingress: enabled: true className: nginx hosts: - host: flux.apatsev.org.ru paths: - path: / pathType: PrefixEOF
Закоммитьте изменения и отправьте в удалённый репозиторий:
git add .git commit -m "Add flux-operator manifests"git push
Дождитесь, пока Flux синхронизирует новую Kustomization и установит оператор:
flux get kustomizations -n flux-system | grep flux-operatorflux-operator main@sha1:e23386eaFalse True Applied revision: main@sha1:e23386ea
Проверить, что HelmRelease оператора установлен:
flux get helmreleases -n flux-system | grep flux-operatorflux-operator 0.47.0 False True Helm install succeeded for release flux-system/flux-operator.v1 with chart flux-operator@0.47.0
Создание FluxInstance
После установки Flux Operator файл base/flux-system/kustomization.yaml (созданный flux bootstrap) продолжает ссылаться на gotk-components.yaml и gotk-sync.yaml, поэтому Flux всё ещё управляется классическим bootstrap.
Чтобы перейти на управление через оператор, создайте FluxInstance. Этот ресурс описывает оператору, какую версию Flux развернуть, какие контроллеры включить и с какого Git-репозитория синхронизировать манифесты.
Важно понимать порядок переключения: сначала создаётся FluxInstance, оператор берёт управление Flux на себя, и только затем удаляются старые файлы bootstrap. Попытка удалить gotk-* до создания FluxInstance приведёт к потере управления кластером.
Создайте файл FluxInstance:
mkdir -p base/flux-systemcat <<'EOF' > base/flux-system/flux-instance.yamlapiVersion: fluxcd.controlplane.io/v1kind: FluxInstancemetadata: name: flux namespace: flux-systemspec: distribution: version: "2.8.x" registry: "ghcr.io/fluxcd" components: - source-controller - kustomize-controller - helm-controller - notification-controller sync: kind: GitRepository url: "https://github.com/patsevanton/fluxcd-operator-and-status-page.git" ref: "refs/heads/main" path: "./base"EOF
Примените FluxInstance напрямую через kubectl, чтобы оператор сразу начал управлять Flux:
kubectl apply -f base/flux-system/flux-instance.yaml
После применения FluxInstance оператор начинает управлять жизненным циклом Flux: создаёт контроллеры, настраивает синхронизацию и выпускает FluxReport.
Проверка миграции
Проверить статус FluxInstance:
kubectl -n flux-system get fluxinstance fluxNAME AGE READY STATUS REVISIONflux 2m21s True Reconciliation finished in 19s v2.8.5@sha256:df269637e1cbd79f25263d77f754ec782afb780ad197f4732771f661ceb73f3f
Убедиться, что контроллеры запущены (включая оператор):
kubectl -n flux-system get podsNAME READY STATUS RESTARTS AGEflux-operator-64bbc44d7c-v87fj 1/1 Running 0 40mhelm-controller-65ff4c7c98-fvjg9 1/1 Running 0 2m20skustomize-controller-59fc467858-mhsbz 1/1 Running 0 2m20snotification-controller-6d66bb7797-7wp5r 1/1 Running 0 2m20ssource-controller-7846484bbc-6rfg5 1/1 Running 0 2m19s
Очистка репозитория после миграции
Полный переход на Flux Operator фиксируется удалением файлов классического bootstrap и обновлением base/flux-system/kustomization.yaml так, чтобы он ссылался только на flux-instance.yaml.
Подробнее: Flux Bootstrap Migration.
Удалите артефакты классического bootstrap:
rm base/flux-system/gotk-components.yamlrm base/flux-system/gotk-sync.yaml
Пересоздайте base/flux-system/kustomization.yaml, чтобы он включал только flux-instance.yaml:
cat <<'EOF' > base/flux-system/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources:- flux-instance.yamlEOF
Добавьте все изменения в индекс:
git add .
Закоммитьте и отправьте в удалённый репозиторий:
git commit -m "Moved Flux resources"git push
Часть 3. FluxCD Status Page
После установки Flux Operator в игру входят FluxReport, события по FluxInstance и метрики Prometheus.
Демо-интерфейс: http://flux.apatsev.org.ru/.
Скриншоты
Главная страница — верхний блок (overview)
Сводка состояния Flux компонентов на главной странице.
Главная страница — блок Flux Reconcilers
Статусы контроллеров и reconciler-ов Flux.
Resources — failed state
Пример экрана с ошибками в ресурсах.
Events — список событий Flux
Экран с лентой событий Flux и фильтрами по namespace, kind и severity.
FluxReport
Ресурс FluxReport flux в flux-system (обновление по умолчанию раз в 5 минут):
kubectl -n flux-system get fluxreport flux -o yaml
Пример вывода (фрагмент):
apiVersion: fluxcd.controlplane.io/v1kind: FluxReportmetadata: annotations: reconcile.fluxcd.io/requestedAt: "1777814067" creationTimestamp: "2026-05-03T12:18:48Z" generation: 7 name: flux namespace: flux-system resourceVersion: "46482" uid: fe113d16-e144-433b-a666-53a94a042b5cspec: cluster: nodes: 3 platform: linux/amd64 serverVersion: v1.32.1 components: - image: ghcr.io/fluxcd/helm-controller:v1.5.3@sha256:b150af0cd7a501dafe2374b1d22c39abf0572465df4fa1fb99b37927b0d95d75 name: helm-controller ready: true
События
Посмотреть события, связанные с FluxInstance:
kubectl -n flux-system get events --for fluxinstance/fluxLAST SEEN TYPE REASON OBJECT MESSAGE43m Normal ReconciliationSucceeded FluxInstance/flux Reconciliation finished in 2s
Уведомления (Slack, Teams и др.) можно настроить через notification-controller и CRD Provider/Alert. Подробнее: Provider/Alert.
Уведомления Flux в Alertmanager
Создайте директорию для ресурсов Flux:
mkdir -p apps/flux-resources
Создайте файл с Provider и Alert для пересылки событий Flux в Alertmanager:
cat <<'EOF' > apps/flux-resources/flux-notifications.yaml# Flux notification-controller → Prometheus Alertmanager (VMAlertmanager из victoria-metrics-k8s-stack).# События с severity error попадают в Alertmanager; Grafana их видит через datasource Alertmanager.---apiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Providermetadata: name: alertmanager namespace: flux-systemspec: type: alertmanager # VMAlertmanager CR: vmks-victoria-metrics-k8s-stack (release vmks, chart victoria-metrics-k8s-stack), ns vmks address: http://vmalertmanager-vmks-victoria-metrics-k8s-stack.vmks.svc.cluster.local:9093/api/v2/alerts---apiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Alertmetadata: name: flux-to-alertmanager namespace: flux-systemspec: providerRef: name: alertmanager eventSeverity: error eventSources: - kind: GitRepository name: "*" - kind: OCIRepository name: "*" - kind: HelmRepository name: "*" - kind: HelmChart name: "*" - kind: HelmRelease name: "*" - kind: Kustomization name: "*"EOF
Добавьте Kustomization для flux-resources в base/apps.yaml:
cat <<'EOF' >> base/apps.yaml---apiVersion: kustomize.toolkit.fluxcd.io/v1kind: Kustomizationmetadata: name: flux-resources namespace: flux-systemspec: interval: 10m sourceRef: kind: GitRepository name: flux-system serviceAccountName: kustomize-controller path: ./apps/flux-resources prune: true wait: true timeout: 5mEOF
Создайте kustomization.yaml для явного перечисления ресурсов в директории:
cat <<'EOF' > apps/flux-resources/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources:- flux-notifications.yamlEOF
Закоммитьте изменения и отправьте в удалённый репозиторий:
git add .git commit -m "Add Flux Alertmanager notifications"git push
Манифест создаёт в flux-system:
-
Provideralertmanager— типalertmanager, адрес HTTP API VMAlertmanager из VictoriaMetrics K8s Stack (в манифесте задан сервис релизаvmks-victoria-metrics-k8s-stackв namespacevmks). -
Alertflux-to-alertmanager— события с severityerrorот перечисленных источников (GitRepository,OCIRepository,HelmRepository,HelmChart,HelmRelease,Kustomization) отправляются в этот провайдер.
Нужны работающие notification-controller (в FluxInstance он в spec.components) и VMAlertmanager по адресу из Provider.spec.address, иначе доставка алертов не состоится.
Проверка, что манифест применился
Убедитесь, что корневая синхронизация подтянула ревизию с этим файлом:
flux get kustomizations -n flux-system flux-system
Проверить, что объект Provider создан:
kubectl get providers.notification.toolkit.fluxcd.io -n flux-systemNAME AGEalertmanager 23s
Проверить, что объект Alert создан:
kubectl get alerts.notification.toolkit.fluxcd.io -n flux-systemNAME AGEflux-to-alertmanager 29s
Детали и статус объекта Provider:
kubectl -n flux-system get provider alertmanager -o yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Providermetadata: creationTimestamp: "2026-05-03T14:09:46Z" finalizers: - finalizers.fluxcd.io generation: 1 labels: kustomize.toolkit.fluxcd.io/name: flux-resources kustomize.toolkit.fluxcd.io/namespace: flux-system name: alertmanager namespace: flux-system resourceVersion: "52687" uid: 311becb0-ea11-454f-859b-0f76585bbbc0spec: address: http://vmalertmanager-vmks-victoria-metrics-k8s-stack.vmks.svc.cluster.local:9093/api/v2/alerts type: alertmanager
Детали и статус объекта Alert:
kubectl -n flux-system get alert flux-to-alertmanager -o yamlapiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Alertmetadata: creationTimestamp: "2026-05-03T14:09:46Z" generation: 1 labels: kustomize.toolkit.fluxcd.io/name: flux-resources kustomize.toolkit.fluxcd.io/namespace: flux-system name: flux-to-alertmanager namespace: flux-system resourceVersion: "52685" uid: c49e6233-63f0-499e-8293-db2be1838c5fspec: eventSeverity: error eventSources: - kind: GitRepository name: '*' - kind: OCIRepository name: '*' - kind: HelmRepository name: '*' - kind: HelmChart name: '*' - kind: HelmRelease name: '*' - kind: Kustomization name: '*' providerRef: name: alertmanager
Локально проверить, что объекты попадают в сборку kustomize:
kubectl kustomize apps/flux-resources | grep -E 'kind: (Provider|Alert)|name: (alertmanager|flux-to-alertmanager)'kind: Alert name: flux-to-alertmanager name: alertmanagerkind: Provider name: alertmanager
Метрики
Контроллеры Flux экспонируют Prometheus-совместимые метрики на порту http-prom — счётчики и гистограммы реконсиляций, задержек обработки артефактов, очередей и ошибок. Без сбора этих метрик невозможно:
-
визуализировать здоровье контроллеров и длину очередей реконсиляции в Grafana,
-
строить алерты на рост длительности реконсиляции или частоту ошибок (см. Alertmanager выше),
-
отслеживать тренды использования ресурсов и планировать масштабирование.
PodMonitor — ресурс Prometheus Operator (CRD monitoring.coreos.com/v1), который говорит vmagent / Prometheus, какие поды скрейпить и на каком порту. В отличие от ServiceMonitor, PodMonitor выбирает поды напрямую по лейблам — удобно, когда у контроллеров нет отдельного Service с нужными портами.
Создайте PodMonitor для сбора метрик со всех Flux-контроллеров:
cat <<'EOF' > apps/flux-resources/podmonitor.yamlapiVersion: monitoring.coreos.com/v1kind: PodMonitormetadata: name: flux-system namespace: flux-system labels: app.kubernetes.io/part-of: flux app.kubernetes.io/component: monitoringspec: namespaceSelector: matchNames: - flux-system selector: matchExpressions: - key: app operator: In values: - helm-controller - source-controller - kustomize-controller - notification-controller - image-automation-controller - image-reflector-controller podMetricsEndpoints: - port: http-promEOF
Обновите apps/flux-resources/kustomization.yaml, чтобы подключить оба ресурса:
cat <<'EOF' > apps/flux-resources/kustomization.yamlapiVersion: kustomize.config.k8s.io/v1beta1kind: Kustomizationresources:- flux-notifications.yaml- podmonitor.yamlEOF
Закоммитьте изменения и отправьте в удалённый репозиторий:
git add .git commit -m "Added PodMonitor for Flux"git push
Проверка PodMonitor и метрик
Убедитесь, что Kustomization flux-resources подтянула ревизию с podmonitor.yaml:
flux get kustomizations -n flux-system flux-resourcesNAME REVISION SUSPENDEDREADYMESSAGE flux-resourcesrefs/heads/main@sha1:429293c9False True Applied revision: refs/heads/main@sha1:429293c9
Посмотреть события Kustomization (в стандартном flux нет подкоманды describe):
kubectl get events -n flux-system --field-selector involvedObject.name=flux-resources --sort-by='.lastTimestamp'LAST SEEN TYPE REASON OBJECT MESSAGE5m46s Normal Progressing kustomization/flux-resources Alert/flux-system/flux-to-alertmanager created...5m46s Normal Progressing kustomization/flux-resources Health check passed in 32.876003ms5m46s Normal ReconciliationSucceeded kustomization/flux-resources Reconciliation finished in 204.558291ms, next run in 10m0s101s Normal ReconciliationSucceeded kustomization/flux-resources Reconciliation finished in 241.056785ms, next run in 10m0s38s Normal Progressing kustomization/flux-resources PodMonitor/flux-system/flux-system created38s Normal Progressing kustomization/flux-resources Health check passed in 100.046212ms37s Normal ReconciliationSucceeded kustomization/flux-resources Reconciliation finished in 334.747203ms, next run in 10m0s
Проверить объект PodMonitor в кластере. Ресурс должен быть в namespace flux-system — без metadata.namespace Flux при применении выдаст ошибку PodMonitor/... namespace not specified:
kubectl get podmonitor -n flux-systemNAME AGEflux-system 84s
Детали объекта:
kubectl describe podmonitor flux-system -n flux-systemName: flux-systemNamespace: flux-systemLabels: app.kubernetes.io/component=monitoring app.kubernetes.io/part-of=flux kustomize.toolkit.fluxcd.io/name=flux-resources kustomize.toolkit.fluxcd.io/namespace=flux-systemAnnotations: <none>API Version: monitoring.coreos.com/v1Kind: PodMonitorMetadata: Creation Timestamp: 2026-05-03T14:14:54Z Generation: 1 Resource Version: 54801 UID: 601a63ec-4b61-4349-9096-ffc38fdc7b33Spec: Namespace Selector: Match Names: flux-system Pod Metrics Endpoints: Port: http-prom Selector: Match Expressions: Key: app Operator: In Values: helm-controller source-controller kustomize-controller notification-controller image-automation-controller image-reflector-controllerEvents: <none>
Локально проверить, что PodMonitor попадает в сборку kustomize:
kubectl kustomize apps/flux-resources | grep -E 'kind: PodMonitor|name: flux-system|namespace: flux-system|http-prom'kind: PodMonitor name: flux-system namespace: flux-system - port: http-prom namespace: flux-system namespace: flux-system
Поды Flux в flux-system и порт метрик http-prom:
kubectl get pods -n flux-system -l 'app in (helm-controller,source-controller,kustomize-controller,notification-controller,image-automation-controller,image-reflector-controller)' -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEShelm-controller-65ff4c7c98-sgtg7 1/1 Running 0 118m 10.112.130.12 cl1lo7src0ijsb1bv4i6-ehuw <none> <none>kustomize-controller-59fc467858-c8phv 1/1 Running 0 118m 10.112.129.11 cl1lo7src0ijsb1bv4i6-oban <none> <none>notification-controller-6d66bb7797-2rm5f 1/1 Running 0 118m 10.112.130.13 cl1lo7src0ijsb1bv4i6-ehuw <none> <none>source-controller-7846484bbc-j88ww 1/1 Running 0 118m 10.112.129.12 cl1lo7src0ijsb1bv4i6-oban <none> <none>
Проверить, что контроллеры экспонируют порт http-prom:
kubectl get pods -n flux-system -l app=source-controller -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{range .spec.containers[*].ports[*]}{.name}{" "}{end}{"\n"}{end}'source-controller-7846484bbc-j88wwhttp http-prom healthz
Если в кластере VictoriaMetrics K8s Stack или другой сборщик с UI, проверьте активные таргеты и наличие метрик от подов flux-system (например в Grafana Explore).
Для Prometheus Operator: serviceMonitor.create=true в values. Подробнее: Flux Monitoring and Reporting.
Устранение неполадок
|
Симптом |
Что проверить |
|---|---|
|
|
|
|
HelmRelease завис |
|
|
После миграции не применяется |
В |
|
Нет метрик Flux-контроллеров |
Проверьте, что поды экспонируют порт |
|
Status Page не открывается |
Проверьте Ingress и |
Метрики и Grafana
VictoriaMetrics K8s Stack поднимает Grafana вместе с vmagent, VMSingle и правилами алертинга.
Веб-доступ: в этом репозитории для Grafana включён Ingress — http://grafana.apatsev.org.ru (см. apps/victoria-metrics/helmrelease.yaml).
Получить пароль администратора Grafana:
kubectl get secret vmks-grafana -n vmks -o jsonpath='{.data.admin-password}' | base64 --decode; echo
Установка FluxCD dashboard в Grafana
Исходные дашборды взяты из официального репозитория flux2-monitoring-example и Grafana Dashboard ID 16714 (Flux2), адаптированы и переработаны для корректной работы с Flux 2.8+ и текущим стеком наблюдаемости.
Если метрики Flux уже собираются (через PodMonitor), дашборды начнут показывать данные сразу после импорта.
|
Дашборд |
Описание |
JSON |
|---|---|---|
|
Flux2 |
Основной дашборд для мониторинга ресурсов FluxCD (Kustomization, HelmRelease, GitRepository и др.). Адаптирован для Flux 2.8+: заменён deprecated |
|
|
Flux Cluster Stats |
Кластерная статистика Flux: распределение ресурсов по namespace, типам и статусам. |
|
|
Flux Control Plane |
Метрики control plane Flux: реконсиляции контроллеров, длительность операций, очереди и ошибки. |
Скриншоты Grafana
Flux2 Dashboard
JSON: dashboard/flux2.json
Flux Cluster Stats Dashboard
JSON: dashboard/cluster.json
Flux Control Plane Dashboard
JSON: dashboard/control-plane.json
Alertmanager Dashboard
Каждый новый коммит, который приходит в Flux через GitRepository, запускает реконсиляцию привязанных Kustomization и HelmRelease. Если реконсиляция завершается ошибкой (ReconciliationFailed), notification-controller отправляет алерт в Alertmanager. Таким образом, в Alertmanager и Grafana вы сразу видите, какой ресурс привёл к сбою.
ссылка на оригинал статьи https://habr.com/ru/articles/1030980/