Top.Mail.Ru

Облако

Публикация приложения в Managed Kubernetes

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.

Шаг 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 автоматически создал облачные диски.

Получение внешнего 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 полезен для ручного выполнения 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

Мы используем cookie, чтобы сайт стал лучше для вас.