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