最近更新时间: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 的绑定关系是一对一的。
使用以下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 对象:
|
parameters.retentionDays | 快照自动回收时间。 |
parameters.snapshotType |
|
快照类型对比:
快照类型 | 存储位置 | 创建速度 | 恢复速度 | 容灾范围 |
普通快照 | 同区域下的对象存储KS3集群中 | 分钟级 | 分钟级 | 区域级别 |
极速可用快照 | 云硬盘所在的EBS集群中 | 秒级 | 秒级 | 可用区级别 |
使用以下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
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
使用以下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。
查看VolumeSnapshot命令:
kubectl get VolumeSnapshot
# 或者
kubectl get vs
查看VolumeSnapshotContent命令:
kubectl get VolumeSnapshotContent
# 或者
kubectl get vsc
使用以下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
静态创建快照需使用硬盘已有快照。
使用以下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信息:
|
使用以下YAML,创建VolumeSnapshot:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: test-snapshot1 #需与刚才创建的VolumeSnapshotContent中指定的VolumeSnapshot名称一致
namespace: default
spec:
source:
volumeSnapshotContentName: test-snapshotcontent #需与刚才创建的VolumeSnapshotContent名称一致
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
纯净模式