很多集群规化的时候没规划好,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命令 本意是进入命名空间,但是可以进入到PID为1的进程也就是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: https: https: https:
镜像tar: https:
脚本逻辑: 检测容器运行时↓ 检测挂载点↓ 挂载点超阈值就清理(执行命令比如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: 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
|