为弹性伸缩 Docker Machine 安装和注册极狐GitLab Runner
弹性伸缩功能引入于极狐GitLab Runner 1.1.0。
如果您想了解弹性伸缩,请参见弹性伸缩文档。
准备环境
如果您想使用弹性伸缩功能,Docker 和极狐GitLab Runner 必须安装在同一台机器上:
- 登录新的基于 Linux 的机器,这个机器作为堡垒服务器,Docker 在其上生成新机器。
- 安装极狐GitLab Runner。
- 从 Docker Machine 派生安装 Docker Machine。
- 可选但推荐。准备代理容器镜像库和缓存服务器,和弹性伸缩 Runner 一起使用。
配置极狐GitLab Runner
- 熟悉与
gitlab-runner
一起使用docker-machine
的核心概念: -
第一次使用 Docker Machine 时,最好使用您的 Docker Machine 驱动手动执行
docker-machine create ...
命令。 和您打算在 极狐GitLab Runner MachineOptions 部分配置的选项一起运行这个命令。 这会合理设置 Docker Machine 环境,也会对特定选项进行很好的验证。在这之后,您可以使用docker-machine rm [machine_name]
销毁机器并启动 Runner。多个第一次使用时就完成的docker-machine create
的并发请求是不好的。 当使用docker+machine
执行器,Runner 或许会启动很少的并发docker-machine create
命令。如果之前从未在这个环境中使用过 Docker Machine,每个启动的进程都会试图准备 SSH 密钥和 SSL 证书(极狐GitLab Runner 和弹性伸缩所生成的机器上的 Docker Engine 之间的 Docker API 鉴权), 并且这些并发进程互相干扰。在非工作环境中这些可以结束。 这也是您第一次使用 Docker Machine 设置极狐GitLab Runner 时手动创建测试机很重要的原因。 -
注册 Runner 并选择
docker+machine
执行器。 - 编辑
config.toml
并配置 Runner 使用 Docker Machine。详情请参见极狐GitLab Runner 弹性伸缩。 - 现在您可以试着在您的项目中启动新流水线。几秒钟后,
如果您运行
docker-machine ls
,您应该能看见正在创建的新机器。
升级极狐GitLab Runner
- 检查您的操作系统是否配置了自动重启极狐GitLab
Runner(例如,检查服务文件):
-
如果配置了自动重启,确保服务管理器配置成使用
SIGQUIT
并使用服务工具停止进程:# For systemd sudo systemctl stop gitlab-runner # For upstart sudo service gitlab-runner stop
-
如果没配置自动重启,您可能需要手动停止进程:
sudo killall -SIGQUIT gitlab-runner
发送SIGQUIT
信号会优雅关闭进程。进程不再接受新作业,当前作业完成后,会马上退出。 -
-
一直等待,直到极狐GitLab Runner 退出。您可以使用
gitlab-runner status
查看它的状态,或使用以下命令等待为时 30 分钟的优雅关闭:for i in `seq 1 180`; do # 1800 seconds = 30 minutes gitlab-runner status || break sleep 10 done
- 您现在可以不打断任何作业安全安装新版本的极狐GitLab Runner 了。
使用 Docker Machine 的派生版本
安装
-
下载合适的
docker-machine
二进制。 复制二进制到可以访问PATH
的位置,使其可执行。 例如,下载并安装v0.16.2-gitlab.20
:curl -O "https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.20/docker-machine-Linux-x86_64" cp docker-machine-Linux-x86_64 /usr/local/bin/docker-machine chmod +x /usr/local/bin/docker-machine
在谷歌计算引擎上使用 GPU
引入于极狐GitLab Docker Machine
0.16.2-gitlab.10
和极狐GitLab Runner 13.9。
您可以使用 Docker Machine 派生创建使用图形处理单元(GPU)的谷歌计算引擎实例。
Docker Machine GPU 选项
如果您想使用 GPU 创建实例,请使用以下 Docker Machine 选项:
选项 | 示例 | 描述 |
---|---|---|
--google-accelerator
| type=nvidia-tesla-p4,count=1
| 指定附属于实例(type=TYPE,count=N 格式)的 GPU 加速器的类型和数量。
|
--google-maintenance-policy
| TERMINATE
| 一直使用 TERMINATE ,因为谷歌云不允许 GPU 实例热迁移。
|
--google-machine-image
| https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110
| GPU 启用的操作系统的 URL。详情请参见可用镜像列表。 |
--google-metadata
| install-nvidia-driver=True
| 这个标记让镜像安装 NVIDIA GPU 驱动。 |
这些参数映射到 gcloud compute
的命令行参数。
详情请参见谷歌关于使用关联 GPU 创建虚拟机的文档。
验证 Docker Machine 选项
如果您想准备您的系统并测试可以使用谷歌计算引擎创建 GPU:
-
为Docker Machine 设置谷歌计算引擎驱动证书。 如果您的虚拟机没有默认服务账号,您可能需要向 Runner 导出环境变量。 如何完成取决于如何发布 Runner。例如:
- 通过
systemd
或upstart
:参见设置自定义环境变量的文档。 - 通过使用 Helm Chart 的 Kubernetes:更新
values.yaml
条目。 - 通过 Docker:使用
-e
选项(例如,docker run -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json gitlab/gitlab-runner
)。
- 通过
-
验证
docker-machine
可以使用预期选项创建虚拟机。 例如,使用单个 NVIDIA Telsa P4 加速器创建n1-standard-1
机器, 用一个名称替代test-gpu
并运行:docker-machine create --driver google --google-project your-google-project \ --google-disk-size 50 \ --google-machine-type n1-standard-1 \ --google-accelerator type=nvidia-tesla-p4,count=1 \ --google-maintenance-policy TERMINATE \ --google-machine-image https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110 \ --google-metadata "install-nvidia-driver=True" test-gpu
-
为了验证 GPU 有效,您需要通过 SSH 进入机器并运行
nvidia-smi
:$ docker-machine ssh test-gpu sudo nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla P4 Off | 00000000:00:04.0 Off | 0 | | N/A 43C P0 22W / 75W | 0MiB / 7611MiB | 3% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
-
移除测试实例以省钱:
docker-machine rm test-gpu
配置极狐GitLab Runner
-
一旦您验证了这些选项,配置 Docker 执行器以在
runners.docker
配置中使用所有可用 GPU。 然后向您的极狐GitLab Runnerrunners.machine
配置中的MachineOptions
设置中添加 Docker Machine 选项。例如:[runners.docker] gpus = "all" [runners.machine] MachineOptions = [ "google-project=your-google-project", "google-disk-size=50", "google-disk-type=pd-ssd", "google-machine-type=n1-standard-1", "google-accelerator=count=1,type=nvidia-tesla-p4", "google-maintenance-policy=TERMINATE", "google-machine-image=https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110", "google-metadata=install-nvidia-driver=True" ]