HAOJX

kubernetes持久化存储卷:存储卷快照Snapshot详解

字数统计: 571阅读时长: 2 min
2019/06/24 Share

存储卷快照和pvc于pv创建的过程很类似

都是:

PVC-—>StorageClass—->PV

VolumeSnapshot—->VolumeSnapshotClass—–>VolumeSnapshotContent

在kubernetes中用VolumeSnapshotContentVolumeSnapshot这样的API资源去为用户和管理员创建卷快照

其中:

  • VolumeSnapshotContent是从集群中指定的volume中获取的快照, 他很像PV资源一样
  • VolumeSnapshot是用户想从某个指定volume获取快照的一个请求 , 就像集群中的PVC一样

VolumeSnapshotContents are resources in the cluster. VolumeSnapshots are requests for those resources

当用户想对某个volume进行快照的时候, 可以先创建VolumeSnapshotClass对象, 之后创建一个卷快照申请,即VolumeSnapshot, 当有了这个申请之后, 先前创建的VolumeSnapshotClass就会根据申明来进行卷快照,生成快照内容,即VolumeSnapshotContent

注意:

这个功能是由CSI drivers提供, 有些CSI drivers是支持快照功能的, 当安装了支持卷快照的CSI drivers之后,CSI drivers会自动安装VolumeSnapshotClass,VolumeSnapshotVolumeSnapshotContent这些api资源,这些api资源是CRD,并不是core api中的一部分, 作为部署过程的一部分,kubernetes为snapshot controller提供了一个名叫external-snapshotter的sidecar helper container, 它会watches VolumeSnapshot 这个对象,并触发对 CSI 端点的 CreateVolume 和DeleteVolume 操作

有2种提供Volume Snapshot的方法

  • 静态

    手动创建出许多VolumeSnapshotContents,供VolumeSnapshot消费

  • 动态

    当没有VolumeSnapshotContentsVolumeSnapshot消费的时候,系统会自动通过VolumeSnapshotClasses来为VolumeSnapshot这个申请来创建volume snapshot, 当然得提前将这个volume snapshot class创建和配置好 , VolumeSnapshot与VolumeSnapshotContent绑定是一对一映射的,如果不存在匹配的VolumeSnapshotContent,VolumeSnapshots将无限期地保持未绑定状态。 VolumeSnapshots将在匹配的VolumeSnapshotContents可用时绑定

volume snapshot/restore示例

###创建VolumeSnapshotClass对象

1
2
3
4
5
6
#创建VolumeSnapshotClass对象
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshotClass
metadata:
name: disk-snapshotclass
snapshotter: diskplugin.csi.alibabacloud.com #指定VolumeSnapshot时使用的Volume Plugin

###创建VolumeSnapshot对象

1
2
3
4
5
6
7
8
9
10
#创建VolumeSnapshot对象
apiVersion: snapshot.storage.k8s.io/v1alpha1
kind: VolumeSnapshot
metadata:
name: disk-snapshot
spec:
snapshotClassName: disk-snapshotclass
source:
name: disk-pvc #Snapshot的数据源, 类型是个pvc
kind: PersistentVolumeClaim

其中:

  • 快照生成器snapshotter是必须指定的字段,用于确定配置volumesnapshot的sci卷插件

###从snapshot中恢复数据到新生的pv对象中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#从snapshot中恢复数据到新生的pv对象中
apiVersion: v1
kind: PersisttentVolumeClaim
metadata:
name: restore-pvc
spec:
dataSource:
name: disk-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
-ReadWriteOnce
resource:
requests:
storage:20Gi
storageClassName: csi-disk
CATALOG
  1. 1. volume snapshot/restore示例