Что такое ServiceMonitor в Kubernetes?

«Что такое ServiceMonitor в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ServiceMonitor — это пользовательский ресурс Kubernetes (Custom Resource Definition, CRD), предоставляемый проектом Prometheus Operator. Он служит декларативным способом указать Prometheus, как и какие сервисы (или поды) в кластере нужно мониторить ("скрейпить"). Вместо ручного редактирования конфига prometheus.yml, вы создаете объекты ServiceMonitor, и оператор автоматически обновляет конфигурацию Prometheus.

Как это работает:

  1. Prometheus Operator развертывает StatefulSet Prometheus в кластере.
  2. Вы создаете Service my-app-svc и навешиваете на него метки (например, app: my-app).
  3. Вы создаете ServiceMonitor my-app-monitor, который через selector ищет сервисы (или эндпоинты) с определенными метками.
  4. Prometheus Operator наблюдает за ServiceMonitor, преобразует его в низкоуровневую конфигурацию для Prometheus (в формате scrape_configs), и Prometheus начинает собирать метрики с указанных эндпоинтов.

Пример манифеста ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: frontend-service-monitor
  namespace: monitoring # ServiceMonitor часто живут в отдельном namespace
spec:
  # Выбираем Service по меткам
  selector:
    matchLabels:
      app: frontend
      component: api
  # Определяем, с каких портов и путей собирать метрики
  endpoints:
  - port: http-metrics # Должен совпадать с именем порта в Service
    path: /metrics
    interval: 30s
    scheme: http
    # Дополнительные настройки, например, TLS
    tlsConfig:
      insecureSkipVerify: true # Не для production!
  # Ограничиваем пространства имен, в которых искать сервисы
  namespaceSelector:
    matchNames:
    - production
    - staging

Ключевые моменты:

  • Связка с Service: Обычно ServiceMonitor нацелен на Kubernetes Service, который предоставляет стабильную DNS-запись и балансировку нагрузки до pod-ов с метриками.
  • Гибкий selector: Можно выбирать сервисы по меткам и ограничивать поиск определенными namespace.
  • Независимость от приложения: Конфигурация мониторинга отделена от кода приложения и управляется как инфраструктура.
  • Обязательное условие: Для работы требуется установленный в кластере Prometheus Operator.