搜索中...
🔍

未找到相关结果

Akemi

自动清理镜像daemonset

字数统计: 609阅读时长: 2 min
2026/06/16

很多集群规化的时候没规划好,kubelet所在分区总是会因为镜像太多,导致触发85%阈值,也就是会启diskpresure污点,导致pod被驱逐
所以写个脚本放进daemonset里自动定时清理节点上的脚本

  • pod需要挂载到node节点上,以便可以操作节点上的命令来操作磁盘
  • 存在多种架构的CPU,需要打额外架构的镜像

脚本挂载节点nsenter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用nsenter命令
本意是进入命名空间,但是可以进入到PID1的进程也就是initV或者systemd
可以挂载所有命名空间,也就是成为这个节点本身"

Linux 目前有 8 种命名空间(Network, PID, Mount, UTS, IPC, User, Cgroup, Time)

nsenter -t 1 -m -u -i -n -p -- "$@"
nsenter -t 1 -m -u -i -n -p -- /bin/sh -c "$*"


但是有一些要求:
1.共享宿主机 PID 命名空间
2.拥有足够的 Capability(也就是成为特权容器)

lens的node-shell用的也是类似的原理

镜像本体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
脚本与yaml地址:
https://ws-blog-img.oss-cn-hangzhou.aliyuncs.com/wangsheng/20260616131411378.sh
https://ws-blog-img.oss-cn-hangzhou.aliyuncs.com/wangsheng/20260616131425949.yaml
https://ws-blog-img.oss-cn-hangzhou.aliyuncs.com/wangsheng/20260616131434340.sh
https://ws-blog-img.oss-cn-hangzhou.aliyuncs.com/wangsheng/20260616131452672.png

镜像tar:
https://ws-blog-img.oss-cn-hangzhou.aliyuncs.com/wangsheng/20260616131505729.tar

脚本逻辑:
检测容器运行时↓
检测挂载点↓
挂载点超阈值就清理(执行命令比如docker image prune -fa)↓
清理后重新检测↓
如果还超,就全部执行一遍

测试镜像

buildx构建arm镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
使用buildx,docker buildx是Docker官方的下一代构建工具
普通docker build只能构建当前机器架构的镜像,要交叉编译arm64镜像,就需要用buildx

docker buildx version
github.com/docker/buildx v0.29.1 a32761aeb3debd39be1eca514af3693af0db334b

1.注册QEMU用户态模拟器,让x86机器能跑arm64二进制
export http_proxy="http://192.168.10.238:7897"
export https_proxy="http://192.168.10.238:7897"

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
...

2.验证模拟器工作
docker run --rm --platform linux/arm64 alpine:3.18 uname -m
aarch64

3.创建 buildx builder
并且加代理,不然不一定能拉取到镜像,特别是alpine直接是拉不到
docker buildx create --name multiarch --use \
--driver docker-container \
--driver-opt env.HTTP_PROXY=http://192.168.10.238:7897,env.HTTPS_PROXY=http://192.168.10.238:7897
multiarch

4.构建arm64镜像
cd /root/disk-cleaner-daemonset
docker buildx build --platform linux/arm64 -t disk-cleaner:latest-arm64 . --load

5.验证新镜像的架构
docker inspect disk-cleaner:latest-arm64 --format '{{.Architecture}}'
arm64

CATALOG
  1. 1. 脚本挂载节点nsenter
  2. 2. 镜像本体
  3. 3. 测试镜像
  4. 4. buildx构建arm镜像