1. 问题描述
gitlab CI任务,拉基础镜像的时候报错no space left on device:
1 | failed to register layer: Error processing tar file(exit status 1): write /root/miniconda3/envs/cv/lib/python3.7/site-packages/xxx.so: no space left on device |
2. 排查思路
问题原因猜测:
- 偶发问题?确认是否能稳定复现
- 磁盘空间问题?确认runner所在主机的磁盘空间
- CICD配置问题?确认CICD配置,检查用法是否正确
- runner问题?重启runner,再次尝试复现
排查确认:
- 问题偶发复现,都是在同一个runner所在主机
- runner所在主机的磁盘空间充足
- CICD配置正确
- 重启runner后无法复现,问题解决了,说明是runner问题。但是过几天会再次复现,需要继续定位根因。
3. runner问题排查
出问题的runner,使用的执行器是 docker machine executor
docker machine类型的执行器,特点是先创建VM,然后在VM中执行作业。
了解了这个特点,我们就能知道报错磁盘满的并不是runner所在宿主机,而是实际执行作业的VM。
1、登录到执行作业的VM进行确认
1 | docker-machine ls |
经确认,确实是执行作业的VM磁盘满了。因为runner所在宿主机磁盘充足,因此解决办法是给VM扩磁盘。
2、VM磁盘扩容
因此VM是受runner管理的,所以最好不要通过docker-machine
命令手动扩容,而是通过修改runner配置来修改。
1 | sudo vim /etc/gitlab-runner/config.toml |
config.toml中的virtualbox-disk-size
修改到期望的值:
1 | ... |
3、重启runner
1 | gitlab-runner restart |
重启runner后,我们可以看到VM被重建了。
4、确认磁盘大小
1 | docker-machine ssh xxx |
以上,问题解决。