docker存储路径设置不当引发的一系列问题

189 阅读2分钟

背景:

搭建了一套k3s, 在启动docker的时候使用了默认路径(/var/lib***), 此路径磁盘大小为40G

问题: pod一直处于init状态

当用户返回服务偶尔不能用时, 进行排查, 发现node上所有的资源都是充足的,而且特别关注了一下磁盘的使用率均不到50%, 此时尝试重启了一个pod, 但是在正常的delete pod命令一直不能正常返回,如下图:

此时采用了强制命令进行删除kubectl delete pod --grace-period==0 --force=true podname, 此时对应的pod是成功删除了;

但是在pod重新启动的时候一直处于init状态, 查看了一下此pod的yaml文件,含有一个initContainer 一个Container, 使用describe 查看了处于init的pod, 如下图:

可以发现initContainer的状态为Running, 这就发现此pod一直处于init的原因是因为initContainer 的容器没有完成, 导致container容器不能启动; initConinter中仅仅是执行mkdir, 因此怀疑是磁盘问题; 但是进入pod被调度的宿主机上执行mkdir是可以成功的, 因此排除了磁盘的问题.

此时使用docker ps 查看了一下运行的容器 找到对应initContainer启动的容器, 使用命令docker exec -it Id bash发现无法进入, 此时怀疑docker有问题, 因此使用systemctl status docker查看了服务 ,在此命令展示的界面中出现了不停的kill container 等信息(当时忘记截图了), 此时我们查看docker使用的配置文件发现没有配置使用的路径,即在/etc/docker/daemon.json里面配置为空, 因此采用的是默认的存储路径

!

解决办法

/etc/docker/daemon.json中添加路径,然后重启docker服务即可;

需要注意的是不同的docker版本此参数不同, 使用docker info 查看版本为1.13.1, 因此配置如下:

{"graph":"/test-data/docker"}

如果是较新的版本, 配置如下:

{"data-dir":"/test-data/docker"}