K8S容器空间不足问题分析和解决

如上图,今天测试环境的K8S平台出现了一个问题,其中的一个容器报错:Free disk space below threshold. Available: 3223552 bytes (threshold: 10485760B),意思服务器硬盘空间不够了。这个问题怎么产生的,又怎么解决的呢?

一、问题分析

这个容器是部署在k8s集群的一个工作节点,该工作节点的磁盘使用率已经达到了99%,但是Kubernetes的垃圾回收机制似乎没有生效,可能有以下几个原因:

1、镜像垃圾回收阈值设置过高
  • 默认情况下,--image-gc-high-threshold的值为85,表示只有当磁盘使用率达到85%时才会触发镜像垃圾回收。
  • 如果你的节点磁盘使用率在达到85%之前就已经接近满载,那么垃圾回收机制可能无法及时释放足够的空间。

2、死亡容器和未使用镜像占用空间较小

  • Kubernetes的垃圾回收机制主要针对已停止的容器(dead containers)和未使用的镜像。
  • 如果你的节点上运行的大部分容器都是活动的,并且镜像都在被使用,那么垃圾回收可能无法释放太多空间。

3、其他非容器相关的文件占用了大量磁盘空间

  • Kubernetes的垃圾回收只会清理停止的容器和未使用的镜像,但不会删除其他文件。
  • 如果你的节点上有大量非容器相关的文件(如日志文件、数据文件等)占用了磁盘空间,垃圾回收机制无法处理这些文件。

4、垃圾回收机制的执行频率不足

  • Kubernetes的垃圾回收机制是周期性运行的,默认情况下每分钟运行一次。
  • 如果你的节点磁盘使用率增长非常快,垃圾回收的执行频率可能跟不上磁盘空间的消耗速度。

二、解决问题

为了解决这个问题,可以尝试以下几种方法:

1、手动清理

  • 你可以使用docker container prune命令删除所有停止的容器。
  • 使用docker image prune命令删除所有悬空(dangling)镜像,即没有被任何容器引用的镜像。

2、调整参数

将--image-gc-high-threshold--image-gc-low-threshold两个参数的值进行调整,使其更接近实际的磁盘使用情况。例如,你可以将--image-gc-high-threshold设置为75,将--image-gc-low-threshold设置为70,以便在磁盘使用率较高时更积极地进行垃圾回收。

3、定期清理

  识别并清理节点上占用大量磁盘空间的非容器相关文件,如日志文件、临时文件等。

4、扩容

考虑增加节点的磁盘容量或向集群中添加更多节点,以分散工作负载和存储压力。

5、优化应用

如果可能,尝试优化应用程序和工作负载,减少不必要的磁盘空间使用。

本次问题处理中,我们先用手动删除所有停止的容器和镜像,然后调整了--image-gc-high-threshold和--image-gc-low-threshold参数的值,改为75,最后配置了一个监控任务,磁盘空间超过80%就提示告警。

请注意,在对生产环境进行任何更改之前,务必仔细评估可能的影响并制定合适的策略。根据你的具体情况和需求,选择最适合的方法来解决节点磁盘空间不足的问题。

三、相关知识

除了上面使用的方法,我们要在Kubernetes中自动清理过期的容器和镜像,还可可以利用Kubernetes的内置机制和一些第三方工具。下面是几种方法:

1、配置容器的 restartPolicy 和 terminationGracePeriodSeconds

  • 对于一次性任务或短期任务,可以将Pod的 restartPolicy 设置为 Never 或 OnFailure,确保容器退出后不会自动重启。
  • 设置合适的 terminationGracePeriodSeconds 值,控制容器优雅终止的宽限期,超过该时间后Kubernetes会强制删除容器。

2、使用 TTL Controller 自动清理已完成的Job

  • Kubernetes的 TTL Controller 可以自动清理已完成的Job及其关联的Pod。
  • 在Job的spec中设置 .spec.ttlSecondsAfterFinished 字段,指定Job完成后的TTL时间,超过该时间Job和Pod会被自动删除。

3、利用第三方工具如 kube-janitor 或 descheduler

  • kube-janitor 是一个自动清理Kubernetes资源的工具,可以根据配置的规则定期清理过期的资源,包括Pod、Job、ConfigMap等。
  • descheduler 可以根据策略驱逐Pod,释放节点资源,可以用于清理长时间运行的Pod。

4、使用自定义脚本或控制器

  • 可以编写自定义脚本或控制器,定期查询和清理过期的容器和镜像。
  • 可以利用Kubernetes API或客户端库如 client-go 来实现自定义逻辑。

以上是一些常见的方法,可以根据具体需求选择合适的方案。同时,也要注意配置适当的资源限制和请求,避免不必要的资源浪费。定期监控集群的资源使用情况,及时调整和优化。

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

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

相关文章

十六进制颜色值对应的百分比

例如#ED242E这个颜色的30%的色值是多少? #ED242E4D 原来的色值HEX 百分比:0% HEX:00百分比:1% HEX:30百分比:2% HEX:50百分比:3% HEX:80百分比:4% HEX:A0百分比:5% HEX:D0百分比:6% HEX:F0百分比:7% HEX:12百分比:8% HEX:14百分比:9% HEX:17百分比:10% HEX:1A百分比:11% HEX:1…

力扣LCR143---子结构判定(先序递归、Java、中等题)

题目描述: 给定两棵二叉树 tree1 和 tree2,判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 注意,空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 示例 1: 输入:tree…

抖店商家必看:“违规操作”扣除保证金2000块!这些细节要避免!

哈喽~我是电商月月 很多没经验的新手朋友开抖店都会遇到一个问题: 那就是开抖音小店时,因操作不当被扣除保证金的该怎么办? 实话实说,被判违规扣除保证金是能申诉的。但通过几率几乎是没有的 所以想要继续开店,只能…

蓝桥杯每日一题:日期差值(日期问题)

题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。 输入格式 输入包含多组测试数据。 每组数据占两行,分别表示两个日期,形式为 YYYYMMDD。 输出格式 每组数据输出…

eclipse .project

.project <?xml version"1.0" encoding"UTF-8"?> <projectDescription> <name>scrm-web</name> <comment></comment> <projects> </projects> <buildSpec> <buil…

HarmonyOS 开发-短视频切换实现案例

介绍 短视频切换在应用开发中是一种常见场景&#xff0c;上下滑动可以切换视频&#xff0c;十分方便。本模块基于Swiper组件和Video组件实现短视频切换功能。 效果图预览 使用说明 上下滑动可以切换视频。点击屏幕暂停视频&#xff0c;再次点击继续播放。 实现思路 使用Sw…

Linux锁的使用

一、临界资源与临界区 多线程会共享例如全局变量等资源&#xff0c;我们把会被多个执行流访问的资源称为临界资源&#xff0c;我们是通过代码访问临界资源的&#xff0c;而我们访问临界资源的那部分代码称为临界区。 实现一个抢票系统 只有一个线程抢票时 #include <ios…

Docker速成:新手变专家!

Docker介绍 容器历史 1、Chroot Jail 就是常见的chroot命令的用法。它在1979年的时候就出现了&#xff0c;被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。 2、The FreeBSD Jail &#xff08;监狱&#xff09;实现了操作系统级别的虚拟化&#xff0c;他…

外包干了25天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Jeesite开源项目中ECharts折线图MarkPoint无法绘制问题的解决方案

Jeesite开源项目中ECharts折线图MarkPoint无法绘制问题的解决方案 在Jeesite开源项目的开发中&#xff0c;数据可视化是一个不可或缺的环节。ECharts作为一个功能强大的数据可视化库&#xff0c;在项目中经常被用来绘制各种图表。然而&#xff0c;在绘制折线图时&#xff0c;有…

【python】python的选择语句的三个题目

1.乘坐飞机时&#xff0c;有些航班没有行李额度&#xff0c;当乘客的行李小于等于20公斤时&#xff0c;按每公斤1.68元收费&#xff1b;大于20公斤时&#xff0c;按每公斤1.98元收费&#xff0c;编写程序计算收费情况&#xff08;保留两位小数&#xff09; air_bagfloat(input…

ubuntu如何限制系统日志大小?

ubuntu中的系统日志文件件如不及时清理&#xff0c;时间长了会占用硬盘的空间&#xff0c;如下所示&#xff1a; /var/log/journal/4321d62ad63d44cbbc4dff3b6e282b26/system9f5b4d5081d24b319f8b4677cf673a97-0000000000184ca6-00061412655a5a79.journal: 128M /var/log/journ…

swiftUI macOS使用webview加载外部网址

import SwiftUI import WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")WebView(urlString: "https://aweb123.com").frame(maxWidth: .infinity, maxHeight: .infinity) // 让 WebView 占据整个可用空间}.frame(minWidth: 20…

欧拉回路算法

1 基本概念 1.1 欧拉路径和欧拉回路 欧拉回路&#xff1a; 在一个图中&#xff0c;由i点出发&#xff0c;将每个边遍历一次最终回到出发点i的一条路径。具有欧拉回路的图称为欧拉图。 无向图 存在欧拉回路的充要条件是所有的点的度数均为偶数 因为每个点的度数为偶数&#xf…

OpenHarmony实战:轻量系统STM32F407芯片移植案例

介绍基于STM32F407IGT6芯片在拓维信息Niobe407开发板上移植OpenHarmony LiteOS-M轻量系统&#xff0c;提供交通、工业领域开发板解决方案。 移植架构采用Board与SoC分离方案&#xff0c;使用arm gcc工具链Newlib C库&#xff0c;实现了lwip、littlefs、hdf等子系统及组件的适配…

查找同一个进程显示在任务栏上的多个窗口

有的程序可以打开多个窗口并显示在任务栏上。某些情况下&#xff0c;我们需要找到窗口做些事情时&#xff0c;可以参考下面的代码。 public static class Win32Api{[DllImport("user32.dll", SetLastError true)]public static extern bool EnumWindows(EnumWindows…

Todesstern:一款针对注入漏洞识别的强大变异器引擎

关于Todesstern Todesstern是一款功能强大的变异器引擎&#xff0c;该工具基于纯Python开发&#xff0c;该工具旨在辅助广大研究人员发现和识别未知类型的注入漏洞。 Todesstern翻译过来的意思是Death Star&#xff0c;即死亡之星&#xff0c;该工具是一个变异器引擎&#xff…

重庆交通大学2024年蓝桥杯测试赛1题解(Java版本)

1、抓钱 题目描述: 有一堆纸币,面值为1元、5元、10元、20元、50元、100元的各有a, b, c, d, e, f张。现在允许你抓n次,每次只能抓一张纸币,请问最多能抓到多少元钱。 输入描述: 输入数据占两行,第一行为6个正整数a, b, c, d, e, f,用空格隔开,这些正整数都是≤10。…

【剪映专业版】03云空间扩容

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 个人云空间&#xff1a;多端同步及素材、草稿保存 云空间默认为512M&#xff0c;可以免费提升至3GB 访问剪映官网-全能易用的桌面端剪辑软件-轻而易剪 上演大幕&#xff0c;后进入工作台 点击消息 小组云空间&#xff…