GitLab Runner 突然无法使用 Docker Machine 和 AWS Autoscaling 运行作业

Mor*_*itz 18 amazon-web-services docker gitlab-ci gitlab-ci-runner docker-machine

我使用 GitLab Runner 在 AWS EC2 Spot 实例上运行 CI 作业,并使用 Docker Machine 的自动缩放功能。

突然,今天 GitLab CI 无法运行作业,并向我显示了我想要启动的所有作业的以下作业输出:

Running with gitlab-runner 14.9.1 (f188edd7)
  on AWS EC2 runner ...
Preparing the "docker+machine" executor
10:05
ERROR: Preparation failed: exit status 1
Will be retried in 3s ...
ERROR: Preparation failed: exit status 1
Will be retried in 3s ...
ERROR: Preparation failed: exit status 1
Will be retried in 3s ...
ERROR: Job failed (system failure): exit status 1
Run Code Online (Sandbox Code Playgroud)

我在 AWS 控制台中看到 EC2 实例确实已创建,但实例总是再次被 GitLab Runner 立即停止。

GitLab Runner 系统日志显示以下错误:

ERROR: Machine creation failed                      error=exit status 1 name=runner-eauzytys-gitlab-ci-1651050768-f84b471e time=1m2.409578844s
ERROR: Error creating machine: Error running provisioning: error installing docker:   driver=amazonec2 name=runner-xxxxxxxx-gitlab-ci-1651050768-f84b471e operation=create
Run Code Online (Sandbox Code Playgroud)

所以这个错误似乎与 Docker 机器有关。将 GitLab Runner 以及 GitLab 的 Docker Machine 分支升级到最新版本并不能修复该错误。我正在使用 GitLab 14.8 并尝试了 GitLab Runner 14.9 和 14.10。

这可能是什么原因?

Mor*_*itz 20

更新:

与此同时,GitLab 发布了新版本的 Docker Machine 分支,将默认 AMI 升级到 Ubuntu 20.04。这意味着将 Docker Machine 升级到 GitLab 发布的最新版本将解决该问题,而无需更改运行器配置。可以在此处找到最新版本。

原始解决方法/修复:

在运行程序配置中显式指定 AMI,并且不再依赖默认的 AMI,即向"amazonec2-ami=ami-02584c1c9d05efa69"您的 AMI添加类似内容MachineOptions

MachineOptions = [
  "amazonec2-access-key=xxx",
  "amazonec2-secret-key=xxx",
  "amazonec2-region=eu-central-1",
  "amazonec2-vpc-id=vpc-xxx",
  "amazonec2-subnet-id=subnet-xxx",
  "amazonec2-use-private-address=true",
  "amazonec2-tags=runner-manager-name,gitlab-aws-autoscaler,gitlab,true,gitlab-runner-autoscale,true",
  "amazonec2-security-group=ci-runners",
  "amazonec2-instance-type=m5.large",
  "amazonec2-ami=ami-02584c1c9d05efa69",  # Ubuntu 20.04 for amd64 in eu-central-1
  "amazonec2-request-spot-instance=true",
  "amazonec2-spot-price=0.045"
]
Run Code Online (Sandbox Code Playgroud)

您可以在此处获取 Ubuntu AMI ID 列表。请务必选择适合您的 AWS 区域和实例架构且受 Docker 支持的一种。

解释:

GitLab Runner / Docker Machine EC2 驱动程序使用的默认 AMI 是 Ubuntu 16.04。Docker Machine 所依赖的Docker 安装脚本可在https://get.docker.com/上找到,但最近似乎已停止支持 Ubuntu 16.04。因此,Docker 在 Docker Machine 生成的 EC2 实例上安装失败,并且作业无法运行。

另请参阅GitLab 问题。

AzureGCP也面临着类似的问题。

  • 只是为了方便起见:如果您想使用配置运行程序的相同 ubuntu,您可以通过以下方式获取 ami:EC2->实例->实例 ID(来自管理器)->详细信息-> AMI ID。 (3认同)