镜像缓存概述
使用镜像缓存可以在创建实例时加速拉取镜像,减少实例的启动耗时。该能力适用于 TKE Serverless Pod 和超级节点。本文主要介绍镜像缓存的工作原理、计费说明、创建和使用方式等。
工作原理
镜像缓存加速启动实例时会事先启动一个容器实例进行镜像拉取,该镜像存储在一个可自定义大小的数据盘中,同时将该数据盘作为云盘快照缓存,即镜像数据已被保存在快照中。在创建容器实例或 Pod 时选择自动匹配或手动匹配镜像缓存,会基于镜像快照创建相应数量的硬盘(数据盘),并直接挂载到实例上,避免镜像层下载,从而提升容器实例及 Pod 的创建速度。
镜像缓存的优势如下:
无时效限制,与镜像缓存(快照)的生命周期有关。
只需提前冷启动一个 Pod,创建快照后该 Pod 即被销毁。
无可用区限制,基于快照创建云盘时自动匹配可用区。
无工作负载的限制,相同地域中即可匹配。
计费说明
在创建镜像缓存时,会涉及到以下资源,相应的计费情况如下:
使用镜像缓存时,会基于匹配的镜像缓存快照创建一个相同容量的高性能数据盘,并绑定到 Pod 上,因此除去创建 Pod 本身的费用,会额外收取数据盘的费用。数据盘的费用计算公式如下:
数据盘费用 = 容量 × 单价 × 实例运行时长
操作步骤
使用控制台创建镜像缓存
1. 登录 容器服务控制台。
2. 选择左侧导航栏的运维中心 > 镜像缓存,在镜像缓存页面单击新建实例。
3. 在创建镜像缓存页面,配置相关参数。如下图所示:


实例名称:自定义。
所在地域:按需选择。
容器网络:为容器实例分配在容器网络地址范围内的 IP 地址。
安全组:安全组具有防火墙的功能,可限制容器实例的网络通信,默认为 default。
镜像:按需选择需要进行缓存的镜像及其版本。
镜像凭证:当选择 Dockerhub 及其他第三方镜像仓库的私有镜像时,必须填写镜像凭证,即仓库的访问地址、用户名及密码。
缓存大小:该大小决定快照及之后创建实例时绑定的数据盘的默认大小。
注意:
镜像仓库中显示的镜像大小为压缩后的数据,制作镜像缓存有拉取镜像并展开的过程,若镜像过大或镜像压缩比过大将导致默认的20GB数据盘不够用,建议设置更大的数据盘空间。
绑定弹性公网 IP:若要访问外网,需要为该实例绑定一个弹性公网IP。
高级配置:
自定义 DNS:开启后可自定义创建或更新镜像缓存时的 DNS server 配置。
过期策略:选择镜像缓存的保留时间,默认为永久保留。
4. 单击创建实例。创建完成后可在镜像缓存的列表,单击事件名称查看创建进程。如下图所示:


使用 CRD 创建镜像缓存
若要使用 CRD 创建镜像缓存服务,需在集群内安装镜像缓存组件,安装后支持以 CRD+Controller 的模式,使用腾讯云镜像缓存服务,而不需要调用云 API 接口。操作步骤如下:
1. 登录 容器服务控制台。
2. 在集群列表中单击 Serverless 集群 ID,进入集群详情页。
3. 在左侧导航栏中选择组件管理,单击新建。
4. 在新建组件管理页面选择 imc-operator(镜像缓存) 组件。如下图所示:


5. 单击完成。在组件管理列表页, 查看已安装的组件。
6. 编辑 YAML。
示例:
apiVersion: eks.cloud.tencent.com/v1kind: ImageCachemetadata:name: imagecache-samplespec:images:- nginx# imageCacheSize: 30# TODO(user): Add fields here
带有更多参数的示例:
apiVersion: eks.cloud.tencent.com/v1kind: ImageCachemetadata:name: imagecache-sample-more-paraspec:images: # 用于制作镜像缓存的容器镜像列表- nginx- mysqlimageCacheSize: 30 # 镜像缓存的大小retentionDays: 7 # 镜像缓存保留时间天数,过期将会自动清理,默认为0,永不过期imagePullSecrets: # 存放镜像仓库凭证的 Secret- imc-operator-system/qcloudregistrykeysecurityGroupIds: # 指定安全组- sg-maai9m2tsubnetId: "subnet-rgkt80q9" # 指定制作镜像缓存时启动的容器实例所属子网 ID,未指定时,自动选择某个超级节点的子网# ExistedEipId: "eni-1cghhuuu" # 指定用来绑定容器实例的已有EIPautoCreateEip: true # 是否为容器实例自动创建EIP,默认为false。若传true,则此参数和ExistedEipIds互斥autoCreateEipAttribute: # 自动创建EIP的可选参数。若传此参数,则会自动创建EIPdeletePolicy: Never # 容器实例删除后,EIP是否释放InternetServiceProvider: BGP # EIP线路类型internetMaxBandwidthOut: 2 # EIP出带宽上限,单位:MbpsregistrySkipVerifyList: # 指定拉取镜像仓库的镜像时不校验证书- "harbor.example.com"registryHttpEndPointList: # 指定拉取镜像仓库的镜像时使用 HTTP 协议- "harbor.example.com"resolveConfig: "nameserver 8.8.8.8" # 指定自定义制作镜像缓存过程中容器实例的宿主机上的 DNS自动创建EIP的可选参数。若传此参数,则会自动创建EIP自动创建EIP的可选参数。若传此参数,则会自动创建EIP
示例:
kubectl get imc
如有异常可查看 events:
kubectl describe imc xxx
使用已创建的镜像缓存
自动匹配:
eks.tke.cloud.tencent.com/use-image-cache: auto
手动指定:
eks.tke.cloud.tencent.com/use-image-cache: imc-xxx
匹配结果
可从创建实例的事件中,查看是否匹配成功。
若匹配成功,则显示以下事件:

若未显示该事件,则表示没有匹配到合适的镜像缓存。

需要注意的是,若选择手动匹配,但是匹配的镜像缓存中并没有该镜像,会重新在新创建的数据盘中拉取镜像,并显示以下事件:

