在 kubernetes 中进行定期卷备份的推荐方法是什么?
我会推荐VolumeSnapshots,但您需要记住,这不是正常的备份,您将无法将数据恢复到以前的状态。
许多存储系统(如 Google Cloud Persistent Disks、Amazon Elastic Block Storage 和许多本地存储系统)都可以创建持久卷的“快照”。快照表示卷的时间点副本。快照可用于配置新卷(预填充快照数据)或将现有卷恢复到以前的状态(由快照表示)。
它易于使用,截至 2019 年 12 月,它已移至测试版 Kubernetes 1.17 Feature: Kubernetes Volume Snapshot Moves to Beta。
一旦你指定VolumeSnapshotClass
例如,下面的 VolumeSnapshotClass 告诉 Kubernetes 集群一个 CSI 驱动程序 testdriver.csi.k8s.io 可以处理卷快照,并且当这些快照被创建时,它们的删除策略应该是删除。
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
name: test-snapclass
driver: testdriver.csi.k8s.io
deletionPolicy: Delete
parameters:
csi.storage.k8s.io/snapshotter-secret-name: mysecret
csi.storage.k8s.io/snapshotter-secret-namespace: mysecretnamespace
普通快照控制器保留参数键csi.storage.k8s.io/snapshotter-secret-name和csi.storage.k8s.io/snapshotter-secret-namespace。如果指定,它将获取引用的 Kubernetes 机密并将其设置为卷快照内容对象上的注释。 CSI external-snapshotter sidecar 从内容注释中检索它,并在快照创建期间将其传递给 CSI 驱动程序。
卷快照的创建由 VolumeSnapshot API 对象的创建触发。
VolumeSnapshot 对象必须指定以下源类型:persistentVolumeClaimName - 要快照的 PVC 的名称。请注意,VolumeSnapshot 对象的源 PVC、PV 和 VolumeSnapshotClass 必须指向同一个 CSI 驱动程序。
您可以创建VolumeSnapshot,在本例中将创建名为test-pvc的PVC快照:
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshot
metadata:
name: test-snapshot
spec:
volumeSnapshotClassName: test-snapclass
source:
persistentVolumeClaimName: test-pvc
当调用卷快照创建时,通用快照控制器首先创建一个 VolumeSnapshotContent 对象,其中包含 volumeSnapshotRef、源 volumeHandle、volumeSnapshotClassName(如果指定)、driver 和 deletionPolicy。
您可以从卷快照恢复 PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: restore-pvc
spec:
storageClassName: csi-hostpath-sc
dataSource:
name: test-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
要支持从卷快照数据源恢复卷,请在 apiserver 和控制器管理器上启用 VolumeSnapshotDataSource 功能门。
有什么限制?
- 不支持将现有卷恢复到由快照表示的早期状态(测试版仅支持从快照配置新卷)。
- 除了存储系统提供的任何保证(例如崩溃一致性)之外,没有快照一致性保证。这些是更高级别的 API/控制器的职责
编辑:
要自动执行此过程,您需要设置 CronJob 或使用 Python client library for kubernetes 编写 Python 代码,并根据需要更改例如 python/examples/custom_object.py。
您还可以使用已开发的应用程序,例如stash.run。