
# 使用镜像快照
在创建Pod时，系统需要拉取容器镜像，而镜像下载速度会直接影响Pod的启动效率。通过使用镜像快照，可以加速镜像拉取，提升Pod启动速度，并减少带宽消耗。使用镜像快照创建Pod，支持"自动匹配"和"明确指定"两种方式。
#### 约束与限制
- 如果同时使用"明确指定"和"自动匹配"两种方式创建Pod，当二者冲突时，系统会返回400报错。
 
#### 方式一：自动匹配
自动匹配将从所有用户创建的可用的镜像快照中选择最优的镜像快照，按以下顺序进行匹配：
1. 镜像匹配度：优先选择匹配度高的镜像快照，匹配度指的是Pod和镜像快照两者在镜像上的匹配情况。
2. 创建时间：优先选择创建时间更新的镜像快照。
创建CCI实例时，可以通过注解中添加以下键值来开启自动匹配镜像快照。
| 名称                                   | 示例值  | 描述                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|
| cci.io/image-snapshot-auto-match     | true | 设置是否开启自动匹配镜像快照。                                                                                                                                                                                                                                                                                                                      |
| cci.io/image-snapshot-usage-strategy | size | 设置镜像快照自动匹配策略，默认为"size"。 - size：逐个匹配Pod镜像与镜像快照中的镜像，累加匹配成功的镜像size，选取累加值最大的镜像快照。  - quantity：逐个匹配Pod镜像与镜像快照中的镜像，统计匹配成功的镜像数量，选取匹配数量最大的镜像快照。   |
| cci.io/image-snapshot-exact-match    | true | 完全匹配镜像快照。Pod内所有容器镜像是否均要完全匹配镜像快照，默认为false。                                                                                                                                                                                                                                                                                            |
   
以创建Deployment为例：
```
apiVersion: cci/v2
kind: Deployment
metadata:
  name: deploy-example
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        cci.io/image-snapshot-auto-match: "true"
        cci.io/image-snapshot-exact-match: "true"
    spec:
      containers:
        - image: redis
          name: container-0
          resources:
            limits:
              cpu: 500m
              memory: 1024Mi
            requests:
              cpu: 500m
              memory: 1024Mi
      imagePullSecrets:
        - name: imagepull-secret
```
#### 方式二：明确指定
明确指定使用的镜像快照。
创建CCI实例时，可以通过在注解中添加以下键值来明确指定镜像快照和拦截策略。
| 名称                                            | 示例值                | 描述                                                          |
|:---|:---|:---|
| cci.io/image-snapshot-specified-name          | "my-imagesnapshot" | 指定的镜像快照名称。                                                  |
| cci.io/image-snapshot-reject-if-not-available | "true"             | 如果指定的镜像快照不存在或状态不可用，默认会从镜像仓库下载镜像。如果需要拦截实例创建，则需配置此注解为 "true"。 |
   
以创建Deployment为例：
```
apiVersion: cci/v2
kind: Deployment
metadata:
  name: deploy-example
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        cci.io/image-snapshot-specified-name: "my-imagesnapshot"
        cci.io/image-snapshot-reject-if-not-available: "true"
    spec:
      containers:
        - image: redis
          name: container-0
          resources:
            limits:
              cpu: 500m
              memory: 1024Mi
            requests:
              cpu: 500m
              memory: 1024Mi
      imagePullSecrets:
        - name: imagepull-secret
```
