kube-prometheus-stack: полная настройка мониторинга
Published: 2026-03-18
kube-prometheus-stack — единый Helm-чарт, который разворачивает Prometheus, Alertmanager, Grafana, node-exporter, kube-state-metrics, а также стандартный набор recording rules и дашбордов. Это типовой способ поднять наблюдаемость Kubernetes одним релизом.
HelmRelease
yamlapiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: kube-prom-stack
namespace: monitoring
spec:
chart:
spec:
chart: kube-prometheus-stack
version: "65.x"
sourceRef:
kind: HelmRepository
name: prometheus-community
namespace: flux-system
values:
fullnameOverride: kube-prom-stack
prometheus:
prometheusSpec:
retention: 30d
retentionSize: 40GB
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: local-path
resources:
requests:
storage: 50Gi
serviceMonitorSelectorNilUsesHelmValues: false
podMonitorSelectorNilUsesHelmValues: false
ruleSelectorNilUsesHelmValues: false
resources:
requests:
cpu: 500m
memory: 2Gi
limits:
cpu: 2000m
memory: 4Gi
alertmanager:
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
storageClassName: local-path
resources:
requests:
storage: 5Gi
grafana:
adminPassword: "" # задаётся через secret
persistence:
enabled: true
storageClassName: local-path
size: 10Gi
grafana.ini:
server:
root_url: https://grafana.example.com
sidecar:
dashboards:
enabled: true
searchNamespace: ALL
nodeExporter:
enabled: true
kubeStateMetrics:
enabled: true
serviceMonitorSelectorNilUsesHelmValues: false — критично. Без этого Prometheus отслеживает только ServiceMonitor в своём неймспейсе. Аналогично для podMonitorSelectorNilUsesHelmValues и ruleSelectorNilUsesHelmValues.
Пароль Grafana через secret
yamlgrafana:
admin:
existingSecret: grafana-admin-secret
userKey: admin-user
passwordKey: admin-password
bashkubectl create secret generic grafana-admin-secret \
--from-literal=admin-user=admin \
--from-literal=admin-password=REDACTED \
--dry-run=client -o yaml \
| kubeseal --cert infra.pem -o yaml \
> fluxcd/custom/monitoring/grafana-admin-secret.yaml
ServiceMonitor для приложения
yamlapiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-service
namespace: app
labels:
release: kube-prom-stack # обязательно
spec:
selector:
matchLabels:
app: my-service
namespaceSelector:
matchNames:
- app
endpoints:
- port: http
path: /metrics
interval: 30s
Метка release: kube-prom-stack обязательна. Без неё Prometheus игнорирует ServiceMonitor.
Retention и настройка хранилища
При retention: 30d и retentionSize: 40GB Prometheus удаляет старые данные по достижении любого из лимитов.
Для кластера среднего размера (50 узлов, 200 подов):
- входящий поток ~10 МБ/с
- Snappy-сжатие (экономия ~70%)
- итого ~7,5 ГБ/день
- 30 дней ≈ 225 ГБ сжатых данных
50 ГБ мало для 30 дней. Уменьшите retention до 14d, увеличьте PVC или используйте remote_write в VictoriaMetrics.
Проверка работоспособности
bashkubectl port-forward -n monitoring svc/kube-prom-stack-prometheus 9090:9090
# http://localhost:9090/targets — все должны быть UP
kubectl port-forward -n monitoring svc/kube-prom-stack-alertmanager 9093:9093
# http://localhost:9093/#/status
Конфигурация Alertmanager
yamlalertmanager:
config:
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'job']
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: 'telegram'
routes:
- matchers:
- severity = "critical"
receiver: 'telegram-critical'
receivers:
- name: 'telegram'
telegram_configs:
- bot_token: "${TELEGRAM_BOT_TOKEN}"
chat_id: -123456789
message: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"