1. 版本申明¶
版本 | 修改内容 | 修改时间 |
---|---|---|
v1.0 | 初始化 | 5/11/2023 |
v1.1 | 更新containerd与run包内容 | 1/15/2024 |
v1.2 | 更新一些格式与内容 | 4/8/2024 |
v1.3 | 更新一些格式 | 4/9/2024 |
2. 简介¶
Enflame-container-toolkit 是一个容器扩展工具套件,通过这一工具套件使得燧原的GCU卡可以在docker、containerd等容器内使能。k8s-device-plugin 与enflame-container-toolkit组合使用以支撑Enflame GCU 在K8S系统内的资源调度,本文档主要描述enflame-container-toolkit的单独使用方式。
Enflame-container-toolkit依赖于以下三个条件:
Enflame Driver已经在OS里安装好,缺少这一步会找不到Enflame GCU加速卡;
Docker-ce 已经在OS里安装好;
用户: root, 或者
sudo [command]
, 安装需要root权限。
3. container-toolkit安装包¶
在topscloud/container-toolkit安装包里涵盖以下几个文件,如下:
container-toolkit_${VERSION}/
├── config.toml.template
├── daemon.json.template
├── enflame-container-toolkit_${VERSION}_amd64.deb
├── enflame-container-toolkit_${VERSION}_x86_64.run
├── enflame-container-toolkit_${VERSION}_x86_64.rpm
├── install.sh
├── LICENSE.md
└── README.md
1) enflame-container-toolkit_${VERSION}_amd64.deb 是 ubuntu 系统安装包,安装命令:
# dpkg -i enflame-container-toolkit_${VERSION}_amd64.deb
2)enflame-container-toolkit_${VERSION}_x86_64.rpm 是 tlinux ,centos,redhat系统安装包,安装命令:
# rpm -ivh enflame-container-toolkit_${VERSION}_x86_64.rpm
3)enflame-container-toolkit_${VERSION}_x86_64.run 是linux run安装包,安装命令:
# ./enflame-container-toolkit_${VERSION}_x86_64.run
使用帮助如下:
Usage: ./enflame-container-toolkit.run [--install | --uninstall | --help | --x]
Command:
--install install the run file, as the default
--uninstall uninstall the run file
--x decompress the package
--help show help usage
4)daemon.json.template为 docker /etc/docker/daemon.json 配置模板,内容如下:
{
"default-runtime": "enflame",
"runtimes": {
"enflame": {
"path": "/usr/bin/enflame-container-runtime",
"runtimeArgs": []
}
},
"registry-mirrors": ["https://mirror.ccs.tencentyun.com", "https://docker.mirrors.ustc.edu.cn"],
"insecure-registries": ["127.0.0.1/8"],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-shm-size": "1G",
"default-ulimits": {
"memlock": { "name":"memlock", "soft": -1, "hard": -1 },
"stack" : { "name":"stack", "soft": 67108864, "hard": 67108864 },
"nofile": {"name": "nofile","soft": 65536, "hard": 65536}
},
"data-root": "/var/lib/docker"
}
可以根据自己的具体需求,更改daemon.json.template 的内容,然后copy到 /etc/docker下,这个配置文件会将docker的default-runtime 设置成enflame container runtime。需要注意的是考虑到安全问题,安装 enflame-container-toolkit 时,当OS 的 /etc/docker 下已经有 daemon.json 存在,则不会覆盖;
5) config.toml.template, containerd 配置文件;
6) install.sh, 一键安装脚本, 执行 ./install.sh 会将enflame-container-toolkit自动安装到系统;
7) LICENSE.md ,版权说明;
8) README.md,readme 文件。
4. 安装container-toolkit¶
在topscloud_xxx内执行:
cd container-toolkit_x.x.x
./install.sh
以上步骤会把enflame-container-toolkit 安装进系统.
注:
1)这一步需要注意daemon.json 的内容要根据自己的实际情况按需修改,再安装进/etc/docker下,默认如果/etc/docker/daemon.json 已存在则不会覆盖;
2)这一步需要注意config.toml 的内容要根据自己的实际情况按需修改,再安装进/etc/containerd下,默认如果/etc/containerd/config.toml 已存在则不会覆盖;
3)要确保deamon.json 里 “default-runtime”: 为”enflame”, 不然docker识别不了enflame GCU;
4)对应的logs目录为/var/log/enflame/enflame-container-runtime,可以从这里获取container-toolkit 的运行日志信息;
5. 环境变量¶
enflame-container-toolkit 采用 ENFLAME_VISIBLE_DEVICES
这个环境变量挂载GCUs进容器内。
5.1. 这个变量支持的值¶
0,1,2
,GCU-0,GCU-1,GCU-2
…: 采用逗号,
分割.all
: 默认值,挂载所有的GCUs设备进容器内.none
: 全部不挂载void
为 空 或 未设置,这时enflame-container-runtime
等同runc
.
5.2. GCU挂载用例¶
直接docker挂载用例如下:
### all gcus
$ docker run -it --network host -e ENFLAME_VISIBLE_DEVICES=all enflame/enflame:latest /bin/bash
### gcu 0,1,2
$ docker run -it --network host -e ENFLAME_VISIBLE_DEVICES=0,1,2 enflame/enflame:latest /bin/bash
### gcu 0
$ docker run -it --network host -e ENFLAME_VISIBLE_DEVICES=0 enflame/enflame:latest /bin/bash
### enflame runtime
$ docker run -it --network host --runtime enflame enflame/enflame:latest /bin/bash
### enflame-docker
$ enflame-docker run -it --network host enflame/enflame:latest /bin/bash
6. 配置文件与日志¶
1) 配置文件路径 :/etc/enflame-container-runtime/config.toml
,内容如下:
[enflame-container-cli]
debug = "/var/log/enflame/enflame-container-runtime-hook.log"
environment = []
ldconfig = "@/sbin/ldconfig.real"
[enflame-container-runtime]
# debug = "/var/log/enflame/enflame-container-runtime.log"
2)日志路径:/var/log/enflame
7. 查看工具版本号¶
container-toolkit包含三个可执行组件
1)enflame-container-runtime –version,可查看enflame-container-runtime组件对应的版本号;
2)enflame-container-runtime-hook –version,可查看enflame-container-runtime-hook组件对应的版本号;
3)enflame-container-cli –version, 可查看enflame-container-cli组件对应的版本号。
8. 常见问题¶
1)最低runc版本是什么?
建议的 runc 最低版本为 1.0.0-rc10
。
2)如果是直接调用containerd的场景,比如使用k8s 1.24以上版本,containerd应该如何配置?
安装container-toolkit软件包后,如果之前没有配置过containerd,会新生成一份containerd配置,如果之前存在containerd配置,则会在/etc/containerd/
下生成一份template模板config.toml.template
,用户可以参考该模板去配置enflame runtime。
3)如果使用ctr命令行映射gcu设备,发现在非特权模式下gcu设备没有成功映射,该如何解决?
需要在ctr run命令后加上--runc-binary /usr/bin/enflame-container-runtime
来指定enflame runtime的路径,就可以正常映射gcu设备。
4)如何配置k8s 1.24以上镜像源?
以内网为例,在/etc/containerd/config.toml
中加入如下配置:
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."artifact.enflame.cn"]
endpoint = ["http://artifact.enflame.cn"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."artifact.enflame.cn".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."artifact.enflame.cn".auth]
username = ""
password = ""
该配置规定了镜像源的网络资源地址,是否走TLS协议以及是否需要用户名密码。
5)如何处理用ctr创建的容器efsmi不能正常工作?
由于使用ctr创建容器时,systemd服务未能对容器根目录进行初始化,导致/var/lock目录指向的/run/lock缺失,而efsmi启动时会在/var/lock目录下创建初始化相关文件,如果目录不存在,则会启动失败。
发生问题时错误log如下:
-----------------------------------------------------------------------
----------------- Enflame System Management Interface -----------------
-------- Enflame Tech, All Rights Reserved. 2023 Copyright (C) --------
-----------------------------------------------------------------------
Failed to create lock /var/lock/efml_init
Please check to make sure the folder '/var/lock/' exists and is readable and writable
warn: Unknow Exception failed to create lock /var/lock/efml_init
只要执行如下命令,就可以解决上述问题:
mkdir /run/lock
再次执行efsmi,执行结果如下:
-----------------------------------------------------------------------
----------------- Enflame System Management Interface -----------------
-------- Enflame Tech, All Rights Reserved. 2023 Copyright (C) --------
-----------------------------------------------------------------------
*Tue Jan 30 10:26:32 2024-------------------------------------------------*
*EFSMI V1.23.0 Driver Ver: 2.5.20231213 *
*-------------------------------------------------------------------------*
*-------------------------------------------------------------------------*
* DEV NAME | FW VER | BUS-ID ECC *
* TEMP DPM Pwr(Usage/Cap)| Mem vGCU| DEV-Util UUID *
*-------------------------------------------------------------------------*
* 0 T20 | 10.19.2 | 00:01:0.0 Enable *
* 31C 80 52.0W 300W | 32G Disable| 0.0% V49000150602 *
*-------------------------------------------------------------------------*
如此efsmi就可以正常工作。