开发者社区> 云栖社区直播> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

挂载失败-日志中显示僵尸pod的问题

简介: 当节点出现pod挂载不上,且查看节点日志(/var/log/message)发现不断有“Orphaned pod”字段的日志打印出来,如下: Jan 21 03:07:08 abc_k8s_worker01 kubelet: E0121 03:07:08.
+关注继续查看

问题描述:

如果一个pod一直无法删除、创建不成功,且在pod所在节点查看日志文件: /var/log/messages 发现有下面的日志:

如何查看Pod所在节点?
# podname="nas-static-56b6c699d6-xq4xx"
# namespace="default"
# nodeIp=`kubectl describe pod $podname -n $namespace | grep Node: | awk -F'/' '{print $2}'`

登录节点并查看日志:
# ssh $nodeIp 
# tailf /var/log/messages
Dec 25 16:44:48 iZ2ze65lci9pegg2wr99g9Z kubelet: E1225 16:44:48.581657   21207 kubelet_volumes.go:140] Orphaned pod "06fa705f-0821-11e9-8cd4-00163e1071ed" found, but volume paths are still present on disk : There were a total of 2 errors similar to this. Turn up verbosity to see them.

问题解读:

Dec 25 16:44:48 iZ2ze65lci9pegg2wr99g9Z kubelet: E1225 16:44:48.581657   21207 kubelet_volumes.go:140] 
Orphaned pod "06fa705f-0821-11e9-8cd4-00163e1071ed" found, but volume paths are still present on disk : 
There were a total of 2 errors similar to this. Turn up verbosity to see them.

上面的错误日志表示:有2个Pod目前处于僵尸Pod状态,且最新一个podId为:06fa705f-0821-11e9-8cd4-00163e1071ed。只有处理完显示的podid后,才能显示下一个podid,所以我们需要先处理第一个pod,然后再查看/var/log/messages日志,拿到下一个有问题的podid。

问题原因:Pod 异常退出,导致数据卷挂载点在卸载过程中没有清理干净,最终导致Pod沦为僵尸Pod。Kubelet的GC流程对数据卷垃圾回收实现并不完善,目前需要手动或脚本自动化实现垃圾挂载点的清理工作。

解决此问题的核心为:删除报错pod的垃圾挂载点目录,但删除时确保不能误删数据。

解决办法1:

在问题节点上运行下面脚本:

# wget https://raw.githubusercontent.com/AliyunContainerService/kubernetes-issues-solution/master/kubelet/kubelet.sh
# sh kubelet.sh

解决办法2:

需要对每个Pod进行如下处理:

1.查看pod挂载点:

mount | grep 06fa705f-0821-11e9-8cd4-00163e1071ed

如果有挂载点存在,需要执行umount *(挂载点),卸载;

2.查看Pod数据卷目录的残余信息:

1) ls /var/lib/kubelet/pods/06fa705f-0821-11e9-8cd4-00163e1071ed/volumes/ 看数据卷目录下面还有什么挂载目录;
   例如:alicloud~disk  kubernetes.io~secret

2) 查看上面发现的目录下面子目录,删除子目录。例如:
   ls /var/lib/kubelet/pods/d9aec562-13fa-11ea-a9b7-00163e084110/volumes/alicloud~disk 
   下面包含:d-wz906mxhbe3qk051vmwv  d-wz9d6z27o4s3d4736opw;
   需要删除这两个文件夹,千万注意下面情况:
 
3)只能删除目录为空的文件夹。
   如果目录不为空,说明这个文件夹还在挂载某个存储设备,或者使用了本地存储并保存了数据;
   如果是挂载了外置设备,需要先umount挂载设备,然后删除目录;
   如果是使用了本地存储,需要先将保持的数据备份、转存后删除目录;

4)为了避免误删,请使用rmdir命令,而避免使用rm -rf;
   例如:rmdir /var/lib/kubelet/pods/06fa705f-0821-11e9-8cd4-00163e1071ed/volumes/alicloud~disk/d-wz906mxhbe3qk051vmwv
   rmdir命令,可以在当目录不为空时,删除失败,更大限度的保护数据;

该问题为kubelet处理数据卷时候导致的问题,目前社区正在讨论解决方案:

https://github.com/kubernetes/kubernetes/issues/60987

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Yii2框架(五)日志的相关配置及使用
Yii2.0框架的日志操作如下,大概有五种方式: Yii::getLogger()->log($message, $level, $category = 'application') Yii::trace($message, $category = 'application'); Yii::error($message, $category = 'application'); Yii::warning($message, $category = 'application'); Yii::info($message, $category = 'application');
60 0
清晰!我们从来都反对“大中台,小前台”的架构设计!
在2020全球敏捷架构峰会上,快狗打车的架构师李洪英,分享了快狗打车业务中台的一些经验与思考。
59 0
【Netty】NIO 选择器 ( Selector ) 通道 ( Channel ) 缓冲区 ( Buffer ) 网络通信案例
【Netty】NIO 选择器 ( Selector ) 通道 ( Channel ) 缓冲区 ( Buffer ) 网络通信案例
30 0
【强烈推荐】<<国土档案管理信息系统>>产品使用说明书系列目录【附下载地址】
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/7793117   产品使用说明书系列目录 【附下载地址】   ——通过知识共享树立个人品牌。
829 0
13
文章
0
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
相关文档: 云原生应用交付平台 ADP 容器镜像服务 容器服务Kubernetes版
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载