<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

VictoriaMetrics Operator

VictoriaMetrics Operator — оператор для Kubernetes, для автоматизации развертывания и управления компонентами мониторинга на базе VictoriaMetrics. Он позволяет создавать и настраивать отдельные сервисы для сбора, хранения и визуализации метрик.

Оператор использует CRD для управления инфраструктурой мониторинга. Основные используемые компоненты:

  • VMSingle — компонент, отвечающий за хранение метрик. Это одиночный инстанс VictoriaMetrics. Она удобна для простых проектов и малонагруженных кластеров.
  • VMCluster — масштабируемый вариант, включающий реплику хранения и прокси. Подходит для продакшена и больших объемов данных.
  • VMAgent — компонент, который собирает метрики с подов, сервисов и других источников. Он отправляет их в VMSingle или VMCluster по remoteWrite.
  • VMPodScrape — объект, описывающий, какие поды и по каким адресам и портам нужно опрашивать для получения метрик.

Полная документация по VictoriaMetrics Operator доступна на официальном сайте дополнения.

Установка

Для установки VictoriaMetrics Operator перейдите в раздел «Дополнения» в панели управления кластером. Найдите «VictoriaMetrics Operator» в списке и нажмите на него.

Scr 20250704 Okhr

В открывшемся окне можно при необходимости изменить параметры установки — например, задать собственный неймспейс, изменить версии компонентов или отключить ненужные CRD. После настройки нажмите кнопку «Установить».

После установки в кластере появится неймспейс victoria-metrics-operator и все необходимые CRD, включая VMSingle, VMAgent, VMPodScrape и другие. Увидеть их вы можете, выполнив:

kubectl get crd | grep 'vm'

Пример использования

В примере мы:

  • Развернем VMSingle — хранилище метрик
  • Настроим VMAgent, чтобы собирать метрики из источников
  • Запустим под с Nginx и nginx-prometheus-exporter, чтобы передавать метрики
  • Создадим VMPodScrape, чтобы VMAgent собирал эти метрики
  • Настроим Ingress для доступа к веб-интерфейсу VictoriaMetrics

Помимо дополнения VictoriaMetrics Operator, для примера потребуется установленное дополнение Nginx Ingress.

Создадим компонент VMSingle, который будет принимать и хранить метрики. В примере мы зададим минимальный набор ресурсов и храним данные только в памяти в течение 1 дня. Создайте файл vmsingle.yaml со следующим содержимым:

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMSingle
metadata:
  name: vm-single
  namespace: victoria-metrics-operator
spec:
  retentionPeriod: "1"
  resources:
    requests:
      cpu: 100m
      memory: 256Mi

Если вы хотите хранить метрики дольше, стоит рассмотреть использование сетевых дисков.

Теперь создадим компонент VMAgent, который будет собирать метрики и передавать их в VMSingle. Создайте файл vmagent.yaml:

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMAgent
metadata:
  name: vmagent
  namespace: victoria-metrics-operator
spec:
  remoteWrite:
    - url: http://vmsingle-vm-single.victoria-metrics-operator:8428/api/v1/write
  scrapeInterval: 30s
  selectAllByDefault: true
  port: "8429"

Развернем под с Nginx и экспортером метрик. В качестве источника метрик используется nginx-prometheus-exporter, который будет читать данные с эндпоинта /stub_status. Создайте файл nginx.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: victoria-metrics-operator
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          ports:
            - containerPort: 80
              name: http
          volumeMounts:
            - name: nginx-conf
              mountPath: /etc/nginx/conf.d/default.conf
              subPath: default.conf
        - name: exporter
          image: nginx/nginx-prometheus-exporter:1.1.0
          args:
            - "-nginx.scrape-uri=http://localhost/stub_status"
          ports:
            - containerPort: 9113
              name: metrics
      volumes:
        - name: nginx-conf
          configMap:
            name: nginx-conf
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
  namespace: victoria-metrics-operator
data:
  default.conf: |
    server {
        listen 80;
        location / {
            return 200 'OK';
        }
        location /stub_status {
            stub_status;
            allow 127.0.0.1;
            deny all;
        }
    }
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: victoria-metrics-operator
spec:
  selector:
    app: nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: metrics
      port: 9113
      targetPort: metrics

Чтобы указать VMAgent, с каких подов собирать метрики, создадим объект VMPodScrape. Он выберет все поды с меткой app: nginx и будет опрашивать порт metrics по пути /metrics. Создайте файл vmpodscrape.yaml:

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMPodScrape
metadata:
  name: nginx-scrape
  namespace: victoria-metrics-operator
spec:
  selector:
    matchLabels:
      app: nginx
  podMetricsEndpoints:
    - port: metrics
      path: /metrics
      interval: 30s

Прежде чем создавать Ingress, убедитесь, что в кластере есть сервис с типом LoadBalancer, он необходим для доступа к UI извне. Посмотреть текущие балансировщики можно командой:

kubectl get svc -n ingress-nginx

Если балансировщик отсутствует, создайте его:

apiVersion: v1
kind: Service
metadata:
  name: nginx-loadbalancer
  namespace: ingress-nginx
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
  ports:
    - port: 80
      targetPort: 80
      appProtocol: k8s.timeweb.cloud/proto-http
  type: LoadBalancer

После создания получите внешний адрес сервиса:

kubectl get svc -n ingress-nginx nginx-loadbalancer

Укажите его как A-запись для домена, по которому будет доступен UI VictoriaMetrics.

Наконец, создадим Ingress, чтобы получить доступ к веб-интерфейсу VictoriaMetrics. Укажите в хосте нужное вам доменное имя. Создайте файл vm-ui-ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: vm-ui
  namespace: victoria-metrics-operator
spec:
  ingressClassName: nginx
  rules:
    - host: vm.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: vmsingle-vm-single
                port:
                  number: 8428

Примените все манифесты, созданные ранее:

kubectl apply -f vmsingle.yaml
kubectl apply -f vmagent.yaml
kubectl apply -f nginx.yaml
kubectl apply -f vmpodscrape.yaml
kubectl apply -f vm-ui-ingress.yaml

После этого перейдите по адресу, указанному в манифесте vm-ui-ingress.yaml. В нашем примере это http://vm.example.com. В интерфейсе выберите пункт «vmui», чтобы открыть веб-интерфейс VictoriaMetrics.

В поле «query» введите имя метрики, например up, и нажмите «Execute Query». Если все настроено правильно, вы увидите значение метрик, которые собираются с пода Nginx.

Scr 20250703 Lxom

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев