# 快照与备份
CCE通过云硬盘EVS服务为您提供快照功能，云硬盘快照简称快照，指云硬盘数据在某个时刻的完整复制或镜像，是一种重要的数据容灾手段，当数据丢失时，可通过快照将数据完整地恢复到快照时间点。
- [创建快照]：通过快照可以保存云硬盘在指定时刻的状态，并在需要时用于数据恢复。
- [使用快照创建PVC]：当应用误操作、系统异常或升级迁移等导致PV数据丢失或损坏时，您可以基于已有快照创建新的PVC，从而快速恢复到快照创建时的状态，保证业务连续性。
#### 使用须知
- 快照功能**仅支持v1.15及以上版本**的集群，且需要安装基于CSI的everest插件才可以使用。
- 基于快照创建的云硬盘，其子类型（普通IO/高IO/超高IO）、是否加密、磁盘模式（VBD/SCSI）、共享性(非共享/共享)、容量等都要与快照关联磁盘保持一致，这些属性查询和设置出来后不能够修改。
- 只有可用或正在使用状态的磁盘能创建快照，且单个磁盘最大支持创建7个快照。
- 创建快照功能仅支持使用everest插件提供的存储类（StorageClass名称以csi开头）创建的PVC。使用Flexvolume存储类（StorageClass名为ssd、sas、sata）创建的PVC，无法创建快照。
- 加密磁盘的快照数据以加密方式存放，非加密磁盘的快照数据以非加密方式存放。
- 使用快照创建PVC时，如果PVC仍处于Pending状态，请不要删除该快照，否则可能导致快照删除失败。
 
#### 使用场景
快照功能可以帮助您实现以下需求：
- **日常备份数据**
  通过对云硬盘定期创建快照，实现数据的日常备份，可以应对由于误操作、病毒以及黑客攻击等导致数据丢失或不一致的情况。
  
- **快速恢复数据**
  更换操作系统、应用软件升级或业务数据迁移等重大操作前，您可以创建一份或多份快照，一旦升级或迁移过程中出现问题，可以通过快照及时将业务恢复到快照创建点的数据状态。
  例如，当由于云服务器 A的系统盘 A发生故障而无法正常开机时，由于系统盘 A已经故障，因此也无法将快照数据回滚至系统盘A。此时您可以使用系统盘 A已有的快照新创建一块云硬盘 B并挂载至正常运行的云服务器 B上，从而云服务器 B能够通过云硬盘 B读取原系统盘 A的数据。
  ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
  当前CCE提供的快照能力与K8s社区CSI快照功能一致：只支持基于快照创建新云硬盘，不支持将快照回滚到源云硬盘。
  
- **快速部署多个业务**
  通过同一个快照可以快速创建出多个具有相同数据的云硬盘，从而可以同时为多种业务提供数据资源。例如数据挖掘、报表查询和开发测试等业务。这种方式既保护了原始数据，又能通过快照创建的新云硬盘快速部署其他业务，满足企业对业务数据的多元化需求。
  
 
#### 工作原理
在CCE中使用云硬盘创建快照及恢复流程如下图所示。
图1快照与备份流程   
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002625451339.png "点击放大")
- [创建快照流程]
  1. **发起请求：**用户创建一个VolumeSnapshot对象，指明要对哪个PersistentVolumeClaim（PVC）做快照。
  
  2. **控制器协调：**集群中的CSI Snapshotter Controller会持续监控VolumeSnapshot对象。当它发现新的快照请求时，就开始工作。
  
  3. **调用驱动：**控制器调用对应的CSI Driver，请求创建存储卷快照。
  
  4. **快照创建：**CSI Driver调用底层存储系统API接口，执行创建快照的操作。
  
  5. **结果反馈：**
     1. 快照创建成功后，将快照的唯一标识返回给CSI Driver。
     
     2. 然后逐级返回到CSI Snapshotter Controller控制器。
      
  
  6. **对象绑定：**
     1. 控制器会自动创建一个集群级别的VolumeSnapshotContent对象，它在spec.source字段中映射了底层那个真实的存储快照。
     
     2. 将这个VolumeSnapshotContent与创建的VolumeSnapshot对象绑定在一起，快照创建完成。
      
   
- [从快照恢复流程]
  1. **发起请求：**用户创建一个新的PersistentVolumeClaim（PVC）对象，并在spec.dataSource字段中指定数据源为之前创建的VolumeSnapshot。
  
  2. **控制器协调：**CSI Provisioner Controller监控到新PVC的创建，并发现它指定了一个快照作为数据源。
  
  3. **调用驱动：**该控制器调用CSI Driver的创建卷接口，并在请求参数中附带了快照的ID。
  
  4. **存储操作：**CSI Driver调用底层存储系统的API，直接从一个已有的快照中创建一个新的存储卷。这个新的存储卷中包含了快照中的所有数据。
  
  5. **结果反馈：**
     1. 新的存储卷创建成功后，将存储卷信息返回给CSI Driver。
     
     2. 然后逐级返回到CSI Provisioner Controller控制器。
      
  
  6. **对象绑定：**
     1. 创建成功后，CSI Provisioner Controller会自动创建一个新的PersistentVolume（PV）对象来描述这个新存储卷。
     
     2. 然后将其与PVC进行绑定。之后，Pod就可以使用这个新的PVC来访问恢复出来的数据了。
      
   
 #### 创建快照
您可以通过控制台或kubectl命令行的方式创建快照，具体步骤如下：
- [控制台方式]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 在左侧选择"存储"，在右侧选择"快照与备份"页签。
  
  3. 单击右上角"创建快照"，在弹出的窗口中设置相关参数。 
     - 快照名称：填写快照的名称。
     
     - 选择存储：选择要创建快照的PVC，仅能选择云硬盘类型PVC。
       图2创建快照   
       ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002397571633.png "点击放大") 
     
     
     
     
  
  4. 单击"创建"。
   
- [kubectl命令行方式]
  1. 使用kubectl连接集群。
  
  2. 执行以下命令，创建snapshot.yaml文件，用于创建快照。文件名称支持自定义。 
     ```
     vim snapshot.yaml
     ```
     文件内容如下：
     ```
     kind: VolumeSnapshot
     apiVersion: snapshot.storage.k8s.io/v1
     metadata:
       name: cce-disksnap-test   # 快照名称，支持自定义
       namespace: default
     spec:
       source:
         persistentVolumeClaimName: pvc-evs-test     # PVC的名称，仅能选择云硬盘类型PVC
       volumeSnapshotClassName: csi-disk-snapclass
     ```
     
     
  
  3. 执行以下命令，创建上述快照。-n用于指定命名空间，您可以将default替换为对应的命名空间。 
     ```
     kubectl apply -f snapshot.yaml -n default
     ```
     回显结果如下：
     ```
     volumesnapshot.snapshot.storage.k8s.io/cce-disksnap-test created
     ```
     
     
  
  4. 执行以下命令，查看快照是否创建成功。 
     ```
     kubectl describe volumesnapshot {快照名称}
     ```
     当回显中的Status字段下显示Ready To Use: true时，则说明快照已创建成功。
     ```
     Status:
     Bound Volume Snapshot Content Name: snapcontent-4fef9fdc-2c0c-4d57-a5b4-2654****
     Creation Time: 2026-04-11T07:32:38
     Ready To Use: true
     Restore Size: 10Gi
     ```
     
     
   
 #### 使用快照创建PVC
通过快照创建云硬盘PVC时，磁盘类型、磁盘模式、加密属性需和快照源云硬盘保持一致。您可以通过控制台或命令行方式创建PVC，具体操作如下：
- [控制台方式]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 在左侧选择"存储"，在右侧选择"快照与备份"页签。
  
  3. 找到需要创建PVC的快照，单击"创建存储卷声明 PVC"，并在弹出窗口中设置PVC参数。 
     图3创建PVC   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002364107042.png "点击放大")
     表1设置PVC参数 
     | 参数          | 示例         | 说明                                                                                                                                                                                                                                                                                                                                                                                          |
     |:---|:---|:---|
     | PVC名称      | pvc-test | 表示PVC名称。 命名规则：由小写字母、数字、中划线（-）组成，且中划线不可位于开头或结尾，字符控制在63个以内。                                                                                                                                                                                                                                                                                                    |
     | 计费模式          | 按需计费        | 表示底层存储的计费模式，包括"按需计费"和"包年/包月"。                                                                                                                                                                                                                                                                                                                                                               |
     | 存储卷名称前缀（可选） | -        | 用于定义自动创建的底层存储名称，实际创建的底层存储名称为"存储卷名称前缀"与"PVC UID"的拼接组合，如果不填写该参数，默认前缀为"pvc"。例如，存储卷名称前缀设置为"test"，则实际创建的底层存储名称test-{uid}。 集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时支持，且集群中需安装2.4.15及以上版本的Everest插件。                                                                                                                                                      |
     | 资源标签        | -         | 通过为资源添加标签，可以对资源进行自定义标记，实现资源的分类。集群中everest版本为2.1.39及以上时支持。 您可以在TMS中创建"预定义标签"，预定义标签对所有支持标签功能的服务资源可见，通过使用预定义标签可以提升标签创建和迁移效率。具体请参见[创建预定义标签](https://support.huaweicloud.com/usermanual-tms/zh-cn_topic_0144368884.html)。 CCE服务会自动创建"CCE-Cluster-ID=\<集群ID\>"、"CCE-Cluster-Name=\<集群名称\>"、"CCE-Namespace=\<命名空间名称\>"的系统标签，您无法自定义修改。 |
        
     
     
  
  4. 单击"创建"。
   
- [kubectl命令行方式]
  1. 使用kubectl连接集群。
  
  2. 执行以下命令，创建pvc-test.yaml文件，通过快照创建PVC。文件名称支持自定义。 
     ```
     vim pvc-test.yaml
     ```
     文件内容如下，关于PVC的详细介绍请参见[kubectl命令行方式](https://support.huaweicloud.com/usermanual-cce/cce_10_0615.html#cce_10_0615__section189114109321)。
     ```
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-test
       namespace: default
       annotations:
         everest.io/disk-volume-type: SSD     # 云硬盘类型，需要与快照源云硬盘保持一致
         everest.io/disk-volume-tags: '{"key1":"value1","key2":"value2"}' # 可选字段，用户自定义资源标签
       labels:
         failure-domain.beta.kubernetes.io/region: <your_region>   # 替换为云硬盘所在的区域
         failure-domain.beta.kubernetes.io/zone: <your_zone>       # 替换为云硬盘所在的可用区
     spec:
       accessModes:
       - ReadWriteOnce
       resources:
         requests:
           storage: 10Gi
       storageClassName: csi-disk
       dataSource:
         name: cce-disksnap-test             # 快照的名称
         kind: VolumeSnapshot
         apiGroup: snapshot.storage.k8s.io
     ```
     
     
  
  3. 执行以下命令，创建PVC。-n用于指定命名空间，您可以将default替换为对应的命名空间。 
     ```
     kubectl apply -f pvc-test.yaml -n default
     ```
     回显结果如下：
     ```
     persistentvolumeclaim/pvc-test created
     ```
     
     
  
  4. 执行以下命令，查看PVC是否创建成功。 
     ```
     kubectl get pvc pvc-test
     ```
     回显结果如下，当STATUS为Bound，则说明PVC已创建成功。
     ```
     NAME      STATUS   VOLUME                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
     pvc-test   Bound    pvc-7b9f4c8d-1a2b-3c4d-5e6f-7g8h9i0jkl   10Gi     RWO         csi-disk     1m
     ```
     
     
   
