地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【k8s】nfsのexpoterを使ってみた

github.com

$ go get -u -v github.com/aixeshunter/nfs_exporter

$ ./${GOPATH}/bin/nfs_exporter --${flags} ...

PVの学習をするためにNFSが欲しかった。せっかくなので監視もやりたいと思ったので導入してみた。

prometheusのオペレーターを使ってたりするなら以下のmanifestを流せばいい感じに監視ができる

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nfs-exporter
spec:
  selector:
    matchLabels:
      k8s-app: nfs-exporter
  replicas: 1
  template:
    metadata:
      labels:
        k8s-app: nfs-exporter
        app: nfs-exporter
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      - key: "CriticalAddonsOnly"
        operator: "Exists"
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node-role.kubernetes.io/master
                operator: Exists
      hostNetwork: true
      hostPID: true
      containers:
      - name: nfs-exporter
      
        image: aixeshunter/nfs_exporter:v1.0
        args:
        - "--nfs.storage-path=/opt/nfs1, /opt/nfs2, /opt/nfs3"
        - "--nfs.address=192.168.0.2"
        ports:
        - name: http-metrics
          containerPort: 9689

取れるデータは以下のように定義されている。PV/PVCの情報も取れるみたいだけどうまくいかなかったので調査中。

type VolumeInfo struct {
    size     float64
    used     float64
    avail    float64
    capacity float64
}

type PathInfo struct {
    path    string
    used    float64
    pvName  string
    storage float64
}

type NfsPvInfo struct {
    server       string
    path         string
    capacity     float64
    pvName       string
    pvcName      string
    pvcNamespace string
}