使用 kube-prometheus 安装的prometheus,默认是没有将数据持久化的,存储模式都是 emptyDir,生命周期会随着 pod 的删除而被删除。
持久化prometheus
kubectl describe sts prometheus-k8s -n monitoring
查看 CRD prometheus 创建出来的 sts 的详细信息,template.Containers.Volumes.prometheus-k8s-db
可以看到使用的 volume 类型为 EmptyDir ,它的生命周期时跟随着 Pod,当 Pod 被重新创建或者挂掉之后 EmptyDir 中的数据会丢失。
还没部署
修改 prometheus 的文件,注意 storage 和 version 是同级别的。
vim manifests/prometheus/prometheus-prometheus.yaml
storage:
volumeClaimTemplate: #pvc 模板
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi #存储空间可以自己填大一点
storageClassName: defualt-storage #集群内没有 storageclass,可以不填写这一行
version: 2.46.0
若是集群内没有 storageclass,需要自己创建相应的 PV。
已经部署
kubectl -n monitoring edit prometheus k8s
在 version 平级添加如下内容。StatefulSet 类型 prometheus-k8s 是 CRD(自定义的资源类型) prometheus 创建出来的,所以修改它。
prometheus-db 持久化完成。
prometheus 数据存储默认是两天,可以添加资源类型为 prometheus 的 spec.retention 参数来设置数据保留的时间。
持久化grafana
创建 grafana-pvc.yaml 文件
由于 Grafana 是部署模式为 Deployment,所以我们提前为其创建一个 grafana-pvc.yaml 文件,加入下面 PVC 配置。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: grafana
namespace: monitoring #---指定namespace为monitoring
spec:
storageClassName: k8s-storage #---指定StorageClass,没有可以不填写这一行。自己手动创建pv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
修改 grafana-deployment.yaml 文件设置持久化配置,应用上面的 PVC。
vim manifests/grafana-deployment.yaml
将 volumes 里面的 “grafana-storage” 配置注掉,新增如下配置,挂载一个名为 grafana 的 PVC
......
volumes:
- name: grafana-storage #-------新增持久化配置
persistentVolumeClaim:
claimName: grafana #-------设置为创建的PVC名称
#- emptyDir: {} #-------注释掉旧的配置
# name: grafana-storage
- name: grafana-datasources
secret:
secretName: grafana-datasources
......
集群内没有 storageclass,需要手动创建 pv。