使用镜像缓存可以在创建容器实例时加速拉取镜像,减少实例的启动耗时。本文主要介绍镜像缓存的工作原理、计费说明、创建和使用方式等。
镜像缓存加速启动实例时会事先启动一个容器实例进行镜像拉取,该镜像存储在一个可自定义大小的数据盘中,镜像拉取完成后使用该数据盘创建快照,将镜像数据保存在快照中。在创建容器实例时通过指定镜像缓存ID或自动匹配功能使用镜像缓存,使用镜像缓存时会基于快照创建云硬盘(数据盘),并直接挂载到容器实例上,避免镜像层下载,从而提升容器实例的创建速度。
在创建镜像缓存时,会涉及到以下资源,相应的计费情况如下:
计费项 | 计费说明 | 计费文档 |
---|---|---|
容器实例 | 创建镜像缓存时,需要运行一个2核4GB容器实例以拉取镜像。在镜像缓存创建完成后,该容器实例会自动释放并停止计费。 | 容器实例计费(计费方式为按vCPU和内存) |
云硬盘 | 创建镜像缓存时,需要绑定一个SSD3.0云硬盘存储镜像,该云硬盘的大小等于镜像缓存大小,默认为20G。在镜像缓存创建完成后,该云硬盘会自动释放并停止计费。 | 云硬盘计费 |
快照 | 基于上述数据盘会创建一个快照,该快照的生命周期与镜像缓存的生命周期一致。快照按照保留时长及容量收费。 | 快照计费 |
提示:
创建镜像缓存前,需要保证已授权容器实例访问其他云产品的资源权限,开通步骤详见如何授权容器实例访问其他云产品资源。
1.登录容器实例控制台。
2.在左侧导航栏中,选择镜像缓存,在镜像缓存页面单击新建镜像缓存。
3.在新建镜像缓存页面配置相关参数,如下图所示:
4.点击确认配置,确认镜像缓存各项配置是否正确。
5.点击立即购买,执行镜像缓存创建的操作,在镜像缓存列表页可查看创建的镜像缓存。当镜像缓存的状态变为创建完成时,表示镜像缓存创建成功。
6.点击镜像缓存名称,可以打开详情页面,查看镜像缓存基本信息。
创建容器实例时,支持在Pod metadata中添加Annotation来使用已创建的镜像缓存。
相关Annotation如下:
Annotation key | Annotation value示例 | 是否必填 | 描述 |
---|---|---|---|
k8s.ksyun.com/kci-image-cache-id | xxxxxxx | 否 | 指定镜像缓存ID。 如果指定了镜像缓存id同时开启了自动匹配镜像缓存,则仍以指定的镜像缓存id为准,自动匹配镜像缓存的功能不会生效 |
k8s.ksyun.com/kci-auto-image-cache | ‘true’/ ‘false’ | 否 | 默认值:‘false’,当为true时,为该Pod开启自动匹配镜像缓存的功能 |
指定镜像缓存ID后,会直接按照该镜像缓存快照创建数据盘并绑定到容器实例上,请注意:
请确保指定的镜像缓存为创建完成(Ready)状态,其它状态的镜像缓存会导致Pod创建失败。
若数据盘中并没有创建容器实例时填写的镜像(即手动指定了错误的镜像缓存),会重新在新创建的数据盘中拉取镜像。
容器镜像image需要保证在镜像缓存ID k8s.ksyun.com/kci-image-cache-id的镜像列表中存在,不然镜像缓存功能将不生效,依旧需要重新拉取镜像。
配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
annotations:
k8s.ksyun.com/kci-image-cache-id: e53993d9-7b24-43aa-b844-22c447****** # 指定镜像缓存ID
spec:
containers:
- name: nginx
image: nginx:latest # 此镜像需要在缓存ID对应的镜像列表中存在,否则镜像缓存将不生效
imagePullPolicy: IfNotPresent
nodeName: rbkci-virtual-kubelet # 指定nodeName将pod调度到虚拟节点上
根据匹配策略选择最匹配的镜像缓存,匹配策略的优先级从高到低依次为:镜像匹配度、镜像缓存大小、创建时间。
注:在使用自动匹配镜像缓存时,最多只取Pod中前5个镜像与镜像缓存进行自动匹配,具体规则如下:
- 取pod.spec.containers中前5个镜像,如不同容器的镜像相同,则只算一个镜像。
- 当pod.spec.containers中镜像不足5个时,从initcontainers中继续获取镜像,但镜像总和仍最多为5个。
只会匹配到为创建完成(Ready)状态的镜像缓存,若没有匹配到对应的镜像缓存,则会自动正常拉取镜像。
如果匹配到的镜像缓存对应的快照已被删除,则自动将该镜像缓存状态置为失败,并按照匹配策略优先级自动匹配到下一个最匹配的镜像缓存。
配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
annotations:
k8s.ksyun.com/kci-auto-image-cache: 'true' # 开启自动匹配镜像缓存
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
nodeName: rbkci-virtual-kubelet # 指定nodeName将pod调度到虚拟节点上
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!