Облако
Публикация приложения в Managed Kubernetes
Установка и использование kube-prometheus-stack
kube-prometheus-stack — это комплексное решение для мониторинга кластера Kubernetes. Один Helm-чарт разворачивает полный стек: Prometheus для сбора метрик, Grafana для визуализации и Alertmanager для управления оповещениями. В комплект входят готовые дашборды и правила алертинга для всех компонентов кластера.
В Managed Kubernetes может быть предустановлен Metrics Server, который предоставляет resource metrics для kubectl top и autoscaling. После установки kube-prometheus-stack в кластер также разворачивается kube-state-metrics, который экспортирует метрики состояния объектов Kubernetes, например Pod, Deployment, Namespace и других ресурсов.
В Managed Kubernetes от EdgeCenter Metrics Server уже предустановлен.
Дополнительно стек развернёт Node Exporter для сбора детальных метрик нод (CPU, память, диск, сеть), и вы получите дашборды с данными о кластере сразу после установки.
Основные сценарии использования:
- мониторинг CPU, памяти, диска и сети по нодам и подам
- отслеживание состояния системных компонентов кластера (Cilium, CSI Driver, CoreDNS)
- настройка оповещений при деградации сервисов
- визуализация метрик пользовательских приложений
Что входит в стек
kube-prometheus-stack устанавливает несколько компонентов:
Prometheus Operator — управляет экземплярами Prometheus через CRD (Custom Resource Definitions)
Prometheus — собирает и хранит метрики в формате временных рядов (time series)
Grafana — веб-интерфейс для визуализации метрик с готовыми дашбордами
Alertmanager — маршрутизация и отправка оповещений (email, Slack, webhook)
kube-state-metrics — генерирует метрики о состоянии объектов Kubernetes (Deployments, Pods, PVC)
Node Exporter — собирает системные метрики с каждой ноды (CPU, память, диск, сеть). Разворачивается как DaemonSet на всех worker-нодах
Требования
Перед началом установки убедитесь, что выполнены следующие условия:
- Кластер Managed Kubernetes создан и доступен (см. также «Создать кластер Managed Kubernetes»)
- kubectl установлен и настроен для подключения к вашему кластеру MKaaS (см. также «Подключиться к кластеру Managed Kubernetes»)
- Helm 3.x установлен (менеджер пакетов для Kubernetes)
- У вашей учётной записи есть роль mkaas admin или mkaas editor — для создания пространств имён, CRD и развёртываний в кластере
- Для тестового стенда рекомендуется минимум 2 vCPU и 4 ГБ RAM на worker-ноду, однако для production-нагрузки требования зависят от числа нод, объёма метрик и срока хранения данных.
Подготовительные шаги
Шаг 1. Подключитесь к кластеру
Если вы ещё не настроили подключение, скачайте конфигурационный файл кластера из личного кабинета EdgeCenter и настройте kubectl.
Проверьте доступность кластера:
kubectl cluster-info
Ожидаемый результат:
Kubernetes control plane is running at https://<IP-адрес кластера>
Шаг 2. Убедитесь, что предустановленные компоненты работают
Проверьте, что Metrics Server запущен:
kubectl get pods -n kube-system | grep metrics-server
Вы должны увидеть под в статусе Running. Metrics Server уже собирает метрики потребления ресурсов — Prometheus подключится к нему автоматически.
Проверьте, что CSI Driver работает и StorageClass доступны:
kubectl get storageclass
Ожидаемый результат:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ec-csi-standard (default) csi.edgecenter.org Delete Immediate true 5d
ec-csi-hiiops csi.edgecenter.org Delete Immediate true 5d
Prometheus будет хранить данные на PersistentVolume, создаваемом через CSI Driver EdgeCenter.
Установка kube-prometheus-stack
Шаг 1. Добавьте Helm-репозиторий
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
Шаг 2. Создайте файл конфигурации
Создайте файл prometheus-values.yaml со следующим содержимым:
# Prometheus — хранение данных на PersistentVolume EdgeCenter
prometheus:
prometheusSpec:
retention: 15d
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: ec-csi-standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
# Grafana — доступ через LoadBalancer
grafana:
adminPassword: "<ВАШ_ПАРОЛЬ_GRAFANA>"
service:
type: LoadBalancer
# Alertmanager — хранение на PersistentVolume
alertmanager:
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
storageClassName: ec-csi-standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2GiЗамените <ВАШ_ПАРОЛЬ_GRAFANA> на надёжный пароль для входа в Grafana.
Пояснение ключевых параметров:
- storageClassName: ec-csi-standard — CSI Driver EdgeCenter автоматически создаст облачный диск для данных Prometheus и Alertmanager. Для высокопроизводительных нагрузок используйте ec-csi-hiiops.
- retention: 15d — срок хранения метрик (15 дней). Увеличьте для долгосрочного анализа, но учтите рост занятого пространства.
- grafana.service.type: LoadBalancer — CCM EdgeCenter назначит внешний IP для доступа к Grafana из браузера.
Примечание: Node Exporter и kube-state-metrics устанавливаются с настройками по умолчанию. Node Exporter разворачивается как DaemonSet и автоматически собирает метрики со всех worker-нод.
Шаг 3. Установите стек через Helm
helm upgrade --install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
-f prometheus-values.yamlУстановка занимает 2–5 минут.
Шаг 4. Проверьте установку
Убедитесь, что все компоненты запустились:
kubectl -n monitoring get podsОжидаемый результат (имена подов могут отличаться):
NAME READY STATUS RESTARTS AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 3m
prometheus-grafana-5f6f977d84-tztzv 3/3 Running 0 3m
prometheus-kube-prometheus-operator-7bd668d88d-v7v9h 1/1 Running 0 3m
prometheus-kube-state-metrics-6d5d68b8cb-8b9zm 1/1 Running 0 3m
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 3m
prometheus-prometheus-node-exporter-abc12 1/1 Running 0 3m
prometheus-prometheus-node-exporter-def34 1/1 Running 0 3mВсе поды должны быть в статусе Running. Поды node-exporter разворачиваются на каждой worker-ноде — их количество соответствует числу нод в кластере.
Проверьте, что PersistentVolumeClaim созданы и привязаны:
kubectl -n monitoring get pvcОжидаемый результат:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
prometheus-prometheus-prometheus-kube-prometheus-prometheus-db-...-0 Bound pvc-abc123 10Gi RWO ec-csi-standard 3m
alertmanager-prometheus-kube-prometheus-alertmanager-db-...-0 Bound pvc-def456 2Gi RWO ec-csi-standard 3mСтатус Bound подтверждает, что CSI Driver EdgeCenter автоматически создал облачные диски.
Доступ к Grafana
Получение внешнего IP
Так как в конфигурации указан service.type: LoadBalancer, CCM EdgeCenter автоматически назначает внешний IP:
kubectl -n monitoring get svc prometheus-grafanaОжидаемый результат:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-grafana LoadBalancer 10.222.45.67 185.12.34.56 80:31234/TCP 5mОткройте в браузере: http://<EXTERNAL-IP>
Войдите с учётными данными:
- логин: admin
- пароль: значение, указанное в grafana.adminPassword
Через port-forward (альтернативный способ)
Если LoadBalancer не используется:
kubectl port-forward svc/prometheus-grafana -n monitoring 3000:80Откройте: http://localhost:3000
Обзор готовых дашбордов
После установки Grafana содержит десятки готовых дашбордов. Откройте меню Dashboards в Grafana и изучите наиболее полезные.
Kubernetes / Compute Resources / Cluster — обзор всего кластера: суммарное потребление CPU и памяти, потребление по пространствам имён.
Kubernetes / Compute Resources / Node (Pods) — детализация по конкретной ноде: какие поды потребляют ресурсы, загрузка CPU и памяти.
Kubernetes / Networking / Cluster — сетевой трафик между подами и сервисами. Показывает пропускную способность и ошибки на уровне кластера.
Kubernetes / Persistent Volumes — состояние PersistentVolumeClaim: занятость дисков, использование пространства. Показывает состояние облачных дисков, созданных через CSI Driver EdgeCenter.
Node Exporter / Nodes — детальные метрики нод: CPU, память, дисковый ввод-вывод, сетевой трафик. Данные собираются Node Exporter, развёрнутым в составе стека.
Доступ к Prometheus UI
Prometheus UI полезен для ручного выполнения PromQL-запросов и проверки targets.
kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n monitoring 9090:9090Откройте: http://localhost:9090
Примеры запросов:
Загрузка CPU по нодам (в процентах):
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)Использование памяти по нодам:
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytesКоличество подов по пространствам имён:
count by(namespace) (kube_pod_info)Свободное место на PersistentVolume (в процентах):
100 * kubelet_volume_stats_available_bytes / kubelet_volume_stats_capacity_bytesНастройка оповещений
kube-prometheus-stack включает готовые правила алертинга для типичных проблем: под в CrashLoopBackOff, нода NotReady, PVC заполнен более чем на 85% и другие.
Просмотрите текущие правила:
kubectl -n monitoring get prometheusrulesДля отправки оповещений настройте Alertmanager. Пример конфигурации для отправки в Slack — обновите prometheus-values.yaml, добавив секцию:
alertmanager:
config:
route:
receiver: slack
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receivers:
- name: slack
slack_configs:
- api_url: "<URL_SLACK_WEBHOOK>"
channel: "#alerts"
send_resolved: true
title: '{{ '{' }}{{ '{' }} .GroupLabels.alertname {{ '}' }}{{ '}' }}'
text: '{{ '{' }}{{ '{' }} range .Alerts {{ '}' }}{{ '}' }}{{ '{' }}{{ '{' }} .Annotations.description {{ '}' }}{{ '}' }}{{ '{' }}{{ '{' }} end {{ '}' }}{{ '}' }}'Примените обновление:
helm upgrade prometheus prometheus-community/kube-prometheus-stack \ --namespace monitoring \ -f prometheus-values.yaml
Мониторинг собственных приложений
Для мониторинга ваших сервисов создайте ресурс ServiceMonitor. Prometheus Operator автоматически подхватит его.
Пример: ваше приложение экспортирует метрики на порту 8080 по пути /metrics.
Создайте файл my-app-servicemonitor.yaml:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app-monitor
namespace: default
labels:
release: prometheus
spec:
selector:
matchLabels:
app: my-app
endpoints:
- port: http-metrics
interval: 30s
path: /metricsПримените:
kubectl apply -f my-app-servicemonitor.yamlЧерез 30–60 секунд Prometheus начнёт собирать метрики вашего приложения. Проверьте в Prometheus UI → Status → Targets.
Важно: лейбл release: prometheus должен совпадать с именем Helm-релиза. Если вы использовали другое имя при helm install, укажите его.
Удаление ресурсов
Удалите стек мониторинга:
helm uninstall prometheus --namespace monitoringУдалите PVC с данными (если они больше не нужны):
kubectl -n monitoring delete pvc --allУдалите пространство имён:
kubectl delete namespace monitoringПримечание: при удалении через Helm CRD (CustomResourceDefinitions) Prometheus Operator сохраняются в кластере. Чтобы удалить их полностью:
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com alertmanagers.monitoring.coreos.com \
podmonitors.monitoring.coreos.com probes.monitoring.coreos.com prometheusagents.monitoring.coreos.com \
prometheuses.monitoring.coreos.com prometheusrules.monitoring.coreos.com \
scrapeconfigs.monitoring.coreos.com servicemonitors.monitoring.coreos.com \
thanosrulers.monitoring.coreos.comВажно: удаление PVC приведёт к удалению облачных дисков EdgeCenter и безвозвратной потере данных метрик. Если вам нужно сохранить данные, создайте VolumeSnapshot перед удалением:
kubectl apply -f - <<EOF
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: prometheus-data-snapshot
namespace: monitoring
spec:
volumeSnapshotClassName: ec-csi-snapshot-class
source:
persistentVolumeClaimName: <имя-PVC-prometheus>
EOF