K8S node磁盘清理

K8S磁盘清理

K8S的部署形式相比传统非容器部署,会消耗更多的磁盘,在运行时可能会把磁盘占满。
这里以使用containerd运行时的K8S node为例,说明磁盘会用到那里了和如何清理磁盘

通用处理

磁盘清理:

du -h --max-depth=6  /  2>/dev/null | sort -h | tail -n 200

查看是什么占用磁盘多

另外也可以采用Node exporter去持续收集节点的磁盘使用信息,但针对非PV效果一般

Node目录

在ssh登录到node上
在笔者的实践中,可能特别大的目录如下

K8S container Runtime

11G /run/containerd/io.containerd.runtime.v2.task/k8s.io

/run/containerd/io.containerd.runtime.v2.task/k8s.io 目录包含了K8S容器运行时的可读写层数据。当发现此目录占用过多磁盘空间时,可以首先定位占用空间最多的Pod,通过以下命令找出并进一步排查原因:

根因是容器往容器的rootfs里(也就是运行时的文件目录)写数据,如在容器中不挂载日志PV的情况下直接在容器写日志

查看是什么pod用得多,这里的码是容器的id

cd /run/containerd/io.containerd.runtime.v2.task/k8s.io
du -sh *|sort -h
400M    d69bae349b1ff1f9fd904d470eb257c40d8c2bca84c752f1c1b19687d4214836
470M    445155da8c81dbe5d99a295f70943516a8604793350166b60fbe13d79af55d69
895M    20cb3cad45f400d93d6865065510378e8e5445107606c63fd3c606e002da7a56
2.1G    32317ff26babc88a567c8824cc272d46d782b6c4fbf1d6136788baaabe857c49
2.1G    4689c5537759fcd97666718f6209364c736cfa4fe9bee04b1cb16702cbe9c807
2.1G    e298b8fc01463587c116ae5878828ed126a06b77973e0d502eee95eacca570f0

找排名前几位给查一下(不要粘贴完整的,因为默认的crictl ps不显示全部的,像最后一条完整的是e298b8fc01463587c116ae5878828ed126a06b77973e0d502eee95eacca570f0,如下的crictl ps只是显示到e298b8fc01463)
看到是rancher,没办法确实大,后续再处理

crictl ps|grep  e298b8fc0
#看到是rancher,没办法确实大
e298b8fc01463       cb636b91766c4       8 days ago          Running             rancher                                          0                   6b9c18fb0436d       rancher-64cf6ddd96-6d9v5
解决办法1,容器层面删除

尝试删除容器

crictl rm -f e298b8fc0
e298b8fc0
e298b8fc0

后续deployment等会重新将pod和容器拉起

解决办法2 kubectl删除pod
kubectl delete pod -n cattle-system rancher-64cf6ddd96-6d9v5

后续等待replica set重新拉起pod

节点级别删除所有pod使其重建,清理runtime

只是删除pod重建

kubectl get pods -o wide  -A | awk '/Running/{print $1,$2}'   | xargs -r -n2 kubectl delete pod --force -n

这个命令不能覆盖所有的pod状态,后续可以尝试修改,但这个命令也可以批量删除一些其他的异常pod,通过变更状态

更推荐下面的做法

节点级别的处理

cordon 停止调度
影响最小,只会将node调为SchedulingDisabled
之后再发创建pod,不会被调度到该节点
旧有的pod不会受到影响,仍正常对外提供服务

恢复调度

kubectl uncordon node_name

drain 驱逐节点
首先,驱逐node上的pod,其他节点重新创建
接着,将节点调为SchedulingDisabled

恢复调度
kubectl uncordon node_name

  1. 封锁节点,先让节点变的不可调度

    kubectl cordon

  2. 对节点执行维护操作之前(例如:内核升级,硬件维护等),您可以使用 kubectl drain 安全驱逐节点上面所有的 pod。

安全驱逐的方式将会允许 pod 里面的容器遵循指定的 PodDisruptionBudgets 执行优雅的中止
注: 默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod,如果您想了解更多详细的内容,请参考kubectl drain

kubectl drain 返回成功表明所有的 pod (除了前面排除的那些)已经被安全驱逐(遵循期望优雅的中止期,并且没有违反任何应用程序级别的中断预算)。

然后,通过对物理机断电或者在云平台上删除节点所在的虚拟机,都能安全的将节点移除。

根因解决

原因是容器在没有PV的挂载也写入的文件,如业务容器,rocketMQ容器,MySQL容器等往文件路径写入大量日志或者其他东西(如rancher的helm charts),考虑把日志的目录从pod里挂载出来,或者干脆直接阻止这个行为让容器只能在标准流输出日志

容器镜像

10G     /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs   

K8S的镜像
清理办法

nerdctr -n k8s.io images prune -a

清理没有在用的镜像,但镜像在用的就清不了,在生产上,如果出现大量的持续集成的镜像更换,考虑定时执行清理无用镜像的cronjob

PV(persistent volume持久化存储)

hostpath
  1. HostPath 类型 PV 存储容量过大

    在某些Kubernetes集群配置中,可能使用了hostPath类型的持久化卷插件,比如Rancher提供的hostPath StorageClass。在这种情况下,会在宿主机上指定一个目录作为持久化存储的位置,例如 /opt/local-path-provisioner。当这个目录下的数据量持续增长,可能会导致存储空间占用过大。

    处理方法:

    1. 确认已分配的PersistentVolumeClaims (PVC)
      • 首先,通过 kubectl get pvc 查看所有已创建的PersistentVolumeClaim,并找到那些关联到hostPath类型PV的PVC。确认它们是否仍然被正在运行的Pod所使用。
    2. 检查Pod与PVC的关系
      • 使用 kubectl get pods --show-labels 查找具有对应PVC标签的Pod,确定哪些Pod正在使用过大的PV。
    3. 数据迁移或清理
      • 如果该存储空间内有重要数据,需要先将其备份或迁移至其他存储位置。
      • 若数据不再需要,则可以直接在宿主机上安全地删除数据。
    4. 解除Pod与PVC的绑定
      • 先删除引用该PVC的Pod,让Pod停止运行并释放PVC。
      • 或者,如果Pod可以动态调整存储,可尝试缩小PVC的存储请求。
    5. 清理PersistentVolumeClaim (PVC)
      • 删除不再需要的PVC,执行 kubectl delete pvc <pvc-name>
    6. 清理PersistentVolume (PV)
      • 当PVC被删除后,Kubernetes会根据回收策略自动清理关联的PV。对于hostPath类型的PV,这意味着宿主机上的指定目录将会空置出来,但有时仍需手动清理残留文件。(对应PVC的删除策略,Retain,Delete,默认是delete)
      • 如果PV未被自动清理,可通过查看PV状态 (kubectl get pv) 并手动删除对应的PV (kubectl delete pv <pv-name>),然后清理宿主机上的实际存储路径。
分布式存储如longhorn
  1. 副本数量调整
    - 默认3副本,所以PV可能比原来大3倍(但是可以压缩部分)。
    - 使用Longhorn,可以通过其UI或YAML配置来更改卷的副本数量。调整前务必确保有足够的空间进行重新同步和数据迁移,以及评估对性能的影响。
  2. 清理未使用资源
    - 列出所有的PersistentVolumeClaim(PVC)和相关的PersistentVolumes(PV),识别并清理那些已经不再被任何Pod使用的PVC。一旦PVC被删除,Longhorn会自动根据其回收策略回收对应的PV,从而释放存储空间。
    - 登录到Longhorn管理界面,检查所有卷的状态,找出闲置或已废弃的卷,并采取相应的清理措施。
  3. 扩容或缩容存储卷
    - 如果有正在使用的卷接近满载,但未来还需要保留数据,可以考虑扩容这些卷,前提是底层存储允许。
    - 若卷内数据不再需要长期保存,也可以选择缩小其大小,前提是数据已经被妥善备份或迁移。
  4. Snapshot 和 Backup 管理
    - 验证是否有过多的快照或备份占用额外的存储空间。Longhorn支持周期性备份策略,确保只有包含新数据的备份才会被创建,并且无效的快照会被自动清理。
    - 通过Longhorn UI,可以手动删除不再需要的备份和快照,从而回收空间。
  5. 监控与告警
    - 设置和配置Longhorn的监控功能,以便及时获取存储空间使用率的警告信息,从而能够在存储空间即将耗尽之前采取行动。
  6. 资源优化与规划
    - 根据业务需求和集群资源情况,合理规划存储资源分配,确保资源的有效利用,例如采用适当的QoS策略限制过度消耗存储资源的应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker学习笔记 三-----docker安装部署

我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…

QGraphicsView的使用,view坐标,scene坐标,item坐标

Graphics View绘图构架 QGraphicsScene&#xff08;场景&#xff09;&#xff1a;可以管理多个图形项QGraphicsItem&#xff08;图形项&#xff09;&#xff1a;也就是图元&#xff0c;支持鼠标事件响应。QGraphicsView&#xff08;视图&#xff09;&#xff1a;关联场景可以让…

数据科学详解与人工智能关系

一、数据科学是什么 数据科学是一个混合交叉学科&#xff0c;它涉及数学、统计学、计算机科学和领域知识&#xff0c;旨在从数据中提取有意义的信息和知识。数据科学家利用各种技术和工具来收集、处理、分析和解释大量的数据&#xff0c;以便为组织和企业做出决策和预测。数据科…

Vue3:路由组件的props用法

一、情景说明 路由组件间&#xff0c;传递参数时&#xff0c;更优雅的写法 Vue3的写法和Vue2的写法基本相似&#xff0c;就是接收参数的组件&#xff0c;略有不同 Vue2的写法&#xff1a;https://blog.csdn.net/Brave_heart4pzj/article/details/136283870 二、案例 1、传参…

canvas跟随鼠标移动画带透明度的线

提示&#xff1a;canvas画线 文章目录 前言一、带透明度的线二、试错&#xff0c;只有lineTo的时候画&#xff0c;只有最后地方是透明度的三、试错&#xff0c;只存上一次的点&#xff0c;线会出现断裂的情况总结 前言 一、带透明度的线 test.html <!DOCTYPE html> &l…

小小知识点-produce, product, production.

produce做动词的意思就不多说了。主要区别这三个名词&#xff1a;produce, product, production.produce v.生产; 制造; 引起; 产生; 招致; 出示; 制作; 导演; 播放; 播送; 使(线段)延长&#xff1b;n.产品; 物产; 成果; 结果&#xff1b; product n. 作品; 产品; 积; 结果; 产…

Linux:执行命令的命令eval与Bash解析命令的方式

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 eval命令用于接收参数&#xff0c;并将这些参数作为一行命令执行&#xff0c;这也许会使人困惑&#xff0c;为什么我不能直接执行命令而需要使用eval命令间接执行呢&…

看了一篇开源作者文章我沉默了良久还是发一篇心情文章

开源框架 NanUI 项目宣布将暂停开发&#xff0c;作者转行卖钢材的新闻让我心生悲意&#xff0c;开源作者生存现状很多人并不了解&#xff0c;在开源社区里能赚到钱的毕竟是少数丛林法则在开源社区同样适用&#xff0c;看了开源框架 NanUI 项目宣布将暂停开发&#xff0c;作者转…

MySQL数据库事务介绍

前言 在MySQL数据库中&#xff0c;事务&#xff08;Transaction&#xff09;是指一组SQL语句的执行序列&#xff0c;这些SQL语句要么全部执行成功&#xff0c;要么全部执行失败&#xff0c;保证数据库的一致性和完整性&#xff1b;用于操作量大、复杂度高的数据。 目录 一、…

Python之Web开发中级教程----Django站点管理

Python之Web开发中级教程----Django站点管理 网站的开发分为两部分&#xff1a;内容发布和公共访问 内容发布是由网站的管理员负责查看、添加、修改、删除数据 Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块, 需要按照如下步骤操作 : 1.管理界面本地…

如何一键升级 package.json 下所有依赖的版本

要一键升级package.json下所有依赖的版本&#xff0c;你可以使用npm-check-updates这个工具。首先&#xff0c;你需要全局安装这个工具&#xff1a; npm install -g npm-check-updates安装完成后&#xff0c;运行以下命令来更新package.json文件中的所有依赖到最新版本&#x…

Deep Graph Representation Learning and Optimization for Influence Maximization

Abstract 影响力最大化&#xff08;IM&#xff09;被表述为从社交网络中选择一组初始用户&#xff0c;以最大化受影响用户的预期数量。研究人员在设计各种传统方法方面取得了巨大进展&#xff0c;其理论设计和性能增益已接近极限。在过去的几年里&#xff0c;基于学习的IM方法的…

数据库访问技术主要包括哪些?

数据库访问技术主要包括以下几种&#xff1a; SQL(Structured Query Language)&#xff1a; SQL是一种用于管理和操作关系型数据库的标准化语言。它包括数据查询(SELECT)、数据更新(INSERT、UPDATE、DELETE)、数据定义(CREATE、ALTER、DROP)、数据控制(GRANT、REVOKE)等功能。S…

面试 Java 基础八股文十问十答第十七期

面试 Java 基础八股文十问十答第十七期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;迭代器 Iterator 是什…

【BFS广度优先搜索专题】【蓝桥杯备考训练】:母亲的牛奶、走迷宫、八数码1、八数码2、全球变暖【已更新完成】

目录 1、母亲的牛奶&#xff08;usaco training 1.5&#xff09; 2、走迷宫&#xff08;模板&#xff09; 3、八数码1&#xff08;模板&#xff09; 4、八数码2&#xff08;《算法竞赛进阶指南》& HDU1043&#xff09; 5、全球变暖&#xff08;第九届蓝桥杯省赛C &…

企业如何利用数字工厂管理系统打造自动化产线

随着信息技术的飞速发展&#xff0c;数字化转型已成为企业提升生产效率、降低成本、优化管理的重要手段。数字工厂管理系统作为数字化转型的核心组成部分&#xff0c;其在打造自动化产线方面的作用日益凸显。本文将探讨企业如何利用数字工厂管理系统打造自动化产线&#xff0c;…

【QED】斐波那契游戏

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 总结 题目 题目链接&#x1f517; 斐波那契数列指的是这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#x…

边缘自动隐藏窗体,透明度切换,同步父窗体标签切换winform

一、实现功能 默认的标签栏(superTabControl) 可以设置隐藏,即可实现全屏最大化。通过列表切换打开的标签页。用于定制B/S模式系统显示更个性,自定义样式,简介 安全 兼容性好。 二、主要代码 private void Time_Tick(object sender, EventArgs e) {获取主屏

亚马逊AWS展示高效纠错的全新量子比特!

亚马逊网络服务公司&#xff08;AWS&#xff09;在量子计算的纠错技术领域取得了显著成就&#xff0c;极大地简化了量子系统的复杂性和资源需求。他们的研究人员通过采用“双轨擦除”量子比特&#xff08;dual-rail erasure qubit&#xff09;技术&#xff0c;有效地克服了量子…

推荐一种Bean注入方式——开发经验

我们都知道三种Bean注入的方式分别是属性注入&#xff0c;setter方法注入&#xff0c;构造器注入。这三种Bean注入的方式各有优缺点&#xff0c;但是相对来说更推荐使用构造器注入的方式。 1、构造器注入的优缺点 优点&#xff1a; 1、可以注入不可变对象 因为构造方法注入是…