一个计算机技术爱好者与学习者

0%

好好学GitLab:GitLab CI报错no space left on device

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
2
3
docker-machine ls
docker-machine ssh xxx
df -h

经确认,确实是执行作业的VM磁盘满了。因为runner所在宿主机磁盘充足,因此解决办法是给VM扩磁盘。

2、VM磁盘扩容
因此VM是受runner管理的,所以最好不要通过docker-machine命令手动扩容,而是通过修改runner配置来修改。

1
sudo vim /etc/gitlab-runner/config.toml

config.toml中的virtualbox-disk-size修改到期望的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
...
[runners.machine]
IdleCount = 5
MaxGrowthRate = 1
IdleTime = 1800
MachineDriver = "virtualbox"
MachineName = "auto-scale-%s"
MachineOptions = [
"engine-registry-mirror=http://xxxxxx:5000",
"virtualbox-memory=4048",
"virtualbox-disk-size=204800",
"virtualbox-cpu-count=2"
]

3、重启runner

1
2
gitlab-runner restart
docker-machine ls

重启runner后,我们可以看到VM被重建了。

4、确认磁盘大小

1
2
docker-machine ssh xxx
df -h

以上,问题解决。