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

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

传统容器镜像在容器启动前需要进行全量下载并解包,然而容器启动可能仅依赖其中少部分镜像内容,加载暂未需要的镜像内容将导致容器启动出现不必要的耗时。阿里云容器镜像服务 ACR(Container Registry)企业版提供了DADI(Data Accelerator for Disaggregated Infrastructure)加速镜像的制作与托管服务。容器计算服务 ACS(Container Compute Service)集成了对DADI overlaybd加速镜像格式的支持,允许容器按需加载镜像文件,从而大幅缩短启动时间。本文介绍如何使用ACR企业版制作加速镜像并在ACS中加速容器启动。

前提条件

  • 已创建ACS集群。具体操作,请参见创建ACS集群

  • 已创建实例规格为标准版或高级版的ACR企业版实例,更多信息,请参见创建企业版实例

  • 已在ACR企业版实例中配置ACS集群可达的访问控制类型。如使用VPC网络,则添加ACS集群所在VPC,参见配置专有网络的访问控制;使用公网网络,则确保白名单规则对ACS集群开放,参见配置公网的访问控制

  • 如果使用仅索引模式加速,需要联系ACR工作人员提交白名单工单开启试用。

背景信息

通过使用DADI加速镜像,您可以加速工作负载的启动效率,实现镜像数据按需加载和在线解压,大幅提升应用分发效率和弹性体验。详细内容,请参见按需加载容器镜像

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

使用限制

  • 多架构镜像暂不支持加速镜像转换。

  • Pod存活期间,加速镜像必须保证持续可访问,若使用仅索引模式,则加速镜像及原始镜像都必须保证持续可访问。

开启镜像加速

目前支持仓库级别配置,自动将推送的原始镜像转换为加速镜像。镜像转换时间取决于您的镜像大小,原始镜像不受任何影响。

  1. 登录容器镜像服务控制台

  2. 在顶部菜单栏,选择所需地域。

  3. 在左侧导航栏,选择实例列表

  4. 实例列表页面单击目标企业版实例。

  5. 在企业版实例管理页左侧导航栏中选择仓库管理 > 镜像仓库

  6. 在镜像仓库页面单击目标镜像仓库名称或目标镜像仓库右侧操作列下的管理

  7. 在基本信息页面左上角单击编辑

  8. 修改基本信息对话框中,开启镜像加速,单击确定

    说明

    加速镜像有两种转换模式:

    • 完整模式下,生成的镜像包含完整的镜像内容,体积约为原始镜像的130%,可以显著提高容器启动速度。生成的镜像tag格式为原始镜像tag加_containerd_accelerated后缀。

    • 仅索引模式下,生成的镜像仅包含每层内容的索引,体积约为原镜像的3%,转换速度较快,对容器启动的加速效果约为完整模式下的70%。生成的镜像tag格式为原始镜像tag加_accelerated后缀。

    重要

    仅索引模式尚未正式上线,目前需要联系ACR工作人员提交白名单工单开启试用。

使用镜像加速

为了启动使用加速镜像的容器,需要为ACS提供足够的权限以便拉取镜像。对于加速镜像,ACS提供了两种方式配置权限。

通过免密插件

在ACS中正确安装免密插件,将自动为符合条件的工作负载注入ACR仓库的访问凭证,无需手动维护访问凭证的生命周期以及与工作负载的关联。通过免密插件启动使用加速镜像的容器步骤如下:

  1. 安装并配置免密插件,请参见免密拉取ACR镜像

  2. 使用加速镜像名创建工作负载。请注意,需要确保工作负载使用了免密插件配置项中关联的ServiceAccount,并位于相同的命名空间下。示例工作负载如下:

    完整模式

    说明

    完整模式暂不支持Referrers API,在使用加速镜像时需要填写完整的加速镜像tag。

    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: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest_containerd_accelerated
             name: test
             command: ["sleep", "3600"]

    仅索引模式

    说明

    ACR企业版实例开启仅索引模式镜像加速功能后,镜像仓库符合Referrers API规范,加速镜像制品将反向链接至原始镜像,在ACS中使用加速镜像时仅需填写原始镜像的tag。

    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: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest
             name: test
             command: ["sleep", "3600"]

通过创建Secret

您可以手动维护镜像拉取密钥,通过创建kubernetes.io/dockerconfigjson类型的Secret,配置ACR容器镜像仓库的访问账密,可以灵活启用加速镜像功能。创建Secret并启动使用加速镜像的容器步骤如下:

  1. 创建加速镜像专用的Secret,需要包含名称前缀acr-credential-,或者标签值images.alibabacloud.com/accelerated: true。示例如下:

    创建包含名称前缀的专用Secret

    kubectl create secret docker-registry acr-credential-test --docker-server=RegistryVpcDomain --docker-username=UserName --docker-password=Password

    创建包含标签值的专用Secret

    kubectl create secret docker-registry <SecretName> --docker-server=<RegistryVpcDomain> --docker-username=<UserName> --docker-password=<Password>
    kubectl label secrets <SecretName>  images.alibabacloud.com/accelerated="true"
    警告

    请确保您的镜像拉取密钥权限按最小权限原则配置,仅包含拉取本集群所需业务镜像的权限。更多详情,请参见授予RAM用户自定义策略

  2. 使用加速镜像名及Secret创建工作负载。示例如下:

    完整模式

    说明

    完整模式暂不支持Referrers API,在使用加速镜像时需要填写完整的加速镜像tag。

    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:
          imagePullSecrets:
          # 此处填入正确的Secret名
          - name: acr-credential-test
          containers:
           # 此处填入转换后的加速镜像名
           - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest_containerd_accelerated
             name: test
             command: ["sleep", "3600"]

    仅索引模式

    说明

    ACR企业版实例开启仅索引模式镜像加速功能后,镜像仓库符合Referrers API规范,加速镜像制品将反向链接至原始镜像,在ACS中使用加速镜像时仅需填写原始镜像的tag。

    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:
          imagePullSecrets:
          # 此处填入正确的Secret名
          - name: acr-credential-test
          containers:
           # 此处填入原始镜像名即可
           - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest
             name: test
             command: ["sleep", "3600"]