1.定义一个storageclass
[root@master01 ~]# cat prometheus-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: prometheus-data-db
provisioner: qgg-nfs-storage #### 我这边是NFS做的存储,provisioner名称,请确保该名称与 nfs-StorageClass.yaml文件中的provisioner名称保持一致
2.定义一个pvc
[root@master01 ~]# cat prometheus-data-db.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: prometheus-data-db
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: prometheus-data-db
[root@master01 ~]# kubectl get pvc -n monitoring
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
prometheus-k8s-db-prometheus-k8s-0 Bound pvc-4c8f9a58-1fcd-4bf9-98e6-3fc016bdde1f 1Gi RWO prometheus-data-db 2d21h
prometheus-k8s-db-prometheus-k8s-1 Bound pvc-b00f8bf2-1a28-4c75-bbd9-62e6f3f97a8f 1Gi RWO prometheus-data-db 2d21h
3.prometheus文件修改
[root@master01 manifests]# cat prometheus-prometheus.yaml
1 apiVersion: monitoring.coreos.com/v1
2 kind: Prometheus
3 metadata:
4 labels:
5 prometheus: k8s
6 name: k8s
7 namespace: monitoring
8 spec:
9 retention: 7d ### 数据保留时间
10 alerting:
11 alertmanagers:
12 - name: alertmanager-main
13 namespace: monitoring
14 port: web
15 storage: # 数据持久化
16 volumeClaimTemplate:
17 spec:
18 storageClassName: prometheus-data-db
19 resources:
20 requests:
21 storage: 1Gi
# 说了prometheus operator持久化的问题,但是还有一个问题很多人都忽略了,那就是prometheus operator数据保留天数,根据官方文档的说明,默认prometheus operator数据存储的时间为1d,这个时候无论你prometheus operator如何进行持久化,都没有作用,因为数据只保留了1天,那么你是无法看到更多天数的数据
4.测试
[root@master01 manifests]# kubectl delete pod -n monitoring prometheus-k8s-0
pod "prometheus-k8s-0" deleted
[root@master01 manifests]# kubectl delete pod -n monitoring prometheus-k8s-1
pod "prometheus-k8s-1" deleted
[root@master01 manifests]# kubectl get pod -n monitoring
NAME READY STATUS RESTARTS AGE
prometheus-k8s-0 2/2 Running 1 63s
prometheus-k8s-1 2/2 Running 1 54s