镜像缓存

最近更新时间:2023-09-12 17:20:38

查看PDF

镜像缓存概述

使用镜像缓存可以在创建容器实例时加速拉取镜像,减少实例的启动耗时。本文主要介绍镜像缓存的工作原理、计费说明、创建和使用方式等。

工作原理

镜像缓存加速启动实例时会事先启动一个容器实例进行镜像拉取,该镜像存储在一个可自定义大小的数据盘中,镜像拉取完成后使用该数据盘创建快照,将镜像数据保存在快照中。在创建容器实例时通过指定镜像缓存ID或自动匹配功能使用镜像缓存,使用镜像缓存时会基于快照创建云硬盘(数据盘),并直接挂载到容器实例上,避免镜像层下载,从而提升容器实例的创建速度。

使用前提

计费说明

在创建镜像缓存时,会涉及到以下资源,相应的计费情况如下:

计费项 计费说明 计费文档
容器实例 创建镜像缓存时,需要运行一个2核4GB容器实例以拉取镜像。在镜像缓存创建完成后,该容器实例会自动释放并停止计费。 容器实例计费(计费方式为按vCPU和内存)
云硬盘 创建镜像缓存时,需要绑定一个SSD3.0云硬盘存储镜像,该云硬盘的大小等于镜像缓存大小,默认为20G。在镜像缓存创建完成后,该云硬盘会自动释放并停止计费。 云硬盘计费
快照 基于上述数据盘会创建一个快照,该快照的生命周期与镜像缓存的生命周期一致。快照按照保留时长及容量收费。 快照计费

操作步骤

步骤1:通过控制台创建镜像缓存

提示:
创建镜像缓存前,需要保证已授权容器实例访问其他云产品的资源权限,开通步骤详见如何授权容器实例访问其他云产品资源

1.登录容器实例控制台

2.在左侧导航栏中,选择镜像缓存,在镜像缓存页面单击新建镜像缓存

3.在新建镜像缓存页面配置相关参数,如下图所示:

image20230630160056144.png

  • 数据中心、可用区:按需选择。
  • 网络类型:选择创建镜像缓存时的临时容器实例所在的VPC网络和子网。
  • 安全组:选择临时容器实例所属的安全组。
  • 镜像缓存名称:用户自定义镜像缓存的名称,1-63个字符,只能包含小写字母、数字、和分隔符(“-”,“."),不能以分隔符开头或结尾。
  • 镜像缓存大小:该大小与创建临时容器实例时绑定的数据盘及之后创建快照的大小相同,可选范围20-500G。
  • 镜像缓存保留时间:选择镜像缓存的保留时间,不勾选则为无限期保留。
  • 镜像选择:按需选择需要进行缓存的镜像及其版本,一个镜像缓存最多可以添加20个镜像。
  • 镜像仓库登录凭证:若您的镜像是私有镜像,则需在此填写镜像仓库的地址、用户名及密码。

4.点击确认配置,确认镜像缓存各项配置是否正确。

5.点击立即购买,执行镜像缓存创建的操作,在镜像缓存列表页可查看创建的镜像缓存。当镜像缓存的状态变为创建完成时,表示镜像缓存创建成功。

6.点击镜像缓存名称,可以打开详情页面,查看镜像缓存基本信息。

步骤2:使用已创建的镜像缓存

创建容器实例时,支持在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

指定镜像缓存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调度到虚拟节点上

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

内容不全,不深入
内容更新不及时
描述不清晰,比较混乱
系统或功能太复杂,缺乏足够的引导
内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈