docker -- images镜像消失问题排查

1. 问题描叙

安装model-serving组件时,错误日志输出push时对应的tag不存在,导致镜像推送失败

2. 问题排查

bash 复制代码
# 找到对应镜像,尝试手动推送
docker images|grep mlserver

# 发现未找到,尝试手动load
cd model-serving/images
docker load -i mlserver.tar.gz

# 等待加载完成,再次通过docker images查询时镜像消失

# 查询磁盘容量
df -h
# 发现磁盘空间已达85%

3. 问题原因

k8s节点压力驱逐: 平台镜像缓存目录时 /srv/steamer/docker,是保存在 / 目录下,当 / 目录空间使用量达到85%时,应用kubelet镜像驱逐策略删除镜像

bash 复制代码
# kubelet 配置
# 当前云平台配置文件内地址:/srv/steamer/kubelet/config.yaml
# 通过命令 ps -ef|grep kubelet查询 --config参数
evictionHard:
imagefs.available: 0%
memory.available: 0%
nodefs.available: 0%
nodefs.inodesFree: 0%

# evictionHard 硬驱逐
# 如果`imagefs`件系统满足驱逐条件,kubelet 将删除所有未使用的镜像(未被Pod引用的镜像)

4. 解决方案

text 复制代码
1. 清除 / 目录下无用或无效文件,释放磁盘空间
2. 增加/目录的容量,或者新增一个磁盘作为镜像的存放地址,在做节点环境准备时,要考虑镜像占用的空间
3. .新增一块磁盘作为dockers镜像启动目录,切换镜像缓存目录
bash 复制代码
==> 修改dockers启动参数中 --graph 参数为指定目录
# 获取其sevice文件
systemctl status docker.service
# 获取其启动参数
cat /usr/lib/systemd/system/docker.service
# 获取其环境变量
# cat /etc/default/docker
# 修改其启动参数--graph为指定新目录

# 同步数据
rsync -avz /srv/steamer/docker /home/wjy/docker/

# 重启dockers
systemctl daemon-reload
systemctl restart docker