转接上文:部署k8s监控(1):Prometheus-operator监控k8s集群的各个组件及pod(二进制环境)
解决上一篇博客遗留的问题:
产生的数据如何做到持久化
prometheus默认的存储方式 (- emptyDir: {})
它的生命周期和pod的生命周期一样,重启pod后数据会丢失,因此需要修改持久化方案保存数据
持久化方案后很会:
这里使用的是hostpath,也可以使用pv/pvc
一、进入prometheus-k8s的statefulset中修改挂载文件的类型
[root@k8s-master1 /]# kubectl edit statefulset prometheus-k8s -n monitoring
volumes:
- name: config
secret:
defaultMode: 420
secretName: prometheus-k8s
- hostPath: #修改为volume卷的形式
path: /prometheus/config-out #挂载的位置
type: Directory #挂载的类型
name: config-out
- configMap:
defaultMode: 420
name: prometheus-k8s-rulefiles-0
name: prometheus-k8s-rulefiles-0
- hostPath: #修改为volume卷的形式
path: /prometheus/prometheus-k8s-db #挂载的位置
type: Directory #挂载的类型
name: prometheus-k8s-db
二、在每台node节点中创建prometheus目录,并通过nfs挂载到远程的数据存储中心中(对应多个nfs存储)
也可以挂载到本地磁盘中,因情况而定
三、启动服务中,如果遇到以下报错可按照下方的进行修改
[prometheus-operator]报错caller=main.go:731 err=“opening storage failed: create dir: mkdir /prometheus/wal: permission denied”
解决方案:
[root@k8s-master1 /]# kubectl edit statefulset prometheus-k8s -n monitoring
securityContext:
fsGroup: 0
runAsNonRoot: false
runAsUser: 0
四、如果要做grafana的持久化存储也可以使用这种方法解决
[root@k8s-master1 /]# kubectl edit deployment grafana -n monitoring
volumes:
- hostPath:
path: /prometheus
type: Directory name: grafana-storage
五、通过nfs挂载到远程的数据存储中心中(对应一个nfs存储)
六、修改用户权限
[root@k8s-master1 /]# kubectl edit deployment grafana -n monitoring
securityContext:
runAsNonRoot: false
runAsUser: 0