使用ImageCache加速创建ECI Pod

阿里云以ImageCache CRD的方式将ECI的镜像缓存(即ImageCache)功能提供给Kubernetes用户,以便在Kubernetes集群中也可以使用该功能来加速创建ECI Pod。本文介绍ImageCache的功能,以及如何创建和使用ImageCache。

ImageCache介绍

在运行容器前,ECI需要先拉取您指定的容器镜像,但因网络和容器镜像大小等因素,镜像拉取耗时往往成为ECI Pod启动的主要耗时。为加速ECI Pod创建,ECI提供了镜像缓存功能,可以预先将需要使用的镜像制作成缓存快照。后续基于镜像缓存来创建ECI Pod,可以避免或减少镜像层的下载,从而提升ECI Pod的创建速度。更多信息,请参见镜像缓存概述

说明

具体提升速度由ECI Pod中使用的镜像个数、镜像大小和网络因素等决定。

通过在Kubernetes集群中部署ImageCache CRD的方式,Kubernetes用户也可以使用镜像缓存功能来加速创建ECI Pod。ImageCache是ECI定义的一种资源类型,一个ImageCache对应一个镜像缓存。

ACK Serverless集群中默认已部署ImageCache CRD,您可以通过kubectl get crd/imagecaches.eci.alibabacloud.com命令确认集群是否支持ImageCache。

  • 如果返回imagecaches.eci.alibabacloud.com的信息,表示集群已支持ImageCache。

  • 如果返回Error信息,表示集群不支持ImageCache,请将ACK Virtual Node组件升级到最新版本。

ImageCache计费

在创建和使用ImageCache时,可能会收取相关资源费用。具体请参见镜像缓存计费

创建ImageCache

ImageCache的创建方式分为以下两种:

创建方式

说明

自动创建

创建ECI Pod时,如果开启了自动匹配ImageCache,则在未匹配到的情况下,系统会在创建ECI Pod的同时,自动创建一个ImageCache,后续可以使用该ImageCache加速创建使用同一镜像的ECI Pod。

手动创建

如果您的业务在首次创建Pod时就需要加速,您可以在创建Pod前,自定义编写ImageCache的YAML来创建ImageCache。具体操作,请参见管理ImageCacheImageCache Annotation

说明
  • 除了首次创建就需要加速的场景外,推荐您使用自动创建的ImageCache以节约成本。

  • 更多关于手动创建的ImageCache和自动创建的ImageCache的信息,请参见创建方式

使用ImageCache

ImageCache是Cluster级别的资源,因此在不同的namespace下创建Pod时均可以使用ImageCache来实现加速创建Pod。使用ImageCache创建Pod时,请注意以下事项:

  • Pod内容器的镜像建议采用已有ImageCache的镜像,可以提高匹配度。

  • Pod中容器的镜像拉取策略(ImagePullPolicy)建议设置为按需拉取(IfNotPresent),可以避免镜像层重复下载。

使用ImageCache创建Pod包括自动匹配和明确指定两种方式。您可以在Pod级别的metadata中添加Annotation来配置。相关Annotation如下:

说明
  • 建议使用自动匹配方式。如果同时设置了两种方式,则明确指定方式的优先级高于自动匹配方式。更多信息,请参见镜像缓存概述

  • 使用自动匹配方式时,如果您的业务场景希望在完全匹配的情况下才使用ImageCache,可以设置imc-perfect-matchimc-match-count-request。此时,建议使用imc-perfect-match;如果同时设置两者,imc-perfect-match的优先级更高。

使用方式

配置项

示例值

说明

自动匹配

k8s.aliyun.com/eci-auto-imc

"true"

是否自动匹配ImageCache,默认为true,表示系统会根据匹配策略自动匹配最优的ImageCache创建Pod。匹配策略的优先级从高到低依次为:镜像匹配度、匹配的镜像大小、创建时间。

如果没有完全匹配,系统会在创建Pod的同时自动创建对应的ImageCache。

k8s.aliyun.com/imc-perfect-match

"true"

Pod内所有容器镜像是否均要完全匹配ImageCache。默认为false。

k8s.aliyun.com/imc-match-count-request

"2"

Pod内要完全匹配ImageCache的容器镜像个数。

明确指定

k8s.aliyun.com/eci-imc-id

imc-2zebxkiifuyzzlhl****

明确指定使用某个ImageCache创建Pod。

重要
  • Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。

  • 仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。

示例一:自动匹配ImageCache

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-auto-imc: "true"       # 开启自动匹配ImageCache
        k8s.aliyun.com/imc-perfect-match: "true"  # 设置Pod内所有容器镜像均需完全匹配
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
        imagePullPolicy: IfNotPresent
      - name: busybox
        image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
        command: ["sleep"]
        args: ["999999"]
        imagePullPolicy: IfNotPresent

示例二:明确指定ImageCache

重要

请确保指定的ImageCache的状态为Ready,其它状态的ImageCache会导致Pod创建失败。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-imc-id: imc-2ze5tm5gehgtiiga****  # 明确指定ImageCache
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
        imagePullPolicy: IfNotPresent
说明

通过eci-profile的ECI Effect能力,可以为满足条件的ECI Pod动态追加ImageCache相关Annotation,实现自动使用ImageCache。更多信息,请参见配置eci-profile实现自动使用ImageCache