ACK节点池支持为新增节点配置数据盘,并使用预先存在的数据盘快照进行初始化。该快照可以包含所有必要的缓存数据,如预下载的容器镜像、预训练的大规模机器学习模型、系统所需镜像及其他关键的静态资源。每当有新节点加入节点池时,它将自动从快照中恢复这些缓存数据,大幅缩短首次运行数据加载时间。本文通过两个场景展示如何利用数据盘快照加速工作负载和节点初始化的部署速度。
场景一:加速应用启动
本场景以大模型应用Qwen-7B工作负载为例,介绍如何通过ECS实例将ac2/qwen容器镜像预置到数据盘中,缓存镜像并制作快照,随后通过该快照作为节点池内新增节点的数据盘,将工作负载调度到新节点以加速应用启动速度,加速后Pod启动时间约7秒。若您通过控制台直接创建ac2/qwen应用,Pod启动大约需要72秒。
本场景提供的Pod启动时间仅为理论值,实际数据以您的操作环境为准。
通过数据盘快照加速应用启动
步骤一:创建带有数据盘的ECS实例
创建一个包含数据盘的ECS实例,以便构建数据盘快照。具体操作,请参见自定义购买实例。
说明请根据您的具体需求和环境来确定合适的数据盘大小,确保预留足够空间。
创建完成后,登录ECS实例执行以下命令,查看实例磁盘信息。
fdisk -l
预期输出:
Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: F51132A7-67B1-4650-806D-FD0DExxxxxxx Device Start End Sectors Size Type /dev/vda1 2048 6143 4096 2M BIOS boot /dev/vda2 6144 415743 409600 200M EFI System /dev/vda3 415744 83886046 83470303 39.8G Linux filesystem Disk /dev/vdb: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
可以看到ECS实例上挂载了块设备/dev/vdb,并且没有挂载到任何主机目录。
执行以下命令,初始化数据盘的文件系统,并将数据盘挂载到任意主机目录上,本文以目录
/mnt/example
为例。mkdir -p /mnt/example mkfs.ext4 /dev/vdb mount /dev/vdb /mnt/example
步骤二:安装运行时
查看所需运行时版本,需要与使用快照的集群节点运行时版本一致。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击目标节点池,进入基本信息页签,查看容器运行时。本文将以containerd 1.6.36为例。
在ECS实例中执行以下命令,绑定挂载子目录。
mkdir -p /var/lib/containerd mkdir -p /mnt/example/containerd/ mount --bind /mnt/example/containerd/ /var/lib/containerd
安装containerd 1.6.36运行时。相关操作,请参见Getting started with containerd。
步骤三:下载所需容器镜像并制作镜像
在ECS实例中执行以下命令,拉取所需镜像。
ctr -n k8s.io images pull ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen:7b-pytorch2.2.0.1-alinux3.2304
预期输出:
ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen:7b-pytorch2.2.0.1-alinux3.2304: resolved |++++++++++++++++++++++++++++++++++++++| index-sha256:26f7ec425ca145b75edea364a51aa295587ddd5d65ac204e4e6da0e51bddb357: done |++++++++++++++++++++++++++++++++++++++| manifest-sha256:f6d5fb3791e6b6a3213b44ede5bec8e4a3b7fbd4ff4ba22ace00a10b83a4982a: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:bf2e4c7c66fc8341e90fb1a2f5f19c3b76b692054d54c42095d5fb9b18c1fac8: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:fec856349732affc95608fc6e36d9c9cb50247901696df2046a781a3969e5360: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:ed96823de6cfad0ef1b9de97e427f41160817c98e9bebf90ba8cc37992eabc96: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:9df511db38b7e057b13fa70a4f9e4a7e65e7efec867b2668908634181cac38a9: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:1a4373bb9d93a3b5ada44eabc5fc42a548124703fcba53e8085e3392c85649b1: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:5725de981ff2b5977566f75731fb218716625462d0bc5ee519b9923965b5a352: done |++++++++++++++++++++++++++++++++++++++| config-sha256:5d25192c5dd2dfe79ead390db8668baaf10667e5ae789420cda953291f91559f: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:af616670f1a58fbbccff2e7053aa93994bdcc539ab388b668afd8ddf8437ee3d: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:da5d933bec7b35e1ca604c002d06a18e3b3b5e52420edaa8e85e56e8853641b7: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:cbfd4016879986762938d503ee88832c0f32989c07a0e41966f0fdbdb4d82d9f: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:0c2891fbd11945ec68c8a936413f844957ece8196c595f64f683531649293f5b: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:ef52560218e4372dd5bc40de38a2032d66fad82129b39e622b020038220327fc: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:a5d4fb6719df2b4228e2ac875522cae82159c42fd5f60d4de4bf53ece0862368: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:30b9d466ccc9dfbe42ddfb86f57e526f095827cbff25aaa0ff98d861ad791f45: done |++++++++++++++++++++++++++++++++++++++| layer-sha256:6df931e10a58a685f5cfb9bfc29e9127e1145cc3aa05209316edc820a6ebc00b: done |++++++++++++++++++++++++++++++++++++++| elapsed: 66.3s total: 780.8 (11.8 MiB/s) unpacking linux/amd64 sha256:26f7ec425ca145b75edea364a51aa295587ddd5d65ac204e4e6da0e51bddb357... done: 17.972544176s
对ECS实例数据盘制作快照。相关操作,请参见创建快照。
步骤四:通过ACK节点池选择数据盘快照并弹出节点
创建节点池,过程中添加一块数据盘,数据盘使用上一步生成的快照创建磁盘,且设置期望的节点数量为1。
重要使用快照的数据盘必须为最后一块数据盘。请参见数据盘缓存加速机制了解加速详情。
登录该节点池内节点执行以下命令,查看容器镜像。
sudo crictl images
预期输出:
IMAGE TAG IMAGE ID SIZE ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen 7b-pytorch2.2.0.1-alinux3.2304 5d25192c5dd2d 820MB .......
可以看到已经存在ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/qwen 容器镜像。
由于节点上已缓存镜像,将Qwen-7B应用调度到该节点后,工作负载在7秒内便进入运行状态。
不通过数据盘快照加速应用部署
您可以通过控制台创建工作负载,并在创建过程中选择使用制品中心中的ac2/qwen容器镜像。相关操作,请参见创建无状态工作负载Deployment。
部署成功后,观察到Pod从创建到进入运行状态大约需要72秒,其中镜像拉取时间占据了约65秒,耗时较长。
场景二:加速节点初始化
本场景介绍如何通过ECS实例将系统所需容器镜像预置到数据盘中,缓存镜像并制作快照,随后通过该快照作为节点池内新增节点的数据盘,加速节点的初始化流程,加速后节点初始化时间约为5秒;若按照常规流程添加节点,节点初始化时间约为15秒。
本场景提供的节点初始化时间仅为理论值,实际数据以您的操作环境为准。
通过数据盘快照缓存ACK系统所需镜像
系统组件版本可能随着组件升级发生变化,从而导致数据盘缓存的容器镜像版本与实际部署的镜像版本不一致,此时需要重新制作数据盘快照。建议您参见组件发布记录关注组件变更情况,及时更新快照。
步骤一:导出系统所需容器镜像
在希望使用数据盘快照的集群中,创建一个新的节点并ECS远程连接方式概述。
在集群节点中使用下述脚本完成系统所需镜像的导出,执行完成后将在当前目录下生成
image_list.txt
文件。#!/bin/bash # 设置输出文件路径 OUTPUT_FILE="./image_list.txt" # 清空或创建输出文件 > "$OUTPUT_FILE" # 获取所有容器镜像的名称和标签 images=$(crictl images --no-trunc|awk 'NR>1 {print $1 ":" $2}') # 遍历每个镜像并导出 for image in $images; do echo "$image" >> "$OUTPUT_FILE" done echo "所有镜像已导出到 $OUTPUT_FILE"
步骤二:制作镜像并扩容集群节点
将步骤一中生成的
image_list.txt
文件上传到ECS实例。在ECS实例中执行如下脚本,自动拉取所需的全部系统组件容器镜像。若您缺少crictl命令,请参见Install crictl进行安装。
#!/bin/bash # 设置输入文件路径。 INPUT_FILE="./image_list.txt" # 检查文件是否存在。 if [ ! -f "$INPUT_FILE" ]; then echo "错误: 文件 $INPUT_FILE 不存在!" exit 1 fi # 遍历输入文件中的每一行(即每个镜像)。 while IFS= read -r image; do if [ -n "$image" ]; then # 确保不是空行。 echo "正在拉取镜像 $image..." # 使用 crictl pull 拉取镜像。 crictl pull "$image" if [ $? -eq 0 ]; then echo "镜像 $image 拉取成功!" else echo "镜像 $image 拉取失败!" fi fi done < "$INPUT_FILE"
对ECS实例数据盘制作快照。相关操作,请参见创建快照。
创建节点池,过程中添加一块数据盘,数据盘使用上一步生成的快照创建磁盘,且设置期望的节点数量为1。
重要使用快照的数据盘必须为最后一块数据盘。请参见数据盘缓存加速机制了解加速详情。
查看节点的事件可以看到使用数据盘快照加速的节点从创建到节点处于Ready状态耗时约5秒。
不通过数据盘快照缓存ACK系统组件镜像
您可以通过使用ContainerOS系统镜像创建集群节点,并通过查看节点的事件看到没有使用数据盘快照加速的节点从创建到节点处于Ready状态耗时约15秒。
数据盘缓存加速机制
创建节点池过程中可以选择添加数据盘,当数据盘应用至containerd目录且使用数据盘快照时,数据盘快照中的镜像缓存会被加载到containerd目录中。当创建工作负载时,可以直接使用已经缓存的镜像,从而缩短首次应用启动时间。