# 使用镜像缓存
在CCE Autopilot集群中，使用镜像缓存创建工作负载支持以下两种方式：
- 自动匹配：自动匹配将从用户创建的所有可用镜像缓存中选择最优的镜像缓存。
- 明确指定：需要您明确指定使用的镜像缓存，并且该镜像缓存必须为可用状态。
您可以根据需要选择合适的方式，具体操作请参见[使用镜像缓存]。
#### 前提条件
已有一个CCE Autopilot集群，并且集群版本在v1.28.8、v1.31.4及以上。
#### 约束与限制
- 使用镜像缓存时，每个Pod自动绑定一个云硬盘用于加载镜像缓存，每个EVS盘与镜像缓存大小一致，并随Pod实例一起创建和释放。容器镜像的相关信息将自动存储在该云硬盘中。
- 创建工作负载时，仅支持选定一个镜像缓存。如果镜像缓存中的镜像无法完全匹配工作负载需要，则未匹配的镜像仍需从原镜像仓库中下载拉取。
- 镜像缓存主要用于镜像下载加速，使用镜像缓存时，仍需保证负载与镜像仓库间的网络连通性以及镜像下载凭据的正确性。
- 使用镜像缓存创建工作负载后，如果该镜像缓存过期，已创建的工作负载不受影响。但如果该工作负载需要进行升级、弹性伸缩等操作，则无法使用该镜像缓存，需要重新下载相关镜像。
 
#### 计费说明
| 操作阶段↵  | 计费项   | 计费说明↵                                                            | 相关文档↵                                                                                                          |
|:---|:---|:---|:---|
| 使用镜像缓存 | Pod费用 | 使用镜像缓存时，每个Pod自动绑定一个云硬盘用于加载镜像缓存，每个云硬盘与镜像缓存大小一致，并随Pod实例一起创建和释放。 | 关于Pod费用的详细说明，请参见[CCE Autopilot集群计费项](https://support.huaweicloud.com/price-cce-autopilot/cce_03_0006.html)。 |
   
 #### 使用镜像缓存
本节将详细介绍如何在CCE Autopilot集群中使用已创建的镜像缓存，包括控制台方式和kubectl命令行方式。
- [通过控制台使用镜像缓存]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 在左侧导航栏中选择"工作负载"，在右侧选择需要工作负载类型，切换至对应页签。
  
  3. 单击页面右上角"创建工作负载"，在"容器配置"中填写镜像缓存相关参数。关于工作负载的其他参数，请参见[创建工作负载](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0673.html)，您可以根据工作负载类型选择适合的参考文档。
     
     镜像缓存参数中具有三个选项，相关说明请参见[图1]和[表1 镜像缓存参数说明]。本示例选择"指定镜像缓存"，并使用[创建镜像缓存](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0158.html)中创建的镜像缓存。
     图1指定镜像缓存   
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000002217441169.png "点击放大")
      表1镜像缓存参数说明 
     | **参数**   | **示例**           | **参数说明**                                                                                                                                                                                                                                                                                                                                                                       |
     |:---|:---|:---|
     | 不使用     | -                | 不使用镜像缓存，按照"容器信息"中的镜像内容重新下载镜像。                                                                                                                                                                                                                                                                                                                                               |
     | 自动匹配镜像缓存 | -              | 从所有可用的镜像缓存中自动匹配最优镜像，并且匹配顺序如下： - 镜像匹配度：选择镜像信息匹配度最高的镜像缓存。  - 创建时间：选择创建时间最新的镜像缓存。   您可以在"容器信息 \> 基本信息 \> 镜像名称"中直接输入待使用的镜像名称，集群会按照上述规则自动匹配。如果在镜像缓存中未匹配到镜像，则不再使用镜像缓存。不使用镜像缓存后，集群将在SWR镜像仓库、镜像中心中依次匹配输入的镜像名称，若最终未匹配，则返回镜像拉取失败。 |
     | 指定镜像缓存  | autopilot-test | 指定已有的镜像缓存，该镜像缓存必须为可用状态。如果您需要新建镜像缓存请单击创建镜像缓存，参数说明请参见[创建镜像缓存](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0158.html)。 说明： 指定镜像缓存后，需要在"容器信息 \> 基本信息 \> 镜像名称"中直接输入该镜像缓存中待使用的镜像的地址。此外，"容器信息 \> 基本信息 \> 更新策略"建议不勾选"总是拉取镜像"，避免重复从原镜像仓库拉取镜像。 镜像地址获取方式：鼠标悬浮于指定的镜像缓存上，在出现的悬浮框中对应镜像的"镜像信息"即为镜像地址。        |
        
     
     
  
  4. 其余信息都配置完成后，单击"创建工作负载"。工作负载状态变为"运行中"，则说明创建成功。 
     创建完成后，在"工作负载列表"中单击该工作负载名称进入详情页，切换至"容器管理"页签即可查看匹配的镜像缓存。
     
     
   
- [通过kubectl命令使用镜像缓存]
  以创建无状态工作的负载nginx为例，为您演示如何通过kubectl命令使用镜像缓存。
  1. 通过kubectl命令连接集群，具体操作请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0107.html)。
  
  2. 执行以下命令，创建YAML文件imagecache.yaml，使用镜像缓存配置nginx工作负载，文件名称可自定义。 
     本示例仅介绍镜像缓存相关参数，具体说明请参见[表2 关键参数说明]。关于无状态工作负载的其他参数说明，请参见[创建无状态负载](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0047.html)。
     ```
     vim imagecache.yaml
     ```
     文件内容如下：
     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: nginx     # 工作负载名称
     spec:
       replicas: 1     # 实例数量
       selector:
         matchLabels:  
           app: nginx  
       template:
         metadata:
           labels:     
             app: nginx
           annotations: 
             imagecache.cce.io/specified-name: "autopilot-test"    # 指定镜像缓存
             imagecache.cce.io/auto-match: "true"    # 自动匹配镜像缓存
         spec:
           containers:
           - image: swr.cn-east-3.myhuaweicloud.com/test/nginx:latest   # 输入待使用镜像地址
             imagePullPolicy: IfNotPresent  # Pod中容器的镜像拉取策略（ImagePullPolicy）建议设置为按需拉取（IfNotPresent），从而避免重复从原镜像仓库拉取镜像
             name: nginx
           imagePullSecrets:
           - name: default-secret
     ```
     输入完成后，按**Esc键** 退出编辑，输入**:wq**保存。
      表2关键参数说明 
     | 参数                                | 是否必填 | 参数类型    | 参数描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
     |:---|:---|:---|:---|
     | imagecache.cce.io/specified-name | 否   | String   | 用于指定镜像缓存，请填写待使用镜像缓存的名称，且该镜像缓存必须为可用状态。指定镜像缓存后，containers参数中的镜像信息需与镜像缓存中的镜像信息一致。 使用该参数时，需同步在"containers.image"参数中输入待使用的镜像地址。如果填写的镜像缓存不存在，或者未在镜像缓存中找到需要的镜像，则不再使用镜像缓存，集群会按照containers中的镜像信息重新下载镜像。                                                                                                                                                                                                                                                                                                                                     |
     | imagecache.cce.io/auto-match     | 否    | String | 表示是否开启自动匹配镜像缓存，取值范围如下： - true：表示开启镜像缓存。  - false：表示不开启镜像缓存，默认为不开启。   开启后，集群将从所有可用的镜像缓存中自动匹配最优镜像，并且匹配顺序如下： - 镜像匹配度：选择镜像信息匹配度最高的镜像缓存。  - 创建时间：选择创建时间最新的镜像缓存。   如果集群未匹配到镜像，则不使用镜像缓存。 |
        
     **以上两个参数为使用镜像缓存的两种方式，只需填写一项。如果同时指定两个参数，则以"imagecache.cce.io/specified-name"为准。当两个参数都未指定时，则默认不使用镜像缓存。**
     
     
  
  3. 执行以下命令，创建工作负载。 
     ```
     kubectl create -f imagecache.yaml
     ```
     回显如下，表示已经开始创建工作负载。
     ```
     deployment.apps/nginx created
     ```
     
     
  
  4. 执行以下命令，查看工作负载状态。 
     ```
     kubectl get deployment
     ```
     回显如下，如果工作负载创建的Pod皆为可用状态，则表示创建成功。
     ```
     NAME     READY   UP-TO-DATE   AVAILABLE   AGE
     nginx    1/1     1            1           4m59s
     ```
     
     
   
