Мониторинг NFS Persistant Volume в Prometheus

У меня есть постоянный том типа NFS с исходным сервером, работающим локально. Этот сервер NFS использует постоянное утверждение тома, которое находится в GCP. Все работает нормально, однако я по какой-то причине не могу отслеживать PVC на Prometheus. Это просто не появляется.

Вопрос: Как я могу отслеживать использование таких дисков? Нужно ли мне устанавливать какие-то драйверы или настраивать пользовательский парсинг?

Вот запросы PromQL, которые я пробовал:

kubelet_volume_stats_capacity_bytes
kubelet_volume_stats_available_bytes
node_filesystem_size_bytes

Примечание. Я могу видеть здесь объем, но могу видеть только его емкость, а не использование.

kube_persistentvolume_capacity_bytes

Вот файл конфигурации для сервера NFS:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nfs-server
spec:
  replicas: 1
  selector:
    matchLabels:
      role: nfs-server
  template:
    metadata:
      labels:
        role: nfs-server
    spec:
      containers:
      - name: nfs-server
        image: gcr.io/google_containers/volume-nfs:0.8
        ports:
          - name: nfs
            containerPort: 2049
          - name: mountd
            containerPort: 20048
          - name: rpcbind
            containerPort: 111
        securityContext:
          privileged: true
        volumeMounts:
          - mountPath: /exports
            name: nfs-pvc
      volumes:
        - name: nfs-pvc
          gcePersistentDisk:
            pdName: nfs-disk
            fsType: ext4

Вот конфигурация PV:

Status:          Bound
Claim:           default/nfs-pvc
Reclaim Policy:  Retain
Access Modes:    RWX
VolumeMode:      Filesystem
Capacity:        1000Gi
Node Affinity:   <none>
Message:
Source:
    Type:      NFS (an NFS mount that lasts the lifetime of a pod)
    Server:    nfs-server.default.svc.cluster.local
    Path:      /
    ReadOnly:  false

Вот конфигурация PVC:

Name:          nfs-pvc
Namespace:     default
StorageClass:
Status:        Bound
Volume:        nfs-pv
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      1000Gi
Access Modes:  RWX
VolumeMode:    Filesystem
Mounted By:    ...

person Jeremie Piotte    schedule 16.10.2020    source источник
comment
Я обнаружил эту известную проблему на github, которая может быть похожей. Я бы посоветовал вам опубликовать здесь, если вариант использования похож.   -  person Hasanul Murad    schedule 17.10.2020


Ответы (1)


На помощь приходит Volume Exporter, это легко сделать следующим образом.

Объемный экспортер создан специально для таких нужд, где экспортер узлов может быть бесполезен (он в основном заполняет существующую пустоту)

      - name: volume-exporter
      image:  mnadeem/volume_exporter
      imagePullPolicy: "Always"
      args:
        - --volume-dir=prometheus:/prometheus
        - --volume-dir=appLog:/app/log
      ports:
      - name: metrics-volume
        containerPort: 9888
      volumeMounts:
      - name: prometheus-data
        mountPath: /prometheus
        readOnly: true
      - name: log-data-volume
        mountPath: /app/log
        readOnly: true

Экспортированные метрики

            # HELP volume_bytes_free Free size of the volume/disk
            # TYPE volume_bytes_free gauge
            volume_bytes_free{volume_name="bin",volume_path="/bin"} 4.341569536e+10
            volume_bytes_free{volume_name="etc",volume_path="/etc"} 4.341569536e+10
            # HELP volume_bytes_total Total size of the volume/disk
            # TYPE volume_bytes_total gauge
            volume_bytes_total{volume_name="bin",volume_path="/bin"} 6.391887872e+10
            volume_bytes_total{volume_name="etc",volume_path="/etc"} 6.391887872e+10
            # HELP volume_bytes_used Used size of volume/disk
            # TYPE volume_bytes_used gauge
            volume_bytes_used{volume_name="bin",volume_path="/bin"} 2.050318336e+10
            volume_bytes_used{volume_name="etc",volume_path="/etc"} 2.050318336e+10
            # HELP volume_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which volume_exporter was built.
            # TYPE volume_exporter_build_info gauge
            volume_exporter_build_info{branch="",goversion="go1.15",revision="",version=""} 1
            # HELP volume_percentage_used Percentage of volume/disk Utilization
            # TYPE volume_percentage_used gauge
            volume_percentage_used{volume_name="bin",volume_path="/bin"} 32.07688208958619
            volume_percentage_used{volume_name="etc",volume_path="/etc"} 32.07688208958619

Отказ от ответственности: я владелец

person craftsmannadeem    schedule 09.01.2021