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

GitLab Runner suddenly fails to run jobs using Docker Machine and AWS Autoscaling

我将 GitLab Runner 用于 AWS EC2 spot 实例上的 运行ning CI 作业,将其自动缩放功能与 Docker 机器一起使用。

突然之间,今天 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

我在 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

所以错误接缝以某种方式与 Docker 机器有关。将 GitLab Runner 以及 GitLab 的 Docker Machine fork 升级到最新版本并不能修复错误。我正在使用 GitLab 14.8 并尝试了 GitLab Runner 14.9 和 14.10。

这可能是什么原因?

更新:

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

原文Workaround/fix:

在您的 运行ner 配置中明确指定 AMI,不再依赖默认配置,即将 "amazonec2-ami=ami-02584c1c9d05efa69" 添加到您的 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"
]

您可以获得 Ubuntu 个 AMI ID 的列表 here. Be sure to select one that fits your AWS region and instance architecture and is supported by Docker

解释:

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

另见 this GitLab 问题。

Azure and GCP 遇到类似问题

我从昨天开始就遇到了同样的问题。

这可能与 GitLab 发布 15.0 有重大变化有关(即将 live on GitLab.com sometime between April 23 – May 22

添加字段 AMI 解决了我这边的问题。

确保 select 是 Ubuntu 的 ami,而不是 Debian,并且您的 aws 帐户已订阅它

我做了什么

  1. 在 aws marketplace 中订阅 Ubuntu 亚马逊图片(Ubuntu 20.04 LTS - Focal)
  2. select 启动实例,选择区域,然后复制显示的 ami

正如莫里茨指出的那样:

添加:

MachineOptions = [

  "amazonec2-ami=ami-02584c1c9d05efa69",
]

问题已解决。

我也想补充一下,去​​ here 找到与您所在地区相对应的 ubuntu。阿美族是地区特定的

使用新的 AMI 工作了一段时间,但一段时间后 /etc/gitlab-runner/config.toml 恢复到旧配置。所做的所有更改均已消失并自动重置。任何人都知道为什么 config.toml 文件还原以及如何防止它?