Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

处理卷组快照

持久卷(PV)的 Kubernetes 卷组快照 NetApp Trident 提供了创建多个卷快照(一组卷快照)的功能。此卷组快照表示在同一时间点拍摄的多个卷的副本。

备注 VolumeGroupSnapshot 是 Kubernetes 中带有 beta API 的 beta 功能。Kubernetes 1.32 是 VolumeGroupSnapshot 所需的最低版本。

创建卷组快照

以下存储驱动程序支持卷组快照:

  • ontap-san 驱动程序 - 仅适用于 iSCSI 和 FC 协议,不适用于 NVMe/TCP 协议。

  • ontap-san-economy - 仅适用于 iSCSI 协议。

  • ontap-nas

备注 NetApp ASA r2 或 AFX 存储系统不支持卷组快照。
开始之前
  • 请确保您的 Kubernetes 版本为 K8s 1.32 或更高版本。

  • 必须具有外部快照控制器和自定义资源定义 (CRD) 才能使用快照。这是 Kubernetes 编排器的职责(例如:Kubeadm、GKE、OpenShift)。

    如果您的 Kubernetes 发行版不包括外部快照控制器和 CRD,请参阅 部署卷快照控制器

    备注 如果在 GKE 环境中创建按需卷组快照,请勿创建快照控制器。GKE 使用内置的隐藏快照控制器。
  • 在快照控制器 YAML 中,将 CSIVolumeGroupSnapshot 功能门设置为 'true',以确保启用卷组快照。

  • 在创建卷组快照之前创建所需的卷组快照类。

  • 确保所有 PVC/卷都在同一个 SVM 上,以便能够创建 VolumeGroupSnapshot。

步骤
  • 在创建 VolumeGroupSnapshot 之前,先创建 VolumeGroupSnapshotClass。有关更多信息,请参阅"VolumeGroupSnapshotClass"

    apiVersion: groupsnapshot.storage.k8s.io/v1beta1
    kind: VolumeGroupSnapshotClass
    metadata:
      name: csi-group-snap-class
      annotations:
        kubernetes.io/description: "Trident group snapshot class"
    driver: csi.trident.netapp.io
    deletionPolicy: Delete
  • 使用现有存储类创建具有所需标签的 PVC,或将这些标签添加到现有 PVC。

    以下示例使用 pvc1-group-snap 作为数据源和标签 consistentGroupSnapshot: groupA 创建 PVC。根据您的要求定义标签键和值。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc1-group-snap
  labels:
    consistentGroupSnapshot: groupA
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
  storageClassName: sc1-1
  • 创建具有相同标签 (consistentGroupSnapshot: groupA 的 VolumeGroupSnapshot,该标签在 PVC 中指定。

    此示例创建卷组快照:

apiVersion: groupsnapshot.storage.k8s.io/v1beta1
kind: VolumeGroupSnapshot
metadata:
  name: "vgs1"
  namespace: trident
spec:
  volumeGroupSnapshotClassName: csi-group-snap-class
  source:
    selector:
      matchLabels:
        consistentGroupSnapshot: groupA

使用组快照恢复卷数据

您可以使用作为 Volume Group Snapshot 一部分创建的单个快照来恢复单个 Persistent Volume。您无法将 Volume Group Snapshot 作为一个单位进行恢复。

使用卷快照还原 ONTAP CLI 将卷还原至先前快照中记录的状态。

cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
备注 还原快照副本时,将覆盖现有卷配置。创建快照副本后对卷数据所做的更改将丢失。

从快照就地还原卷

Trident 使用 TridentActionSnapshotRestore (TASR) CR 提供快速的就地卷恢复功能。此 CR 作为命令式 Kubernetes 操作,在操作完成后不会持续存在。

有关详细信息,请参见 "从快照就地还原卷"

删除具有关联组快照的 PV

删除组卷快照时:

  • 您可以整体删除 VolumeGroupSnapshots,而不是删除组中的单个快照。

  • 如果在存在该 PersistentVolume 的快照时删除 PersistentVolumes,Trident 会将该卷移动到“deleting”状态,因为必须先删除快照,才能安全地删除该卷。

  • 如果已使用分组快照创建克隆,然后要删除该组,则将开始克隆拆分操作,并且在完成拆分之前无法删除该组。

部署卷快照控制器

如果您的 Kubernetes 发行版不包括快照控制器和 CRD,您可以按以下方式部署它们。

步骤
  1. 创建卷快照 CRD。

    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml
  2. 创建快照控制器。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
    备注 如有必要,请打开 `deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml`并更新 `namespace`到您的命名空间。