全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

使用云硬盘快照

最近更新时间:2024-12-12 23:39:58

您可以在金山云容器服务Kubernetes集群中使用云硬盘快照功能实现应用数据的备份与恢复。与EBS云硬盘本身的快照功能不同,csi-driver提供的云硬盘快照功能可以帮助应用在集群中更方便灵活的使用这些数据。

前提

  • 已创建好KCE集群。

  • csi-driver组件版本需升级至2.1.1及以上。

计费说明

csi-driver提供的云硬盘快照功能基于金山云EBS快照服务实现,相关费用由EBS快照服务侧收取。具体计费信息见 定价 中快照价格信息模块。

相关概念说明

资源类型名称

说明

VolumeSnapshotClass

定义了一个快照类,类似于StorageClass,用于指定创建快照的不同属性。

VolumeSnapshot

声明了一个快照实例,类似于PersistentVolumeClaim,是用户对于卷快照的请求。

VolumeSnapshotContent

快照实例,类似于PersistentVolume,是从一个卷获取的快照,由管理员在集群中进行制备与维护。

与PVC、PV类似,VolumeSnapshot与VolumeSnapshotContent 的绑定关系是一对一的。

操作说明

动态创建快照

1.创建 VolumeSnapshotClass

使用以下YAML,创建VolumeSnapshotClass:

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: test-snapshotclass
driver: com.ksc.csi.diskplugin
deletionPolicy: Delete
parameters:
  retentionDays: "2"
  snapshotType: "CommonSnapShot"

重要参数说明:

参数

说明

deletionPolicy

用户可以配置当所绑定的 VolumeSnapshot 对象将被删除时,如何处理 VolumeSnapshotContent 对象:

  • 当值为Delete时,删除VolumeSnapshot时,VolumeSnapshotContent以及关联的快照也会被一起删除。

  • 当值为Retain时,删除VolumeSnapshot时,VolumeSnapshotContent以及关联的快照会被保留。

parameters.retentionDays

快照自动回收时间。

parameters.snapshotType

  • 值为时CommonSnapShot创建普通快照。如不指定,默认创建普通快照。

  • 值为LocalSnapShot时创建极速快照。

快照类型对比:

快照类型

存储位置

创建速度

恢复速度

容灾范围

普通快照

同区域下的对象存储KS3集群中

分钟级

分钟级

区域级别

极速可用快照

云硬盘所在的EBS集群中

秒级

秒级

可用区级别

2.创建应用一

使用以下YAML,创建应用一:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: test-sc
provisioner: com.ksc.csi.diskplugin
parameters:
  type: SSD3.0
  region: cn-beijing-6 # 填写您所需地域
  zone: cn-beijing-6a # 填写您所需可用区
  chargetype: Daily
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: test-sc
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-dp1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: t-pvc
          mountPath: "/data"
      volumes:
      - name: t-pvc
        persistentVolumeClaim:
          claimName: test-pvc
3.向应用一中写入数据

a.使用kubectl get pods命令查看应用一Pod名称:

输出:

NAME              READY   STATUS    RESTARTS   AGE
test-dp1-9***   1/1         Running    0                 88s

b.写入数据并查看:

kubectl exec -it test-dp1-9*** -- touch /data/test
kubectl exec -it test-dp1-9*** -- ls /data

输出:

lost+found test
4.创建VolumeSnapshot

使用以下YAML,创建VolumeSnapshot,指定需要创建快照的PVC:

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: test-snapshot
  namespace: default
spec:
  volumeSnapshotClassName: test-snapshotclass
  source:
    persistentVolumeClaimName: test-pvc

执行以下命令检查是否已成功创建出VolumeSnapshot和VolumeSnapshotContent。

  1. 查看VolumeSnapshot命令:

kubectl get VolumeSnapshot
# 或者
kubectl get vs
  1. 查看VolumeSnapshotContent命令:

kubectl get VolumeSnapshotContent
# 或者
kubectl get vsc
5.创建应用二并恢复数据

使用以下YAML,创建应用二:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc-restore
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: test-sc
  dataSource:
    name: test-snapshot
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-dp2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: t-pvc-restore
          mountPath: "/data"
      volumes:
      - name: t-pvc-restore
        persistentVolumeClaim:
          claimName: test-pvc-restore

验证数据恢复:

a.使用kubectl get pods命令查看应用二Pod名称。

输出:

NAME               READY   STATUS    RESTARTS   AGE
test-dp1-9***    1/1         Running     0               5m10s
test-dp2-6***    1/1        Running     0                1m30s

b.查看数据:

kubectl exec -it test-dp2-6*** -- ls /data

输出:

lost+found test

静态创建快照

静态创建快照需使用硬盘已有快照。

1.创建VolumeSnapshotContent。

使用以下YAML,创建VolumeSnapshotContent:

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
  name: test-snapshotcontent
spec:
  deletionPolicy: Retain
  driver: com.ksc.csi.diskplugin
  source:
    snapshotHandle: <您要使用的快照ID>
  volumeSnapshotRef:
    name: test-snapshot1
    namespace: default

重要参数说明:

参数

说明

snapshotHandle

要使用的ebs快照ID。

volumeSnapshotRef

要创建的VolumeSnapshot信息:

  • name:要创建的VolumeSnapshot的名称。

  • namespace:要创建的VolumeSnapshot所在的命名空间。

2.创建VolumeSnapshot

使用以下YAML,创建VolumeSnapshot:

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: test-snapshot1 #需与刚才创建的VolumeSnapshotContent中指定的VolumeSnapshot名称一致
  namespace: default
spec:
  source:
    volumeSnapshotContentName: test-snapshotcontent #需与刚才创建的VolumeSnapshotContent名称一致
3.创建应用恢复数据
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc-restore1
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: test-sc
  dataSource:
    name: test-snapshot1
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-dp3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: t-pvc-restore
          mountPath: "/data"
      volumes:
      - name: t-pvc-restore
        persistentVolumeClaim:
          claimName: test-pvc-restore1

验证数据恢复:

a.使用kubectl get pods命令查看应用Pod名称:

输出:

NAME              READY   STATUS    RESTARTS   AGE
test-dp3-7***   1/1         Running    0                 2m42s

b.查看数据:

kubectl exec -it test-dp3-7*** -- ls /data

输出:

lost+found test

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈