当您的Kubernetes集群中运行着有状态应用,数据丢失往往意味着灾难。Kubernetes存储卷快照功能允许您捕获PersistentVolume(PV)在某个时间点的状态,并从中恢复数据。本文将指导您如何创建和恢复存储卷快照,并指出常见误区。
存储卷快照是什么?
存储卷快照是PersistentVolume在特定时间点的副本。它不同于备份,快照通常存储在同一个存储系统中,创建和恢复速度更快,但无法抵御存储系统本身的故障。Kubernetes通过CSI(Container Storage Interface)驱动支持快照功能,您需要确认您的存储插件已实现快照API。
前提条件:CSI驱动与快照支持
要使用存储卷快照,您的集群需要满足以下条件:
- Kubernetes版本不低于1.17(快照功能进入Beta),且启用了
VolumeSnapshotDataSource特性门控。 - 您的CSI驱动实现了
CreateSnapshot和DeleteSnapshot操作。检查驱动文档或使用kubectl get csidriver查看。 - 已安装快照控制器(snapshot-controller)和CRD(CustomResourceDefinitions)。通常由发行版或云提供商预装。
如果缺少这些组件,创建快照会失败。您可以通过kubectl get crd volumesnapshots.snapshot.storage.k8s.io确认CRD是否存在。
创建存储卷快照
创建快照需要定义VolumeSnapshotClass和VolumeSnapshot资源。首先,定义一个VolumeSnapshotClass,它指定了快照使用的CSI驱动和参数:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-snapclass
driver: ebs.csi.aws.com
parameters:
type: gp3
deletionPolicy: Delete
然后,创建VolumeSnapshot对象,引用您要快照的PVC:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: my-snapshot
spec:
volumeSnapshotClassName: csi-snapclass
source:
persistentVolumeClaimName: my-pvc
应用后,快照控制器会调用CSI驱动创建快照。您可以通过kubectl get volumesnapshot查看状态。
从快照恢复PersistentVolume
恢复快照意味着从快照创建新的PVC。这通常用于数据恢复或环境复制。首先,定义一个新的PVC,并指定dataSource字段指向快照:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: restored-pvc
spec:
storageClassName: standard
dataSource:
name: my-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
创建后,Kubernetes会通过CSI驱动从快照克隆一个新的卷。注意:新PVC的容量应不小于快照大小,否则可能失败。恢复后,您可以将该PVC挂载到Pod中使用。
快照的局限性
快照并非万能。以下情况可能导致恢复失败:
- 存储系统故障:如果存储后端整体不可用,快照也会丢失。快照不能替代跨区域备份。
- 应用一致性:默认快照是崩溃一致性的,可能不包含内存中未写入磁盘的数据。对于数据库,建议先暂停写入或使用应用层快照。
- CSI驱动差异:不同驱动的快照行为可能不同,例如是否支持并发快照、快照恢复速度等。
可靠性设计应遵循AWS可靠性支柱中的建议:定期测试恢复流程,并考虑跨可用区复制。参考AWS可靠性支柱中的最佳实践。
常见误区
以下是常见错误:
- 忘记安装快照控制器:没有控制器,VolumeSnapshot不会生效。
- 使用不支持的存储类:如果存储类对应的CSI驱动不支持快照,创建会失败。
- 恢复时指定错误容量:如果PVC容量小于快照,可能无法恢复。
- 忽略应用一致性:直接对运行中的数据库做快照,可能导致数据损坏。
总结
存储卷快照是Kubernetes中重要的数据保护机制。通过CSI驱动,您可以创建快照并从快照恢复PersistentVolume。务必确认您的环境支持快照,并测试恢复流程。更多关于存储卷的基础,可参考Kubernetes Concepts官方文档。
参考资料
- Kubernetes Concepts
- AWS可靠性支柱
- Kubernetes PersistentVolume(PV/PVC)存储卷与CSI驱动配置
- 容器存储基础:理解容器的可写层与数据持久化
- 容器存储选型指南:本地存储、网络存储与分布式存储对比
延伸阅读
