使用快照
Kubernetes 持久卷 (PV) 的卷快照可以创建卷的某个时间点副本。您可以创建使用Trident创建的卷的快照,导入在Trident之外创建的快照,从现有快照创建新卷,以及从快照恢复卷数据。
概述
卷快照受支持 ontap-nas, ontap-nas-flexgroup , ontap-san , ontap-san-economy , solidfire-san , gcp-cvs , azure-netapp-files , 和 `google-cloud-netapp-volumes`司机。
要使用快照,您必须拥有外部快照控制器和自定义资源定义 (CRD)。这是 Kubernetes 编排器(例如:Kubeadm、GKE、OpenShift)的职责。
如果您的 Kubernetes 发行版不包含快照控制器和 CRD,请参阅部署卷快照控制器。
|
|
如果在 GKE 环境中创建按需卷快照,则不要创建快照控制器。 GKE 使用内置的隐藏快照控制器。 |
创建卷快照
-
创建一个 `VolumeSnapshotClass`更多信息,请参阅……"卷快照类" 。
-
这 `driver`指向Trident CSI 驱动程序。
-
deletionPolicy`可以 `Delete`或者 `Retain。设置为 `Retain`即使发生以下情况,存储集群上的底层物理快照仍会被保留: `VolumeSnapshot`对象已被删除。示例cat snap-sc.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
创建现有PVC的快照。
示例-
此示例创建现有 PVC 的快照。
cat snap.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1 -
此示例为名为“
pvc1`快照名称设置为 `pvc1-snap。 VolumeSnapshot 类似于 PVC,并且与某个 PVC 相关联。 `VolumeSnapshotContent`代表实际快照的对象。kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
你可以识别出 `VolumeSnapshotContent`对象为 `pvc1-snap`通过描述来获取卷快照。这 `Snapshot Content Name`标识提供此快照的 VolumeSnapshotContent 对象。这 `Ready To Use`该参数表明快照可用于创建新的 PVC。
kubectl describe volumesnapshots pvc1-snap Name: pvc1-snap Namespace: default ... Spec: Snapshot Class Name: pvc1-snap Snapshot Content Name: snapcontent-e8d8a0ca-9826-11e9-9807-525400f3f660 Source: API Group: Kind: PersistentVolumeClaim Name: pvc1 Status: Creation Time: 2019-06-26T15:27:29Z Ready To Use: true Restore Size: 3Gi ...
-
从卷快照创建PVC
您可以使用 `dataSource`使用名为 VolumeSnapshot 的 VolumeSnapshot 创建 PVC `<pvc-name>`作为数据来源。 PVC管制作完成后,可以将其连接到舱体上,并像其他PVC管一样使用。
|
|
PVC 将在与源卷相同的后端创建。参考"知识库:无法在备用后端从Trident PVC 快照创建 PVC。"。 |
以下示例使用以下方法创建 PVC: `pvc1-snap`作为数据源。
cat pvc-from-snap.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-from-snap
spec:
accessModes:
- ReadWriteOnce
storageClassName: golden
resources:
requests:
storage: 3Gi
dataSource:
name: pvc1-snap
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
导入卷快照
Trident支持"Kubernetes 预配置快照流程"使集群管理员能够创建 `VolumeSnapshotContent`在Trident之外创建的对象和导入快照。
Trident肯定创建或导入了快照的父卷。
-
集群管理员: 创建一个 `VolumeSnapshotContent`引用后端快照的对象。这将启动Trident中的快照工作流程。
-
指定后端快照的名称
annotations`作为 `trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">。 -
指定 `<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>`在 `snapshotHandle`这是外部快照程序提供给Trident的唯一信息。 `ListSnapshots`称呼。
这 `<volumeSnapshotContentName>`由于 CR 命名限制,有时无法与后端快照名称完全匹配。 示例以下示例创建了一个
VolumeSnapshotContent`引用后端快照的对象 `snap-01。
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: import-snap-content annotations: trident.netapp.io/internalSnapshotName: "snap-01" # This is the name of the snapshot on the backend spec: deletionPolicy: Retain driver: csi.trident.netapp.io source: snapshotHandle: pvc-f71223b5-23b9-4235-bbfe-e269ac7b84b0/import-snap-content # <import PV name or source PV name>/<volume-snapshot-content-name> volumeSnapshotRef: name: import-snap namespace: default -
-
集群管理员: 创建 `VolumeSnapshot`引用 CR `VolumeSnapshotContent`目的。这是对使用权限的请求 `VolumeSnapshot`在给定的命名空间中。
示例以下示例创建了一个
VolumeSnapshot`CR命名 `import-snap`指的是 `VolumeSnapshotContent`命名 `import-snap-content。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: import-snap spec: # volumeSnapshotClassName: csi-snapclass (not required for pre-provisioned or imported snapshots) source: volumeSnapshotContentName: import-snap-content -
内部处理(无需操作): 外部快照程序识别新创建的内容
VolumeSnapshotContent`并运行 `ListSnapshots`称呼。Trident创造了 `TridentSnapshot。-
外部快照程序设置
VolumeSnapshotContent`到 `readyToUse`以及 `VolumeSnapshot`到 `true。 -
Trident回归
readyToUse=true。
-
-
任何用户: 创建一个
PersistentVolumeClaim`参考新的 `VolumeSnapshot,其中spec.dataSource(或者 `spec.dataSourceRef`名称是 `VolumeSnapshot`姓名。示例以下示例创建一个引用 PVC 的
VolumeSnapshot`命名 `import-snap。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-from-snap spec: accessModes: - ReadWriteOnce storageClassName: simple-sc resources: requests: storage: 1Gi dataSource: name: import-snap kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
使用快照恢复卷数据
默认情况下,快照目录是隐藏的,以确保使用以下方式配置的卷的最大兼容性: `ontap-nas`和 `ontap-nas-economy`司机。启用 `.snapshot`直接从快照恢复数据的目录。
使用卷快照恢复ONTAP CLI 将卷恢复到先前快照中记录的状态。
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
恢复快照副本时,现有卷配置将被覆盖。创建快照副本后对卷数据所做的更改将会丢失。 |
从快照进行原地体积恢复
Trident利用快照提供快速、原位体积恢复功能 TridentActionSnapshotRestore(TASR)CR。此 CR 作为一项强制性 Kubernetes 操作,在操作完成后不会持久保存。
Trident支持快照恢复 ontap-san, ontap-san-economy , ontap-nas , ontap-nas-flexgroup , azure-netapp-files , gcp-cvs , google-cloud-netapp-volumes , 和 `solidfire-san`司机。
您必须拥有已绑定的PVC和可用的卷快照。
-
确认PVC状态是否已绑定。
kubectl get pvc -
确认卷快照已准备就绪。
kubectl get vs
-
创建 TASR CR。此示例为PVC创建CR。
pvc1`和卷快照 `pvc1-snapshot。TASR CR 必须位于 PVC 和 VS 存在的命名空间中。 cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot -
应用 CR 从快照恢复。此示例从快照恢复
pvc1。kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Trident从快照中恢复数据。您可以验证快照恢复状态:
kubectl get tasr -o yaml
apiVersion: trident.netapp.io/v1
items:
- apiVersion: trident.netapp.io/v1
kind: TridentActionSnapshotRestore
metadata:
creationTimestamp: "2023-04-14T00:20:33Z"
generation: 3
name: trident-snap
namespace: trident
resourceVersion: "3453847"
uid: <uid>
spec:
pvcName: pvc1
volumeSnapshotName: pvc1-snapshot
status:
startTime: "2023-04-14T00:20:34Z"
completionTime: "2023-04-14T00:20:37Z"
state: Succeeded
kind: List
metadata:
resourceVersion: ""
|
|
|
删除包含关联快照的 PV
删除具有关联快照的持久卷时,相应的Trident卷将更新为“正在删除”状态。删除卷快照以删除Trident卷。
部署卷快照控制器
如果您的 Kubernetes 发行版不包含快照控制器和 CRD,您可以按如下方式部署它们。
-
创建卷快照 CRD。
cat snapshot-setup.sh
#!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml -
创建快照控制器。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml如有必要,打开 `deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml`并更新 `namespace`添加到您的命名空间。