---
title: "Аддон VictoriaMetrics Operator для Kubernetes"
description: "Аддон VictoriaMetrics Operator для Kubernetes. Установка, настройка, примеры использования. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

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

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

Полная документация по VictoriaMetrics Operator доступна [на официальном сайте](https://docs.victoriametrics.com/operator/) дополнения.

## Установка

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

![Scr 20250704 Okhr](https://content.timeweb.com/assets/24c6e10f-6731-4eee-b081-ac2ccaf7919d.png?width=2020&height=1608)

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

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

```shell
kubectl get crd | grep 'vm'
```

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

В примере мы:

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

Помимо дополнения VictoriaMetrics Operator, для примера потребуется установленное дополнение [Nginx Ingress](https://timeweb.cloud/docs/k8s/addons/nginx-ingress).

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

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

Если вы хотите хранить метрики дольше, стоит рассмотреть использование [сетевых дисков](https://timeweb.cloud/docs/k8s/network-drives-connection).

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

```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`:

```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`:

```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 извне. Посмотреть текущие балансировщики можно командой:

```shell
kubectl get svc -n ingress-nginx
```

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

```yaml
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
```

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

```shell
kubectl get svc -n ingress-nginx nginx-loadbalancer
```

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

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

```yml
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
```

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

```shell
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](https://content.timeweb.com/assets/0c8b8536-6b4e-4adf-be8a-9296ea98cc4b.png?width=2894&height=1600)

_Раздел «Query» в веб-интерфейсе [VictoriaMetrics](https://victoriametrics.com/)_
