全部产品
Search
文档中心

容器镜像服务 ACR:按需加载容器镜像

更新时间:Aug 24, 2023

传统容器运行需要将全量镜像数据下载后再解包,然而容器启动可能仅使用其中部分的内容,导致容器启动耗时长。通过容器镜像服务企业版的按需加载功能,您可以在业务部署中使用加速镜像版本,实现镜像数据免全量下载和在线解压,大幅提升应用分发效率,享受极致的弹性体验。本文介绍如何按需加载容器镜像。

前提条件

  • 已创建ACK或ACK Serverless集群。更多信息,请参见创建Kubernetes托管版集群创建ACK Serverless集群

    说明

    仅支持在版本≥1.16.9的托管版、专有版和ACK Serverless集群上使用加速镜像。且创建集群时操作系统为Alibaba Cloud Linux 2.1903、Alibaba Cloud Linux 3.2104、Alibaba Cloud Linux 3.2104 LTS 64 bit ARM edition、Alibaba Cloud Linux UEFI 2.1903、CentOS 7.9。

  • 已创建企业版实例,更多信息,请参见创建企业版实例

    说明

    请确保您创建的企业版实例为标准版或高级版。

  • 已在企业版实例中配置ACK或ACK Serverless集群对应的专有网络。加速镜像需要在专有网络中使用,更多信息,请参见配置专有网络的访问控制

背景信息

通过容器镜像服务企业版的按需加载功能,您可以在业务部署中使用加速镜像版本,实现镜像数据免全量下载和在线解压,大幅提升应用分发效率,享受极致的弹性体验。镜像的加速效果与镜像大小、镜像仓库网络等因素有关。经实测,基于Docker Hub的nodebb镜像(1.34 GB)启动应用在镜像拉取阶段需耗费36s,整体应用启动时间38s。基于加速镜像启动应用在镜像拉取阶段仅需4s,整体应用启动时间仅需9s。

使用限制

如果您的容器运行时为Containerd,则支持加速镜像仓库使用自定义域名,而Docker由于自身限制暂不支持加速镜像仓库自定义域名的使用。更多信息,请参见通过自定义域名访问容器镜像服务企业版实例

地域限制

当前只有华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、中国香港、亚太东南1(新加坡)、美国(硅谷)、美国(弗吉尼亚)、日本(东京)地域支持按需加载功能。

转换加速镜像

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

说明

加速镜像的命名空间和仓库名称与原始镜像保持一致,tag格式为原始镜像tag加_accelerated后缀。

  1. 登录容器镜像服务控制台
  2. 在顶部菜单栏,选择所需地域。
  3. 在左侧导航栏,选择实例列表

  4. 实例列表页面单击目标企业版实例。
  5. 在企业版实例管理页左侧导航栏中选择仓库管理 > 镜像仓库

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

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

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

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

安装镜像加速组件

为了启动加速容器,需要在Worker节点安装按需加载相关的镜像存储插件。

  1. 为节点添加镜像加速标签。

    在创建Woker节点时,您可以为节点添加镜像加速标签(alibabacloud.com/image-accelerate-enabled: true),以便在节点初始化时开启镜像加速能力。如果是为存量节点设置该标签,则不会生效;如果是为virtual-kubelet虚拟节点设置该标签,则会直接生效。设置镜像加速标签后,在节点初始化过程中会自动安装镜像存储插件。

    说明

    加速容器需运行在加速节点上,加速节点可同时支持普通容器与加速容器的运行。

    • 集群创建时添加镜像加速标签。

      您可以在创建集群时,设置标签为alibabacloud.com/image-accelerate-enabled: true。更多信息,请参见创建Kubernetes托管版集群

    • 扩容节点时添加镜像加速标签。

      您可以设置节点池新扩容的节点的标签为alibabacloud.com/image-accelerate-enabled: true。更多信息,请参见创建节点池

      说明

      您可以创建单独的节点池以便统一管理具备镜像加速能力的节点。

    • 添加已有节点时添加镜像加速标签。

      您可以在添加已有节点时,设置标签为alibabacloud.com/image-accelerate-enabled: true。更多信息,请参见添加已有节点

  2. 安装镜像加速组件。

    1. 登录容器服务管理控制台

    2. 在控制台左侧导航栏,单击集群

    3. 集群列表页面,选择目标集群,并在目标集群右侧操作列下,选择更多 > 组件管理

    4. 组件管理页面其他区域找到aliyun-acr-acceleration-suite,单击右侧的安装

    5. 提示对话框中单击确定

      在集群管理页左侧导航栏中,选择工作负载 > 守护进程集,在守护进程集页面查看组件安装情况,当目标组件的容器组数量显示全部启动完成,表示组件安装成功。

卸载镜像加速组件

重要

卸载前请确保目前无正在运行的加速容器。

  1. 登录容器服务管理控制台

  2. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

  3. 在集群管理页左侧导航栏选择运维管理 > 组件管理

  4. 组件管理页面其他区域找到aliyun-acr-acceleration-suite,单击右侧的卸载

  5. 提示对话框中单击确定

启用加速镜像

  1. 设置镜像仓库访问凭证。

    • 镜像免密插件方式。

      • 若已使用免密插件,且企业版实例的免密配置正确,无需其他操作。

      • 若未使用免密插件,您可使用免密插件,更多信息,请参见使用免密组件拉取容器镜像

    • 命令行方式。

      创建名称以acr-credential-开头的、类型为kubernetes.io/dockerconfigjson的Secret。

      kubectl create secret docker-registry acr-credential-test --docker-server=RegistryVpcDomain --docker-username=UserName --docker-password=Password
  2. 添加镜像加速标签。

    您可以为应用负载添加镜像加速标签,例如Pod、Deployment等。也可以为ACK或ACK Serverless集群的命名空间设置标签,该命名空间内的所有符合加速条件的应用负载会启用按需加载容器镜像,无需再修改所有符合加速条件的应用负载的YAML文件。根据实际情况选择任一方式添加镜像加速标签。

    说明

    标签的名称为k8s.aliyun.com/image-accelerate-mode,值为on-demand

    • 为应用负载添加镜像加速标签。

      以下以Pod为例设置标签。执行以下命令,为Pod设置标签。

      kubectl edit pod <Pod名称>

      在Pod文件中添加标签 k8s.aliyun.com/image-accelerate-mode: on-demand

      apiVersion: v1
      kind: Pod
      metadata:
        labels:
          # enable on-demand mode
          k8s.aliyun.com/image-accelerate-mode: on-demand
        name: test
      spec:
        containers:
         # your ACR instacne image
         - image: test-registry-vpc.cn-hangzhou.cr.aliyuncs.com/test/nginx:latest
           name: test
           command: ["sleep", "3600"]
    • 为命名空间添加镜像加速标签

      • 通过控制台添加镜像加速标签。

        1. 登录容器服务管理控制台

        2. 在控制台左侧导航栏中,单击集群

        3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情

        4. 在集群管理页左侧导航栏单击命名空间与配额

        5. 命名空间页面单击目标命名空间操作列的编辑

        6. 编辑命名空间对话框中设置标签变量名称k8s.aliyun.com/image-accelerate-mode标签变量值on-demand,然后单击确定

      • 通过命令行添加镜像加速标签。

        kubectl label namespaces <your-namespace> k8s.aliyun.com/image-accelerate-mode=on-demand

    设置加速标签后,如果您已完成普通镜像到加速镜像的转换,在相应命名空间内创建和更新pod时,加速组件会自动将Pod的原始镜像地址替换为加速镜像地址,并添加nodeSelector,将Pod调度到加速节点。