# 快照与备份
CCE Autopilot集群通过云硬盘EVS服务为您提供快照功能。云硬盘快照简称快照，指云硬盘数据在某个时刻的完整复制或镜像，是一种重要的数据容灾手段。当数据丢失时，可通过快照将数据完整地恢复到快照时间点。
- **[创建快照]** **：**通过快照可以保存云硬盘在指定时刻的状态，并在需要时用于数据恢复。
- **[使用快照创建PVC]** **：**当应用误操作、系统异常或升级迁移等导致PV数据丢失或损坏时，您可以基于已有快照创建新的PVC，从而快速恢复到快照创建时的状态，保证业务连续性。
#### 前提条件
- 您已经创建好一个集群。
- 如果您需要通过命令行创建，需要使用kubectl连接到集群，详情请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0107.html)。
 
#### 约束与限制
- 目前，只有部分区域支持使用云硬盘，具体请以控制台为准。
- 集群版本要求在v1.27.8-r0、v1.28.6-r0及以上。如果您的集群版本不符合该要求，则需要通过集群升级使用该功能。
- 基于快照创建的云硬盘，其子类型（普通IO/高IO/超高IO等）、是否加密、磁盘模式（VBD/SCSI）、共享性(非共享/共享)、容量等都要与快照关联母盘保持一致，这些属性查询和设置出来后不能够修改。
- 只有可用或正在使用状态的磁盘能创建快照，且单个磁盘最大支持创建7个快照。
- 加密磁盘的快照数据以加密方式存放，非加密磁盘的快照数据以非加密方式存放。
 
- 使用快照创建PVC时，如果PVC仍处于Pending状态，请不要删除该快照，否则可能导致快照删除失败。
#### 使用场景
快照功能可以帮助您实现以下需求：
- **日常备份数据**
  通过对云硬盘定期创建快照，实现数据的日常备份，可以应对由于误操作、病毒以及黑客攻击等导致数据丢失或不一致的情况。
  
- **快速恢复数据**
  更换操作系统、应用软件升级或业务数据迁移等重大操作前，您可以创建一份或多份快照，一旦升级或迁移过程中出现问题，可以通过快照及时将业务恢复到快照创建点的数据状态。
  例如，当由于云服务器A的系统盘A发生故障而无法正常开机时，由于系统盘A已经故障，因此也无法将快照数据回滚至系统盘A。此时您可以使用系统盘A已有的快照新创建一块云硬盘B并挂载至正常运行的云服务器B上，从而云服务器B能够通过云硬盘B读取原系统盘A的数据。
  ![](https://support.huaweicloud.com/usermanual-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
  当前CCE Autopilot集群提供的快照能力与K8s社区CSI快照功能一致：只支持基于快照创建新云硬盘，不支持将快照回滚到源云硬盘。
  
- **快速部署多个业务**
  通过同一个快照可以快速创建出多个具有相同数据的云硬盘，从而可以同时为多种业务提供数据资源。例如数据挖掘、报表查询和开发测试等业务。这种方式既保护了原始数据，又能通过快照创建的新云硬盘快速部署其他业务，满足企业对业务数据的多元化需求。
  
 
 #### 创建快照
您可以通过控制台或kubectl命令行的方式创建快照，具体步骤如下：
- [控制台方式]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
  
  2. 单击集群名称进入集群，在左侧选择"存储"，在右侧选择"快照与备份"页签。
  
  3. 单击右上角"创建快照"，在弹出的窗口中设置相关参数。 
     图1创建快照   
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000002043141678.png "点击放大")
     表1创建快照参数说明 
     | 参数   | 说明                                 |
     |:---|:---|
     | 快照名称   | 请填写快照的名称，例如"disksnap-test1"。      |
     | 选择存储 | 选择要创建快照的PVC，仅能选择云硬盘类型PVC，例如选择"pvc"。 |
        
     
     
  
  4. 单击"创建"。在"快照与备份"页签中可以看到新建的快照信息。 
     图2新建的快照   
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000002464849269.png "点击放大")
     
     
   
- [kubectl命令行方式]
  1. 使用kubectl连接集群。
  
  2. 执行以下命令，创建snapshot.yaml文件，用于创建快照。文件名称支持自定义。 
     ```
     vim snapshot.yaml
     ```
     文件内容如下：
     ```
     kind: VolumeSnapshot
     apiVersion: snapshot.storage.k8s.io/v1beta1
     metadata:
       name: disksnap-test1   # 快照名称
       namespace: default
     spec:
       source:
         persistentVolumeClaimName: pvc     # PVC的名称，仅能选择云硬盘类型PVC
       volumeSnapshotClassName: csi-disk-snapclass
     ```
     
     
  
  3. 执行以下命令，创建上述快照。-n用于指定命名空间，您可以将default替换为对应的命名空间。 
     ```
     kubectl apply -f snapshot.yaml -n default
     ```
     回显结果如下：
     ```
     volumesnapshot.snapshot.storage.k8s.io/disksnap-test1 created
     ```
     
     
  
  4. 执行以下命令，查看快照是否创建成功。 
     ```
     kubectl get volumesnapshot -n default
     ```
     回显结果如下，当READYTOUSE为true，则说明快照已创建成功。
     ```
     NAME                 READYTOUSE    SOURCEPVC       SOURCESNAPSHOTCONTENT     RESTORESIZE   SNAPSHOTCLASS         ...  
     disksnap-test1       true          pvc-evs-test    <none>                    10Gi          csi-disk-snapclass    ...
     ```
     
     
   
 #### 使用快照创建PVC
当应用误操作、系统异常或升级迁移等导致PV数据丢失或损坏时，您可以基于已有快照创建新的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-autopilot/zh-cn_image_0000002046573450.png "点击放大")
     表2利用快照创建PVC的参数说明 
     | 参数           | 说明                                                                                                                                                                                                                                                                                                                                                                  |
     |:---|:---|
     | PVC名称        | 请输入PVC名称，如"pvc-disksnap"。                                                                                                                                                                                                                                                                                                                                          |
     | 存储卷名称前缀（可选） | 定义自动创建的底层存储名称，实际创建的底层存储名称为"存储卷名称前缀"与"PVC UID"的拼接组合，如果不填写该参数，默认前缀为"pvc"。 例如，存储卷名称前缀设置为"test"，则实际创建的底层存储名称test-{uid}。                                                                                                                                                                                                                 |
     | 资源标签          | 通过为资源添加标签，可以对资源进行自定义标记，实现资源的分类。 您可以在TMS中创建"预定义标签"，预定义标签对所有支持标签功能的服务资源可见，通过使用预定义标签可以提升标签创建和迁移效率。具体请参见[创建预定义标签](https://support.huaweicloud.com/usermanual-tms/zh-cn_topic_0144368884.html)。 CCE服务会自动创建"CCE-Cluster-ID=\<集群ID\>"、"CCE-Cluster-Name=\<集群名称\>"、"CCE-Namespace=\<命名空间名称\>"的系统标签，您无法自定义修改。 |
        
     
     
  
  4. 单击"创建"。选择"存储卷声明"页签，可以看到新建的PVC。 
     图4新建的PVC   
     ![](https://support.huaweicloud.com/usermanual-cce-autopilot/zh-cn_image_0000002078206297.png "点击放大")
     
     
     
   
- [kubectl命令行方式]
  1. 使用kubectl连接集群。
  
  2. 执行以下命令，创建pvc-test.yaml文件，通过快照创建PVC。文件名称支持自定义。 
     ```
     vim pvc-test.yaml
     ```
     文件内容如下，关于PVC的详细介绍请参见[使用kubectl命令行方式](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0615.html#cce_11_0615__section189114109321)。
     ```
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-disksnap    # PVC名称
       namespace: default
       annotations:
         everest.io/disk-volume-type: SSD     # 云硬盘类型，需要与快照源云硬盘保持一致
         everest.io/disk-volume-tags: '{"key1":"value1","key2":"value2"}' # 可选字段，用户自定义资源标签
         everest.io/disk-iops: '3000'      # 可选字段，设置云硬盘的IOPS，仅云硬盘类型为GPSSD2或ESSD2时支持配置
         everest.io/disk-throughput: '125' # 可选字段，设置云硬盘的吞吐量，仅云硬盘类型为GPSSD2时支持配置
       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: disksnap-test1             # 快照的名称
         kind: VolumeSnapshot
         apiGroup: snapshot.storage.k8s.io
     ```
     
     
  
  3. 执行以下命令，创建PVC。-n用于指定命名空间，您可以将default替换为对应的命名空间。 
     ```
     kubectl apply -f pvc-test.yaml -n default
     ```
     回显结果如下：
     ```
     persistentvolumeclaim/pvc-disksnap created
     ```
     
     
  
  4. 执行以下命令，查看PVC是否创建成功。 
     ```
     kubectl get pvc pvc-disksnap
     ```
     回显结果如下，当STATUS为Bound，则说明PVC已创建成功。
     ```
     NAME          STATUS   VOLUME                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
     pvc-disksnap   Bound    pvc-7b9f4c8d-1a2b-3c4d-5e6f-7g8h9i0jkl   10Gi     RWO         csi-disk     1m
     ```
     
     
   
