You need to enable JavaScript to run this app.
导航
使用云盘快照
最近更新时间:2023.09.01 12:29:42首次发布时间:2023.03.21 11:58:39

本文主要描述云盘快照的静态创建和动态创建方法。

说明

该功能目前处于邀测阶段,推荐先在非生产环境中测试,生产环境请谨慎使用。

前提条件

  • 已在云服务器(ECS)开启快照能力。

    说明

    ECS 的快照功能处于 免费阶段,请在 ECS 提交功能试用申请,详细介绍参见:快照文档

  • 已安装 csi-ebs 组件。详细操作,请参见 csi-ebs 组件
  • 已安装 snapshot-controller 组件。详细操作,请参见 安装组件
  • 已通过 kubectl 连接集群。详细操作,请参见 连接集群

动态创建快照

  1. 创建 VolumeSnapshotClass 的 YAML 文件。示例文件vke-volumesnapshotclass.yaml代码如下:
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: vke-volumesnapshotclass   # VolumeSnapshotClass 名称。
    driver: ebs.csi.volcengine.com   # 驱动类型,本示例为 ebs.csi.volcengine.com,表示火山引擎 csi-ebs 插件。
    deletionPolicy: Delete   # 快照回收策略,包括:Delete(删除 VolumeSnapshot 时,同时删除 VolumeSnapshotContent 及相关资源)、Retain(删除 VolumeSnapshot 后,手动删除 VolumeSnapshotContent 及相关资源)。
    
  2. 执行以下命令创建 VolumeSnapshotClass。
    kubectl apply -f vke-volumesnapshotclass.yaml
    
  3. 创建一个工作负载(应用) 的 YAML 文件并写入数据。
    1. 本文以创建 Deployment 为例,示例文件deployment-nginx.yaml代码如下。详细的操作步骤和说明,请参见 使用云盘动态存储卷。其余类型的工作负载,请参见 工作负载
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: deployment-nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            annotations:
            # vke.volcengine.com/burst-to-vci: enforce  # 强制使用 VCI,如果有 VCI 需求需要添加本行注解
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx-c1
              image: cr-cn-beijing.volces.com/****/vci-demo-nginx:latest #指定需要部署的镜像文件
              ports:
              - containerPort: 80
                name: web
              volumeMounts:
              - name: ebs-essd-volume0
                mountPath: /data
            volumes:
              - name: ebs-essd-volume0
                persistentVolumeClaim:
                  claimName: pvc-ebs-essd
      
    2. 执行以下命令创建 Deployment。
      kubectl apply -f deployment-nginx.yaml
      
    3. 为 Pod 写入数据。

      说明

      请将deployment-nginx-6fcb64f6cd-qcxkt替换为您自己的 Pod 名称。

      kubectl exec deployment-nginx-6fcb64f6cd-qcxkt -- touch /data/test	
      
      查看数据是否成功写入。
      kubectl exec deployment-nginx-6fcb64f6cd-qcxkt -- ls /data	
      
      预期输出结果如下:
      lost+found test	
      
  4. 创建 VolumeSnapshot 的 YAML 文件。示例文件vke-snapshot.yaml代码如下:
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: vke-snapshot
      namespace: default  # VolumeSnapshot 所属命名空间。
    spec:
      volumeSnapshotClassName: vke-volumesnapshotclass  # 步骤 1 中已创建的 VolumeSnapshotClass。
      source:
        persistentVolumeClaimName: pvc-for-snapshot  # 步骤 3 的 Deployment 中使用的 PVC。
    
  5. 执行以下命令创建 VolumeSnapshot。
    kubectl apply -f vke-snapshot.yaml
    
  6. 查看快照是否创建成功。
    • 查看 VolumeSnapshot
      kubectl get VolumeSnapshot
      
      预计输出结果
      NAME           READYTOUSE   SOURCEPVC          SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS             SNAPSHOTCONTENT   CREATIONTIME   AGE
      vke-snapshot                pvc-for-snapshot                                         vke-volumesnapshotclass                                    19s		
      
    • 查看 VolumeSnapshotContent
      kubectl get VolumeSnapshotContent
      
      预计输出结果
      NAME                   READYTOUSE   RESTORESIZE   DELETIONPOLICY   DRIVER                   VOLUMESNAPSHOTCLASS       VOLUMESNAPSHOT   VOLUMESNAPSHOTNAMESPACE   AGE
      snapcontent-b523****   true         21474836480   Delete           ebs.csi.volcengine.com   vke-volumesnapshotclass   vke-snapshot     default                   4m36s		
      

静态创建快照

  1. 云服务器控制台 创建快照。详细操作,请参见 创建快照
  2. 创建 VolumeSnapshotContent 的 YAML 文件。示例文件new-snapshotcontent.yaml代码如下:
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent
    metadata:
      name: new-snapshotcontent
    spec:
      deletionPolicy: Retain   # 快照回收策略,包括:Delete(删除 VolumeSnapshot 时,同时删除 VolumeSnapshotContent 及相关资源)、Retain(删除 VolumeSnapshot 后,手动删除 VolumeSnapshotContent 及相关资源)。
      driver: ebs.csi.volcengine.com   # 驱动类型,本示例为 ebs.csi.volcengine.com,表示火山引擎 csi-ebs 插件。
      source:
        snapshotHandle: snap-f1ksxj7k1d********   # ECS 上已创建的快照 ID。
      volumeSnapshotRef:
        name: new-snapshot   # 即将要关联创建的 VolumeSnapshot 名称。
        namespace: default   # 即将要关联创建的 VolumeSnapshot 所属命名空间。
    
  3. 执行如下命令,创建 VolumeSnapshotContent。
    kubectl apply -f new-snapshotcontent.yaml
    
  4. 创建 VolumeSnapshot 的 YAML 文件。示例文件new-snapshot.yaml代码如下:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: new-snapshot   # 步骤 1 中已设置的 VolumeSnapshot 名称。
  namespace: default   # 步骤 1 中已设置的 VolumeSnapshot 所属命名空间。
spec:
  source:
    volumeSnapshotContentName: new-snapshotcontent   # 步骤 1 中已创建的 VolumeSnapshotContent 名称。
  1. 执行如下命令,创建 VolumeSnapshot。
    kubectl apply -f new-snapshot.yaml
    

恢复快照

动态或静态创建快照后,支持从快照恢复数据到新的 PVC。PVC 的示例 YAML 文件如下所示。详细说明,请参见 使用云盘动态存储卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: restore-test
  namespace: default
spec:
  storageClassName: cbs-csi
  dataSource:
    name: vke-snapshot     # 动态或静态创建快照时设置的 VolumeSnapshot 名称。
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi    # storage 需要大于等于快照(原云盘)大小