本文主要描述云盘快照的静态创建和动态创建方法。
说明
该功能目前处于邀测阶段,推荐先在非生产环境中测试,生产环境请谨慎使用。
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 及相关资源)。
kubectl apply -f vke-volumesnapshotclass.yaml
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
kubectl apply -f deployment-nginx.yaml
说明
请将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
vke-snapshot.yaml
代码如下:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: vke-snapshot # 自定义 VolumeSnapshot 名称,此名称将在恢复快照时使用。 namespace: default # VolumeSnapshot 所属命名空间。 spec: volumeSnapshotClassName: vke-volumesnapshotclass # 步骤 1 中已创建的 VolumeSnapshotClass。 source: persistentVolumeClaimName: pvc-for-snapshot # 步骤 3 的 Deployment 中使用的 PVC。
kubectl apply -f vke-snapshot.yaml
预计输出结果kubectl get VolumeSnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE vke-snapshot pvc-for-snapshot vke-volumesnapshotclass 19s
预计输出结果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
vke-snapshotcontent.yaml
代码如下:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: vke-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: vke-snapshot # 即将要关联创建的 VolumeSnapshot 名称。 namespace: default # 即将要关联创建的 VolumeSnapshot 所属命名空间。
kubectl apply -f vke-snapshotcontent.yaml
vke-snapshot.yaml
代码如下:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: vke-snapshot # VolumeSnapshot 名称,要求与步骤 1 中自定义的快照名称保持一致。另外,此名称将在恢复快照时使用。 namespace: default # VolumeSnapshot 所属命名空间,要求与步骤 1 中选择的命名空间保持一致。 spec: source: volumeSnapshotContentName: vke-snapshotcontent # 步骤 1 中已创建的 VolumeSnapshotContent 名称。
kubectl apply -f vke-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: 20Gi # storage 需要大于等于快照(原云盘)大小