问题排查:
在这里插入图片描述
分别查看pod日志:prometheus-k8s-0以及prometheus-operator-78bd98fc99-bmkbq
经查:prometheus-k8s-0日志显示 err=“log series: open /prometheus/wal: no such file or directory”
k logs prometheus-k8s-0 -n monitoring -c prometheus -f
在这里插入图片描述
查看 journalctl -f -u kubelet 日志报错:remove xxx : device or resource busy
在这里插入图片描述
分析有可能是由于数据损坏导致pod不能对数据目录进行更改操作导致。
尝试解决办法:
1、直接手动删除或者移除数据目录
2、查找数据目录进程,杀掉进程后,手动移除数据目录
办法一解决步骤:
找到数据目录,查看数据目录下是否存在数据:

#此路径为公司内部环境还原客户环境测试过程中产生
ll /data/381/k8s/lib/kubelet/pods/d8a23fa5-98ea-11ea-b346-52540018083f_bak02/volume-subpaths/prometheus-k8s-db/prometheus/2

发现并无数据内容,直接删除目录 d8a23fa5-98ea-11ea-b346-52540018083f_bak02
发现报错:device or resource busy
分析应该是有其他进程在用导致,因此将docker服务停止后再次操作:
仍然报错:device or resource busy,尝试第二种办法:
办法二解决步骤:
查找目录进程,杀死后,再对目录进程操作:

lsof -w +D d8a23fa5-98ea-11ea-b346-52540018083f_bak02

之后kill -9 PID,再次 rm -rf d8a23fa5-98ea-11ea-b346-52540018083f_bak02
发现报错:device or resource busy
分析:应该是该目录为磁盘挂载目录,因此直接不能直接删除

df /data/381/k8s/lib/kubelet/pods/d8a23fa5-98ea-11ea-b346-52540018083f_bak02/volume-subpaths/prometheus-k8s-db/prometheus
df -h /data/381/k8s/lib/kubelet/pods/d8a23fa5-98ea-11ea-b346-52540018083f_bak02/volume-subpaths/prometheus-k8s-db/prometheus

果然 该路径挂载在 /data目录下,因此,想要对目录进程操作,就需要先卸载,具体操作步骤如下:

#查看docker状态
service docker status
#查看k8s状态
systemctl status kubelet
#停止docker
service docker stop
#卸载磁盘目录
umount /data/381/k8s/lib/kubelet/pods/d8a23fa5-98ea-11ea-b346-52540018083f_bak02/volume-subpaths/prometheus-k8s-db/prometheus/2
如果umount报错使用lsof -w +D xxx 查询出所有的进程,kill掉,然后在umount。
#检查目录是否挂载
df /data/381/k8s/lib/kubelet/pods/d8a23fa5-98ea-11ea-b346-52540018083f_bak02/volume-subpaths/prometheus-k8s-db/prometheus/2
#删除问题数据目录
rm -rf /data/381/k8s/lib/kubelet/pods/d8a23fa5-98ea-11ea-b346-52540018083f_bak02
#重启docker服务
service docker start
#查看docker状态
service docker status
#查看k8s状态
systemctl status kubelet
#启动k8s
systemctl start kubelet
#查看monitoring空间下的pod状态
k get pods -n monitoring
#重启prometheus相关pod
k delete pod prometheus-k8s-0 -n monitoring
k delete pod prometheus-operator-6dfc87c946-5p7mp -n monitoring

注意⚠️:umount 的时候一定要全路径
如果umount时,不成功,如下:
在这里插入图片描述
不在当前目录执行umount,仍不成功,如下:
在这里插入图片描述
解决办法:

尝试使用:lsof -w +D xxx 的方式杀掉所有相关进程
在这里插入图片描述
待全部kill后,问题解决,可以 umount 了
另外在执行期间最好查看kubelet日志:journalctl -f -u kubelet 观察日志动态。
以上步骤执行结束后,观察pod的状态处于running

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐