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

更新时间:
复制 MD 格式

容器镜像是按层存储的压缩数据,容器启动时通常需要下载并逐层解压容器镜像数据。在多数业务场景下,容器运行时仅需要读取容器镜像中一部分数据,运行时无需读取的冗余镜像数据的下载和解压流程消耗了系统资源,增加容器启动耗时。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加速镜像格式,也可以使用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-dadi组件,为节点池启用节点的镜像加速功能。

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

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

  3. 节点池页面,单击目标节点池,并单击节点组件页签。

  4. 单击安装节点组件 ,在弹出的右侧边栏中,选择ack-dadi组件,并按照指引安装。

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

配置容器镜像拉取凭证(仅版本1.34以下的集群需要配置)

安装aliyun-acr-acceleration-suite组件

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

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

  3. 在其他区域,定位aliyun-acr-acceleration-suite,单击右侧的安装

配置拉取凭证

可以参见下文配置镜像拉取凭证。

如果应用无需使用镜像密钥拉取私有镜像,可跳过此步骤,直接创建使用加速镜像的应用
  • ACR企业版实例配置免密插件

    安装配置免密插件。在ACK中正确安装免密插件后,系统将自动为符合条件的工作负载注入ACR仓库的访问凭证,无需手动维护访问凭证的生命周期以及管理其与工作负载的关联。具体操作,请参见免密拉取ACR镜像

  • 为自建镜像仓库手动创建Secret

    创建kubernetes.io/dockerconfigjson类型的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。images.alibabacloud.com/accelerated: true

    kubectl label secrets <SecretName>  images.alibabacloud.com/accelerated="true"

创建使用加速镜像的应用

可参考以下示例配置创建和更新 Pod。若节点池已安装ack-dadi组件,将工作负载调度至指定节点池即可使用镜像加速。

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:
        - name: test
          image: xxxxx-registry.cn-hangzhou.cr.aliyuncs.com/default/redis:latest_obd_new # 此处填入加速镜像地址
          command: ["sleep", "3600"]

关闭容器镜像加速

如果不再需要使用DADI加速镜像,可通过配置ack-dadi组件参数,为节点池关闭镜像加速功能。

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

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

  3. 节点池页面,单击目标节点池,并单击节点组件页签。

  4. ack-dadi组件的操作栏中,单击配置,在弹出的右侧边栏中,取消勾选自动使用加速镜像,即可关闭镜像加速功能。

相关文档

如需通过数据盘缓存方式加速工作负载和节点初始化的速度,请参见通过数据盘快照加速ACK节点扩容