使用按需加载容器镜像加速容器启动

容器镜像是按层存储的压缩数据,容器启动时通常需要下载并逐层解压容器镜像数据。在多数业务场景下,容器运行时仅需要读取容器镜像中一部分数据,运行时无需读取的冗余镜像数据的下载和解压流程消耗了系统资源,增加容器启动耗时。ACK基于DADI(Data Accelerator for Disaggregated Infrastructure)镜像加速技术支持容器镜像的按需加载,实现镜像数据免全量下载以及在线解压,以显著缩短应用启动时间。

镜像的加速效果与镜像大小、镜像仓库网络等因素有关。经实测,基于Docker HubNodeBB镜像(1.34 GB)启动应用在镜像拉取阶段需耗费36s,整体应用启动时间38s。基于加速镜像启动应用在镜像拉取阶段仅需4s,整体应用启动时间仅需9s。

重要

本文中提供的镜像拉取耗时数据仅为参考值,实际数据以您的操作环境为准。

使用限制

  • 仅支持ACK托管集群,且满足以下要求。

    • 集群版本为1.26及以上。如需升级集群,请参见手动升级集群

    • 节点运行时为containerd,且containerd版本为1.6.34及以上。如需升级,请参见升级节点池

  • 仅支持DADI中完整模式,不支持仅索引模式。

步骤一:获取加速镜像

您可以通过开源工具将现有容器镜像转换为DADI加速镜像格式,也可以使用ACR企业版提供的按需加载容器镜像功能来将现有容器镜像转换为 DADI 加速镜像格式。

使用开源方式

您可以通过DADI将现有容器镜像转换为DADI镜像格式,操作步骤如下所示。

  1. 执行以下命令,安装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 
  2. 执行以下命令,安装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
  3. 执行如下命令转换镜像。

    本示例以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后缀。

  1. 登录容器镜像服务控制台,在顶部菜单栏,选择所需地域。

  2. 在左侧导航栏,选择实例列表,在实例列表页面单击目标企业版实例。

  3. 在左侧导航栏,选择仓库管理 > 镜像仓库

  4. 单击目标镜像仓库名称,进入基本信息页面,单击页面左上角编辑

  5. 修改基本信息对话框,开启镜像加速,选择完整模式,然后单击确定

    说明

    完成镜像加速转换设置后,后续推送的镜像将自动触发镜像转换任务。如需接收镜像转换完成的通知,可以配置事件通知。例如将表达式设置为_accelerated$,更多信息,请参见事件通知

步骤二:开启节点池容器镜像加速功能

为了支持DADI加速镜像,您可以在ACK控制台中,通过节点池的容器镜像加速开关,为新建节点池或存量节点池启用节点的镜像加速功能。

为新建节点池时开启

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池页面,参见创建和管理节点池完成配置并勾选高级选项容器镜像加速

为已有节点池开启

开启或关闭节点池容器镜像加速开关后,仅对新增节点生效。如需针对存量节点生效,需要将节点移除出节点池后,重新添加回节点池,相关操作,请参见移除节点添加已有节点

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  3. 节点池列表页面,单击目标节点池所在行操作列的编辑,在高级选项中,勾选容器镜像加速,按照页面提示更新节点池的配置项。

    在节点池列表,如果节点池状态显示更新中,表明节点池正在变更中。显示已激活,表明变更已完成。

步骤三:使用加速镜像创建应用

1、配置容器镜像拉取凭证

安装aliyun-acr-acceleration-suite组件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 在其他区域,定位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"]

相关文档

如需通过数据盘缓存方式加速工作负载和节点初始化的速度,请参见使用数据盘快照加速大模型应用启动