feat: добавить Prometheus-метрики для nfs-server addon

- Устанавливает prometheus-node-exporter на NFS-хостах (включает NFSD-коллектор из /proc/net/rpc/nfsd)
- Открывает порт 9100 в UFW для cluster-сети
- При addon_prometheus_stack=true создаёт в k8s:
  - headless Service nfs-server-node-exporter
  - Endpoints со списком IP NFS-хостов из inventory
  - ServiceMonitor с label release: kube-prometheus-stack
This commit is contained in:
Sergey Antropoff
2026-04-25 11:29:22 +03:00
parent 51c6f4a706
commit dbc21150b2
2 changed files with 109 additions and 0 deletions

View File

@@ -19,3 +19,9 @@ nfs_create_export_dirs: true
nfs_export_dir_mode: "0777"
nfs_export_dir_owner: "nobody"
nfs_export_dir_group: "nogroup"
# ── Метрики (node_exporter с NFSD-коллектором) ───────────────────────────────
nfs_metrics_enabled: true
nfs_metrics_port: 9100
# Namespace в k8s для ServiceMonitor/Endpoints (должен существовать)
nfs_metrics_namespace: "monitoring"

View File

@@ -47,6 +47,109 @@
become: true
failed_when: false # UFW может быть не установлен
- name: Install prometheus-node-exporter for NFS metrics
ansible.builtin.apt:
name: prometheus-node-exporter
state: present
become: true
when: nfs_metrics_enabled | bool
- name: Enable and start prometheus-node-exporter
ansible.builtin.systemd:
name: prometheus-node-exporter
enabled: true
state: started
become: true
when: nfs_metrics_enabled | bool
- name: Allow node-exporter port through UFW (if active)
community.general.ufw:
rule: allow
src: "{{ nfs_allowed_network }}"
port: "{{ nfs_metrics_port }}"
proto: tcp
become: true
failed_when: false
when: nfs_metrics_enabled | bool
- name: Build NFS host IP list for Endpoints
ansible.builtin.set_fact:
_nfs_endpoints_addresses: "{{ (_nfs_endpoints_addresses | default([])) + [{'ip': hostvars[item]['ansible_default_ipv4']['address']}] }}"
loop: "{{ groups['nfs_server'] }}"
run_once: true
when: nfs_metrics_enabled | bool and addon_prometheus_stack | default(false) | bool
- name: Create headless Service for NFS node-exporter
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: Service
metadata:
name: nfs-server-node-exporter
namespace: "{{ nfs_metrics_namespace }}"
labels:
app: nfs-server-node-exporter
spec:
clusterIP: None
ports:
- name: metrics
port: "{{ nfs_metrics_port }}"
targetPort: "{{ nfs_metrics_port }}"
delegate_to: "{{ groups['k3s_master'][0] }}"
run_once: true
become: true
environment:
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
when: nfs_metrics_enabled | bool and addon_prometheus_stack | default(false) | bool
- name: Create Endpoints for NFS node-exporter
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: Endpoints
metadata:
name: nfs-server-node-exporter
namespace: "{{ nfs_metrics_namespace }}"
subsets:
- addresses: "{{ _nfs_endpoints_addresses }}"
ports:
- name: metrics
port: "{{ nfs_metrics_port }}"
delegate_to: "{{ groups['k3s_master'][0] }}"
run_once: true
become: true
environment:
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
when: nfs_metrics_enabled | bool and addon_prometheus_stack | default(false) | bool
- name: Create ServiceMonitor for NFS node-exporter
kubernetes.core.k8s:
state: present
definition:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: nfs-server-node-exporter
namespace: "{{ nfs_metrics_namespace }}"
labels:
release: kube-prometheus-stack
spec:
selector:
matchLabels:
app: nfs-server-node-exporter
endpoints:
- port: metrics
path: /metrics
interval: 30s
delegate_to: "{{ groups['k3s_master'][0] }}"
run_once: true
become: true
environment:
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
when: nfs_metrics_enabled | bool and addon_prometheus_stack | default(false) | bool
- name: Verify NFS exports are active
ansible.builtin.command: exportfs -v
register: nfs_exportfs