容器镜像是按层存储的压缩数据,容器启动时通常需要下载并逐层解压容器镜像数据。在多数业务场景下,容器运行时仅需要读取容器镜像中一部分数据,运行时无需读取的冗余镜像数据的下载和解压流程消耗了系统资源,增加容器启动耗时。ACK基于DADI(Data Accelerator for Disaggregated Infrastructure)镜像加速技术支持容器镜像的按需加载,实现镜像数据免全量下载以及在线解压,以显著缩短应用启动时间。
镜像的加速效果与镜像大小、镜像仓库网络等因素有关。经实测,基于Docker Hub的NodeBB镜像(1.34 GB)启动应用在镜像拉取阶段需耗费36s,整体应用启动时间38s。基于加速镜像启动应用在镜像拉取阶段仅需4s,整体应用启动时间仅需9s。
本文中提供的镜像拉取耗时数据仅为参考值,实际数据以您的操作环境为准。
使用限制
步骤一:获取加速镜像
您可以通过开源工具将现有容器镜像转换为DADI加速镜像格式,也可以使用ACR企业版提供的按需加载容器镜像功能来将现有容器镜像转换为 DADI 加速镜像格式。
使用开源方式
您可以通过DADI将现有容器镜像转换为DADI镜像格式,操作步骤如下所示。
执行以下命令,安装snapshotter依赖。
# 下载实例架构支持的安装包。 wget https://github.com/containerd/accelerated-container-image/releases/download/v1.2.3/overlaybd-snapshotter-1.2.3-20241016090917.0c2f057.x86_64.rpm rpm -ivh overlaybd-snapshotter-1.2.3-20241016090917.0c2f057.x86_64.rpm
执行以下命令,安装overlaybd依赖。
# 下载实例架构支持的安装包。 wget https://github.com/containerd/overlaybd/releases/download/v1.0.13/overlaybd-1.0.13-20240821.a117098.el8.x86_64.rpm rpm -ivh overlaybd-1.0.13-20240821.a117098.el8.x86_64.rpm
执行如下命令转换镜像。
本示例以ACR镜像仓库作为镜像存储服务。如需使用自己维护的镜像仓库,请修改示例指令中的镜像地址及账密。
/opt/overlaybd/snapshotter/convertor -u user:password -r xxxxx-registry.cn-hangzhou.cr.aliyuncs.com/default/redis -i latest -o latest_obd_new
使用ACR企业版
ACR企业版(标准版或高级版)支持在仓库级别配置按需加载容器镜像,并自动将推送的原始镜像转换为加速镜像。镜像转换时间取决于您的镜像大小,原始镜像不受任何影响。更多信息及使用限制,请参见按需加载容器镜像。
加速镜像的命名空间和仓库名称与原始镜像保持一致,Tag格式为原始镜像tag
加_accelerated
后缀。
步骤二:开启节点池容器镜像加速功能
为了支持DADI加速镜像,您可以在ACK控制台中,通过节点池的容器镜像加速开关,为新建节点池或存量节点池启用节点的镜像加速功能。
为新建节点池时开启
为已有节点池开启
开启或关闭节点池容器镜像加速开关后,仅对新增节点生效。如需针对存量节点生效,需要将节点移除出节点池后,重新添加回节点池,相关操作,请参见移除节点并添加已有节点。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池列表页面,单击目标节点池所在行操作列的编辑,在高级选项中,勾选容器镜像加速,按照页面提示更新节点池的配置项。
在节点池列表,如果节点池状态显示更新中,表明节点池正在变更中。显示已激活,表明变更已完成。
步骤三:使用加速镜像创建应用
1、配置容器镜像拉取凭证
安装aliyun-acr-acceleration-suite组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在其他区域,定位aliyun-acr-acceleration-suite,单击右侧的安装。
配置拉取凭证
如果您的应用无需使用镜像密钥拉取私有镜像,可跳过此步骤,直接创建使用加速镜像的应用。
您可以参见下文配置镜像拉取凭证。
为ACR企业版实例配置免密插件
安装配置免密插件。在ACK中正确安装免密插件后,系统将自动为符合条件的工作负载注入ACR仓库的访问凭证,无需手动维护访问凭证的生命周期以及管理其与工作负载的关联。具体操作,请参见免密拉取ACR镜像。
为自建镜像仓库手动创建Secret
执行以下命令,创建
kubernetes.io/dockerconfigjson
类型的Secret,配置容器镜像仓库的访问账密。kubectl create secret docker-registry <SecretName> --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>
执行以下命令,为Secret添加标签
images.alibabacloud.com/accelerated: true
。kubectl label secrets <SecretName> images.alibabacloud.com/accelerated="true"
2、创建使用加速镜像的应用
使用以下示例内容在相应节点内创建和更新Pod时,加速组件会自动将Pod调度到加速节点。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: xxxxx-registry.cn-hangzhou.cr.aliyuncs.com/default/redis:latest_obd_new # 此处填入加速镜像地址。
name: test
command: ["sleep", "3600"]
相关文档
如需通过数据盘缓存方式加速工作负载和节点初始化的速度,请参见使用数据盘快照加速大模型应用启动。