镜像加速
用户可通过两种方式实现镜像加速:一是使用Nydusify依赖包结合AlayaNeW自研工具进行镜像格式转换,二是通过服务器自动完成格式转换。具体操作步骤如下。
前提条件
操作步骤
- 手动转换镜像至Nydus格式
- 服务器自动转换
Nydusify是一个用于将Docker镜像转换为Nydus
镜像格式的工具。Nydus只需要下载运行容器所需的部分文件,而不需要像传统容器镜像那样下载整个镜像。
-
点击安装包链接下载适用当前系统的安装包,本示例下载
nydus-static-v2.3.1-linux-amd64
文件,然后将文件解压到本地,例如下图所示。 -
点击下载nydusify文件,然后替换上步同名文件。
-
打开终端工具(如:MobaXterm),将替换文件后的文件拷贝至
/usr/bin/
目录下,例如下图高亮③所示。提示完成拷贝操作后,您需要检查文件的权限。如果文件没有写入权限,可以运行
sudo chmod +x /usr/bin/[文件名]
为其添加执行权限,例如上图高亮区域②所示,确保文件具备读写和执行权限。 -
运行如下所示的命令,登录到私有镜像仓库,本实践以
北京二区
为例,例如下图高亮①所示。docker login registry.hd-02.alayanew.com:8443 -u [镜像仓库用户名] -p [镜像仓库密码]
-
运行如下所示的命令,手动执行Nydus转化命令,例如下图高亮②所示。
nydusify convert --source [srcImage] --target [srcImage]-nydus
-
联系客服开通服务器端镜像加速服务,开通完成后,您在推送完镜像后,服务器将自动完成镜像转换。
提示完成镜像推送后,镜像仓库将同时保留原始镜像和转换后的镜像,您需关注镜像仓库存储空间的使用情况。
镜像加速示例
通过镜像加速服务,可很大程度上节省镜像下载时间,以“Yaml文件方式启动镜像加速任务”测试结果为例,效率提升94%,实验结果为:
-
使用镜像加速服务,镜像下载时间约为13s(包括等待时间),示例页面如下图所示。
-
未使用镜像加速服务,镜像下载时间约为328s(包括等待时间),示例页面如下图所示。
镜像概览
- 本次示例使用镜像为:
mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:cogvideox_fun
- 镜像大小:12.1G
- 本次示例操作所选智算中心为:
北京二区
操作详情
-
下载
nydus-static-v2.3.1-linux-amd64
文件,将文件解压到本地,然后下载nydusify文件,替换解压文件中的同名文件。 -
打开MobaXterm,将替换文件后的文件拷贝至
/usr/bin/
目录下,确保文件拥有读写权限,若权限不足,可参考“操作步骤”1提示部分。 -
登录已开通镜像加速的私有镜像仓库,如下图高亮①所示,在镜像仓库运行镜像转换命令,如下图高亮②所示。
-
使用Yaml文件方式启动镜像下载任务、通过Aladdin创建Workshop拉取对应镜像两种方式查看转换后、前的镜像下载耗时,详情如下所示。
- Yaml启动镜像拉取
- 新建Workshop镜像拉取
-
下载Deployment测试文件,解压该文件,复制文件至对应终端对应目录下,将弹性容器集群文件移动至对应目录下,并连接VKS(弹性容器集群),例如下图所示。
-
运行如下所示的命令部署一个访问私有镜像仓库的应用,如上图高亮②所示,获取已启动Pod名称,运行
kubectl describe pod [pod name] -n sxh
查看Pod详细状态、事件日志等信息,如上图高亮④所示。查看Pod事件,本次示例拉取镜像耗时约13s,例如下图所示。kubectl apply -f [yaml文件] -n [namespace]
提示参照本示例进行操作时,如需获取密钥,可参看获取密钥章节中的说明。
-
移除Deployment测试文件中的Tag,如下图所示,以拉取未转换过的镜像,重新执行步骤6,然后观察Pod事件,此次拉取镜像耗时约328s,例如下图所示。
通过Aladdin验证启动前,需要下载、登录Aladdin插件,VSCode/Cursor安装Aladdin插件, 可参考安装Aladdin。
-
登录Aladdin后,单击“Back to workspace”按钮,进入功能区页面,单击WORKSHOP功能区的
菜单项,进入参数配置页面,例如下图所示。
-
环境配置
处选择转换过的镜像,如上图高亮①所示,参数填写完成后,单击“Submit”按钮,在终端查看Pod详细状态、事件日志等信息,部分事件日志如下所示,镜像拉取耗时1.67s。部分事件日志Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 59s default-scheduler Successfully assigned sxh/workshop-8f891a19-6c1c-4dd5-a69e-35d141cc281a to hd02-gpu1-0031
Normal AddedInterface 57s multus Add eth0 [172.19.120.165/32] from k8s-pod-network
Normal Pulling 56s kubelet Pulling image "registry.hd-02.alayanew.com:8443/alayanew-4fd285c4-c4f3-4e92-80ee-26169717cba8/llamafactory-online:1.1-nydus"
Normal Pulled 55s kubelet Successfully pulled image "registry.hd-02.alayanew.com:8443/alayanew-4fd285c4-c4f3-4e92-80ee-26169717cba8/llamafactory-online:1.1-nydus" in 1.671s (1.671s including waiting). Image size: 14817441081 bytes.
Normal Created 54s kubelet Created container: code
Normal Started 34s kubelet Started container code -
新建一个Workshop,在
环境配置
处选择未转换过的镜像(原始镜像),如上图高亮②所示,参数填写完成后,单击“Submit”按钮,在终端查看Pod详细状态、事件日志等信息,根据事件日志获取镜像拉取耗时,镜像拉取耗时245s。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 9m40s default-scheduler Successfully assigned sxh/workshop-d1555177-6f39-4d8d-9987-fac335ed6dcf to hd02-gpu1-0008
Normal AddedInterface 9m37s multus Add eth0 [172.19.183.207/32] from k8s-pod-network
Normal Pulling 9m36s kubelet Pulling image "registry.hd-02.alayanew.com:8443/alayanew-4fd285c4-c4f3-4e92-80ee-26169717cba8/llamafactory-online:1.1"
Normal Pulled 5m31s kubelet Successfully pulled image "registry.hd-02.alayanew.com:8443/alayanew-4fd285c4-c4f3-4e92-80ee-26169717cba8/llamafactory-online:1.1" in 4m5.254s (4m5.254s including waiting). Image size: 16129657861 bytes.
Normal Created 5m31s kubelet Created container: code
Normal Started 5m31s kubelet Started container code
结论
在同等条件下,通过上述示例可以看出,使用镜像加速能够显著提升镜像的下载和拉取效率,大幅缩短耗时。