用户中心
登录
登陆私有云
Toggle navigation
首页
分类
默认分类
English Novel
技术
机器学习
编程学习
智能家居
碎碎念
人工智能
元宇宙
chatgpt
强化学习
其他页面
whateat
一周Bing美图
书籍搜索网站
Media
OKAI
口红颜色可视化
关于我
关于我
Kubernetes 最佳实践:处理容器数据磁盘被写满
看不见的城市
发布 | 2020-04-13 |
机器学习
| 10181 浏览
自豪的采用[Editor.md](https://pandao.github.io/editor.md/ "Editor.md") $$x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$ 渲染科学公式 TeX/LaTeX 以上功能本站今天正式上线 ------------ 2020年4月12日16:14接到集群告警,node节点异常,显示状态Not Ready,进入node节点 ![note_attach.png](https://domocloud.cn/usr/uploads/2020/04/3548250584.png) 根据图片信息得知是kubelet出了问题,大概是存储资源获取不到导致,为node节点打上污点,转阿里云工单,暂时认为责任是阿里云的集群驱逐策略没有配置好。 2020年4月13日12:48:09阿里小哥反馈结果磁盘数据满了,处理速度堪忧。 :bowtie: #### 期间处理想法: 容器数据磁盘被写满造成的危害: - 不能创建 Pod (一直 ContainerCreating) - 不能删除 Pod (一直 Terminating) - 无法 exec 到容器 直接查看系统磁盘容量 ![dfTh.png](https://domocloud.cn/usr/uploads/2020/04/2513372081.png) 判断磁盘被写满,容器数据目录大多会单独挂数据盘,路径一般是 /var/lib/docker,也可能是 /data/docker 或 /opt/docker,取决于节点被添加时的配置,但是我使用里云的集群系统,node节点也无外挂数据盘。 可通过 docker info 确定: ```shell``` $ docker info ... Docker Root Dir: /var/lib/docker ... ``` #### 解决方法 重启 dockerd (清理容器日志输出和可写层文件) 重启前需要稍微腾出一点空间,不然重启 docker 会失败,可以手动删除一些docker的log文件或可写层文件,通常删除log: ```shell``` $ cd /var/lib/docker/containers $ du -sh * # 找到比较大的目录 40K 10b9c6149f7324aec83defc19a4969570e8495caf05000aa631050fe49e0b4fc 40K 11e6266a259c9d7f73d9a5e83599b6d128a1d5ea4f96a9d2f807005c36a3a98f 40K 1d764d011ab6ded00a993d3b265ee254c86d7b0683cab3eac6d136b501b44349 28K 22a8ae7e3a4cc61e858d5cad12191af72bf9688e8f081340d22e3232c13b918f 28K 23b22080dcd2525f2d0e093f463791a865f233858c730ca9fb6b4d7dab39e010 72K 2ea7c0cef8b9aa951839c711cc974db98f535c47270f27172a62722cfb10836e 28K 2ead4a8c44d9f76a1c5634b0944cbc0021781e089c557e845edc3553652b52b2 40K 3fcc9fb05501d5bc734bf88cbb8076e6a3c0489f13f3bc5de94f92224955a0fc 28K 446b8b9896ce54c183b90c3c2c09daf4d475e861aa5f5ea9df1d9fe0d60332e0 28K 4d2390313cdbaddd19593c6648f8e57806c0e625a22509e8d550f7a455a6b083 32K 55684a6f05d4107a18fb29a0ab2fe5b2f3a0e662b6f3e0087f68c6a23ea1547f 28K 5935355448c9dfe7928d423a14c2d7702971b9a89a50d676d3867057960541dc 32K 7a637aec132e8bdaec8b979b435e983da135f49806d8876643bdb1fb2a0cb287 ``` 占用空间不是很大,如果占用很大 ```shell``` $ cd
$ cat /dev/null > log id.num # 删除log文件 ``` > **但是注意**: 使用 cat /dev/null > 方式删除而不用 rm,因为用 rm 删除的文件,docker 进程可能不会释放文件,空间也就不会释放;log 的后缀数字越大表示越久远,先删除旧日志 - 将该 node 标记不可调度,并将其已有的 pod 驱逐到其它节点,这样重启dockerd就会让该节点的pod对应的容器删掉,容器相关的日志(标准输出)与容器内产生的数据文件(可写层)也会被清理: ```shell``` kubectl drain 10.179.80.31 ``` - 重启 dockerd: ```shell``` systemctl restart dockerd ``` - 取消不可调度的标记: ```shell``` kubectl uncordon 10.179.80.31 ``` **定位根因,彻底解决** 问题定位方法见附录,这里列举根因对应的解决方法: - 日志输出量大导致磁盘写满: + 减少日志输出 + 增大磁盘空间 + 减小单机可调度的pod数量 - 可写层量大导致磁盘写满: 优化程序逻辑,不写文件到容器内或控制写入文件的大小与数量 + 镜像占用空间大导致磁盘写满: + 增大磁盘空间 + 删除不需要的镜像 继续找原因 ```shell``` $ docker system df -v ``` 大约是pod内部文件过大 ```shell``` $ cd /var/lib/docker $ du -sh * 20K builder 72K buildkit 38M containers 12M image 108K network 109G overlay2 20K plugins 4.0K runtimes 4.0K swarm 4.0K tmp 4.0K trust 28K volumes ``` 现在基本可以确定是pod占用空间过多导致的,准备清理docker ```shell``` @TODO #如果想分析原因,以下操作暂时不要做,见附录 $ reboot # 直接重启,如果不好用在执行一下命令 $ docker images $ docker image prune -a # 如果要移除所有未被使用的镜像,则通过设置-a字段来实现 $ docker kill $(docker ps -a -q) # 杀死所有正在运行的容器 $ docker rm -f $(docker ps -qa) $ docker volume rm $(docker volume ls -q) $ docker rmi $(docker images -q) ``` 重启后docker被清理,阿里云的驱逐策略还得在研究研究,还有k8s的清理策略为什么没有生效 /var/lib/kubelet/config.yaml是kubelet的配置文件,/etc/systemd/system/kubelet.service.d/10-kubeadm.conf是kubelet启动文件,关于参数可以看https://blog.csdn.net/luanpeng825485697/article/details/84950594 这篇文章,驱逐策略https://kubernetes.io/zh/docs/tasks/administer-cluster/out-of-resource/ 官方文章。 **附录** ```shell``` $ docker start -it
$ docker exec -it
# 进入容器内部,分析容器崩溃原因 ``` 更新yaml,资源限制见[k8s的容器存储空间资源限制ephemeral-storage](https://blog.csdn.net/sdmei/article/details/101017405 "k8s的容器存储空间资源限制ephemeral-storage") 这位腾讯工程师的文章也可以参考[Kubernetes 最佳实践:处理容器数据磁盘被写满](https://cloud.tencent.com/developer/article/1443236 "Kubernetes 最佳实践:处理容器数据磁盘被写满")
标签
没有标签
© 著作权归作者所有
本文由 豆末 创作,采用
知识共享署名4.0
国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。
微信扫一扫查看
关闭
评论关闭
分类
默认分类
3
English Novel
3
技术
16
机器学习
3
编程学习
2
智能家居
4
碎碎念
9
人工智能
0
元宇宙
2
chatgpt
0
强化学习
0
最新文章
编译 openwrt教程
看不见的城市 - 11-25
数字经济元宇宙之电力元宇宙
看不见的城市 - 05-28
数字经济元宇宙
看不见的城市 - 05-28
智能家居终结篇之元宇宙
看不见的城市 - 12-31
智能家居二之家庭助理
看不见的城市 - 12-28
智能家居一之物联网设备
看不见的城市 - 12-28
家庭机柜 enjoy
看不见的城市 - 12-27
樱花医院暴雨下的爱情
看不见的城市 - 05-31
标签云
embedding python
最近回复
加啦加啦 我之前更新了程序
木月 - 11-24
求最新的ndr py版本 跪求
魔法少女刘能 - 11-10
Incredible points. ...
cialis - 04-30
Good way of describ...
cialis for sale in usa - 03-25
Our lives are not o...
鱼塘里的废柴少女 - 11-09
小公司倒是去了很多家
芭比 - 08-07
GG
归档
2023-11
1
2023-05
2
2021-12
4
2020-05
1
2020-04
1
2019-05
1
2019-03
2
2018-11
3
2018-10
3
2018-09
1
2018-07
3
2018-05
1
2018-04
2
2018-03
15
© 著作权归作者所有
本文由 豆末 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。