最近更新时间:2024-08-20 19:29:50
使用镜像缓存可以在创建容器实例时加速拉取镜像,减少实例的启动耗时。本文主要介绍镜像缓存的工作原理、计费说明、创建和使用方式等。
镜像缓存加速启动实例时会事先启动一个容器实例进行镜像拉取,该镜像存储在一个可自定义大小的数据盘中,镜像拉取完成后使用该数据盘创建快照,将镜像数据保存在快照中。在创建容器实例时通过指定镜像缓存ID或自动匹配功能使用镜像缓存,使用镜像缓存时会基于快照创建云硬盘(数据盘),并直接挂载到容器实例上,避免镜像层下载,从而提升容器实例的创建速度。
virtual-kubelet使用的镜像版本需≥1.5.0,升级virtual-kubelet镜像方式参考金山云KCE集群对接KCI
已授权容器实例访问其他云产品的资源权限,具体操作步骤详见如何授权容器实例访问其他云产品资源
已开通快照服务,具体开通步骤详见开通快照
在创建镜像缓存时,会涉及到以下资源,相应的计费情况如下:
计费项 | 计费说明 | 计费文档 |
---|---|---|
容器实例 | 创建镜像缓存时,需要运行一个2核4GB容器实例以拉取镜像。在镜像缓存创建完成后,该容器实例会自动释放并停止计费。 | 容器实例计费(计费方式为按vCPU和内存) |
云硬盘 | 创建镜像缓存时,需要绑定一个云硬盘存储镜像,该云硬盘的大小等于镜像缓存大小,普通型镜像缓存使用SSD3.0云盘(默认为20G),极速型云盘使用ESSD云盘默认为40G)。在镜像缓存创建完成后,该云硬盘会自动释放并停止计费。 | |
快照 | 基于上述数据盘会创建一个快照,该快照的生命周期与镜像缓存的生命周期一致。快照按照保留时长及容量收费。 |
提示:
创建镜像缓存前,需要保证已授权容器实例访问其他云产品的资源权限,开通步骤详见如何授权容器实例访问其他云产品资源。
1.登录容器实例控制台。
2.在左侧导航栏中,选择镜像缓存,在镜像缓存页面单击新建镜像缓存。
3.在新建镜像缓存页面配置相关参数,如下图所示:
数据中心、可用区:按需选择。
网络类型:选择创建镜像缓存时的临时容器实例所在的VPC网络和子网。
安全组:选择临时容器实例所属的安全组。
镜像缓存名称:用户自定义镜像缓存的名称,1-63个字符,只能包含小写字母、数字、和分隔符(“-”,“."),不能以分隔符开头或结尾。
镜像缓存类型:普通型与极速型。普通型对应SSD3.0云硬盘,可开启镜像缓存预热;极速型对应ESSD(默认PL1)云硬盘,因拷贝速度较快无需开启镜像缓存预热。
镜像缓存大小:该大小与创建临时容器实例时绑定的数据盘及之后创建快照的大小相同,普通型镜像缓存可选范围20-2000G,极速型镜像缓存可选范围40-2000G。
镜像缓存保留时间:选择镜像缓存的保留时间,不勾选则为无限期保留。
镜像选择:按需选择需要进行缓存的镜像及其版本,一个镜像缓存最多可以添加20个镜像。
镜像缓存预热:默认不开启,当镜像缓存类型为普通型时可选择开启。开启后将会提前将镜像缓存数据预热到当前数据中心下全部可用区的EBS,节省启动容器实例时拉取镜像缓存的时间,提升容器实例开机启动速度。
镜像仓库登录凭证:若您的镜像是私有镜像,则需在此填写镜像仓库的地址、用户名及密码。
4.点击确认配置,确认镜像缓存各项配置是否正确。
5.点击立即购买,执行镜像缓存创建的操作,在镜像缓存列表页可查看创建的镜像缓存。当镜像缓存的状态变为创建完成时,表示镜像缓存创建成功。
6.点击镜像缓存名称,可以打开详情页面,查看镜像缓存基本信息与镜像缓存创建事件。
创建容器实例时,支持在Pod metadata中添加Annotation来使用已创建的镜像缓存。
相关Annotation如下:
Annotation key | Annotation value示例 | 是否必填 | 描述 |
---|---|---|---|
k8s.ksyun.com/kci-image-cache-id | xxxxxxx | 否 | 指定镜像缓存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的镜像列表中存在,不然镜像缓存功能将不生效,依旧需要重新拉取镜像。
请确保6代机以下机型指定的镜像缓存类型为普通型,6代机机型可以指定普通型或极速型,6代机以上机型指定的镜像缓存类型必须为极速型,如果有误,会提示错误。
配置示例如下:
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
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- virtual-kubelet
tolerations:
- key: rbkci-virtual-kubelet.io/provider
value: kingsoftcloud
effect: NoSchedule
根据匹配策略选择最匹配的镜像缓存,匹配策略的优先级从高到低依次为:镜像匹配度、镜像缓存大小、创建时间。
镜像匹配度:镜像仓库名称及版本完全相同,则可匹配。当创建的容器实例有多个镜像时,容器实例和镜像缓存两者匹配的镜像数量越多,则镜像匹配度越高。
注:在使用自动匹配镜像缓存时,最多只取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
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- virtual-kubelet
tolerations:
- key: rbkci-virtual-kubelet.io/provider
value: kingsoftcloud
effect: NoSchedule
镜像缓存支持修改与编辑,若用户镜像版本升级或需要增加/减少/替换镜像缓存中镜像,可以通过镜像缓存操作栏中的编辑进行操作。
1.编辑更新镜像缓存时,镜像缓存名称、镜像缓存ID、镜像缓存类型等不可变更。
2.更新镜像缓存过程中,也将自动创建2核4G规格的容器实例进行镜像缓存的更新,制作的过程中将产生相关费用,在镜像缓存更新完成后,该容器实例会自动释放并停止计费。
3.更新镜像缓存时,与制作镜像缓存一样也需要绑定一个云硬盘存储镜像,该云硬盘的大小等于更新镜像缓存后的大小,在镜像缓存创建完成后,该云硬盘会自动释放并停止计费。
纯净模式