Prometheus和Grafana持久化存储

18-k8s-Kube-prometheus持久化存储_第1张图片

之前部署的数据是在临时的存储目录里面,当pod重启或者被删除后,数据也就没了 对于Prometheus监控来说根据需求保存1周或者1个月,但是一定要持久化存储

一、配置Prometheus数据持久化

查看之前创建的nfs动态存储
[root@master01 manifests]# kubectl get storageclasses.storage.k8s.io
NAME       PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-aqsc   nfs-provisioner-01   Retain          Immediate           false                  23h
查看需要存储的pod
[root@master01 manifests]# kubectl get pods -n monitoring | grep prometheus-k8s
prometheus-k8s-0                       2/2     Running   1          39m
prometheus-k8s-1                       2/2     Running   1          39m
Prometheus用的是有状态服务,StatefulSet 用户不需要手工创建PVC 通过在Pod的spec中指定storageClassName和所需的存储资源来触发动态PVC的创建。
[root@master01 manifests]# kubectl get pods -n monitoring prometheus-k8s-1 -o yaml | grep kind
kind: Pod
            f:kind: {}
    kind: StatefulSet

    #可以看到 使用的是有状态存储
[root@master01 manifests]# kubectl get statefulsets.apps -n monitoring
NAME                READY   AGE
alertmanager-main   3/3     16h
prometheus-k8s      2/2     16h  #可以在有状态服务里面 找到他
那么只需要提需求就可以了
1 在线修改
[root@master01 manifests]# kubectl edit prometheus -n monitoring k8s
......
......
  name: k8s
  namespace: monitoring
  resourceVersion: "10762913"
  uid: 167328a1-df5a-4249-a107-fc7189f9f20c
spec:
  storage:   #将这些加到spec下面
    volumeClaimTemplate:
      spec:
        accessModes:  #模式
          - ReadWriteOnce  #只能被单个pod读写
        storageClassName: "nfs-nfs-aqsc"  #storageclasses名字  nfs的
        resources:
          requests:
            storage: 1Gi  #限制  这个对nfs没用
保存退出
2 yaml文件修改
[root@master01 manifests]# vim prometheus-prometheus.yaml
spec:
  storage:   #将这些加到spec下面
    volumeClaimTemplate:
      spec:
        accessModes:  #模式
          - ReadWriteOnce  #只能被单个pod读写
        storageClassName: "nfs-aqsc"  #storageclasses名字  nfs的
        resources:
          requests:
            storage: 1Gi  #限制  这个对nfs没用
然后创建了两个这样就做到持久化存储了
[root@master01 manifests]# kubectl get pv -n monitoring  | grep 1Gi
pvc-2f1f4a6c-73b8-4697-a5e8-8e86b0f9cb6d   1Gi        RWO            Retain           Bound      monitoring/prometheus-k8s-db-prometheus-k8s-1   nfs-aqsc                2m12s
pvc-a1c2a276-881f-4008-9d6d-1a842622aeaa   1Gi        RWO            Retain           Bound      monitoring/prometheus-k8s-db-prometheus-k8s-0   nfs-aqsc                2m12s
prometheus的两个pod重启了
[root@master01 manifests]# kubectl get pods -n monitoring | grep prometheus-k8s
prometheus-k8s-0                       2/2     Running   1          2m23s
prometheus-k8s-1                       2/2     Running   1          2m23s
到此Prometheus的持久化存储就完成了

查看一下

[root@master01 manifests]# kubectl get pods -n monitoring prometheus-k8s-1 -o wide
NAME               READY   STATUS    RESTARTS   AGE     IP              NODE         GATES
prometheus-k8s-1   2/2     Running   1          2m36s   10.244.15.158   10.1.19.54   #得到node的IP
#去node ip主机上查看下

[root@node01 ~]# ip a | grep  10.1.19.54
    inet 10.1.19.54/24 brd 10.1.19.255 scope global noprefixroute eth0

[root@node01 ~]# df -hT | grep "prometheus"
tmpfs                                                                                                                tmpfs     5.3G   12K  5.3G    1% /data/kubelet/pods/1fb7ba7d-cfcb-4803-af22-185d8797e70d/volumes/kubernetes.io~secret/prometheus-k8s-token-z74dp
10.1.19.57:/nfs/monitoring-prometheus-k8s-db-prometheus-k8s-1-pvc-2f1f4a6c-73b8-4697-a5e8-8e86b0f9cb6d               nfs4      300G  2.2G  298G    1% /data/kubelet/pods/1fb7ba7d-cfcb-4803-af22-185d8797e70d/volumes/kubernetes.io~nfs/pvc-2f1f4a6c-73b8-4697-a5e8-8e86b0f9cb6d
10.1.19.57:/nfs/monitoring-prometheus-k8s-db-prometheus-k8s-1-pvc-2f1f4a6c-73b8-4697-a5e8-8e86b0f9cb6d/prometheus-db nfs4      300G  2.2G  298G    1% /data/kubelet/pods/1fb7ba7d-cfcb-4803-af22-185d8797e70d/volume-subpaths/pvc-2f1f4a6c-73b8-4697-a5e8-8e86b0f9cb6d/prometheus/2
#可以看到挂载信息

二、配置Grafana的持久化存储

查看之前创建的nfs动态存储

[root@master01 manifests]# kubectl get storageclasses.storage.k8s.io
NAME       PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-aqsc   nfs-provisioner-01   Retain          Immediate           false                  23h
Grafana是无状态服务,我们使用nfs动态存储类 只需要创建一个pvc 就会自动给我们创建合适pv
[root@master01 manifests]# kubectl get deployments.apps -n monitoring
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
blackbox-exporter     1/1     1            1           16h
grafana               1/1     1            1           16h #可以看到Grafana是无状态应用
kube-state-metrics    1/1     1            1           16h
prometheus-adapter    2/2     2            2           16h
prometheus-operator   1/1     1            1           17h
看下现在grafana使用的存储
[root@master01 manifests]# kubectl get -n monitoring pods grafana-f6bfc8ffd-lw9sh -oyaml | grep -A5 volumes:
        f:volumes:
          .: {}
          k:{"name":"grafana-dashboard-apiserver"}:
            .: {}
            f:configMap:
              .: {}
--
  volumes:
  - emptyDir: {}  #现在使用的临时存储 如果pod重启或者删除 那么存储的数据就会删除 消失
    name: grafana-storage
  - name: grafana-datasources
    secret:
      defaultMode: 420
写一个pvc
[root@master01 manifests]# cat pvc-grafana.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-pvc-nfs
  namespace: monitoring
spec:
  accessModes:  #使用的模式
    - ReadWriteMany  #可以被多个节点同时读写
  resources:
    requests:
      storage: "2Gi"  #存储大小为2G  不过对于NFS来说 这个没用  限制不了
  storageClassName: nfs-aqsc   #使用的storageclass名字
############旧的配置
kind: deployment
spec
  template:
    sepc:
.......
......
      volumes:
      - emptyDir: {}     #这行删掉
        name: grafana-storage  #这行删掉



#改为新的配置 
kind: deployment
spec
  template:
    sepc:
   ......
   ......
      volumes:
      - name: grafana-storage     #这行加上
        persistentVolumeClaim:    #这行加上
          claimName: grafana-pvc-nfs  #这行加上
          readOnly: false    #这行加上

查看下挂载的信息

[root@master01 manifests]# kubectl  get pods -n monitoring grafana-7857bc4b59-lgbrz -owide
NAME                       READY   STATUS    RESTARTS   AGE     IP              NODE         
grafana-7857bc4b59-lgbrz   1/1     Running   0          2m16s   10.244.171.82   10.1.19.55   #pod所在node ip
#去node ip主机上查看下


[root@node02 ~]# ip a | grep 10.1.19.55
    inet 10.1.19.55/24 brd 10.1.19.255 scope global noprefixroute eth0

[root@node02 ~]# df -hT | grep grafana
tmpfs                                                                               tmpfs     5.3G   12K  5.3G    1% /data/kubelet/pods/7b22798a-d828-4b9f-bca1-df79f251e090/volumes/kubernetes.io~secret/grafana-token-vb2r5
tmpfs                                                                               tmpfs     5.3G  4.0K  5.3G    1% /data/kubelet/pods/7b22798a-d828-4b9f-bca1-df79f251e090/volumes/kubernetes.io~secret/grafana-datasources
10.1.19.57:/nfs/monitoring-grafana-pvc-nfs-pvc-67001dc9-bd77-4e49-a278-dc567389c8f4 nfs4      300G  2.2G  298G    1% /data/kubelet/pods/7b22798a-d828-4b9f-bca1-df79f251e090/volumes/kubernetes.io~nfs/pvc-67001dc9-bd77-4e49-a278-dc567389c8f4