Kubernetes存储卷快照:创建与恢复PersistentVolume

Kubernetes存储卷快照功能允许您创建PersistentVolume的时间点副本,并从中恢复数据。本文提供创建与恢复的实操指南,涵盖前提条件、操作步骤和常见误区。

Kubernetes存储卷快照:创建与恢复PersistentVolume
封面图:ZuCDN · ZuCDN 原创

当您的Kubernetes集群中运行着有状态应用,数据丢失往往意味着灾难。Kubernetes存储卷快照功能允许您捕获PersistentVolume(PV)在某个时间点的状态,并从中恢复数据。本文将指导您如何创建和恢复存储卷快照,并指出常见误区。

存储卷快照是什么?

存储卷快照是PersistentVolume在特定时间点的副本。它不同于备份,快照通常存储在同一个存储系统中,创建和恢复速度更快,但无法抵御存储系统本身的故障。Kubernetes通过CSI(Container Storage Interface)驱动支持快照功能,您需要确认您的存储插件已实现快照API。

前提条件:CSI驱动与快照支持

要使用存储卷快照,您的集群需要满足以下条件:

  • Kubernetes版本不低于1.17(快照功能进入Beta),且启用了VolumeSnapshotDataSource特性门控。
  • 您的CSI驱动实现了CreateSnapshotDeleteSnapshot操作。检查驱动文档或使用kubectl get csidriver查看。
  • 已安装快照控制器(snapshot-controller)和CRD(CustomResourceDefinitions)。通常由发行版或云提供商预装。

如果缺少这些组件,创建快照会失败。您可以通过kubectl get crd volumesnapshots.snapshot.storage.k8s.io确认CRD是否存在。

创建存储卷快照

创建快照需要定义VolumeSnapshotClassVolumeSnapshot资源。首先,定义一个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官方文档。

参考资料

延伸阅读