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

使用快照

贡献者

持久卷(PVs)的Kubbernetes卷快照支持卷的时间点副本。您可以为使用Asta Trident创建的卷创建快照、导入在Asta Trident外部创建的快照、从现有快照创建新卷以及从快照恢复卷数据。

概述

ontap-nas-flexgroupontap-san、、 ontap-san-economy`支持卷快照 `ontap-nas solidfire-san `gcp-cvs`和 `azure-netapp-files`驱动程序。

开始之前

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

如果您的Kubnetes分发不包括快照控制器和CRD,请参阅部署卷快照控制器

备注 如果在GKE环境中创建按需卷快照、请勿创建快照控制器。GKE-使用内置的隐藏快照控制器。

创建卷快照

步骤
  1. 创建 VolumeSnapshotClass。有关详细信息,请参阅。"VolumeSnapshotClass"

    • `driver`指向Asta 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
  2. 创建现有PVC的快照。

    示例
    • 此示例将创建现有PVC的快照。

      cat snap.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshot
      metadata:
        name: pvc1-snap
      spec:
        volumeSnapshotClassName: csi-snapclass
        source:
          persistentVolumeClaimName: pvc1
    • 以下示例将为名为的PVC创建卷快照对象,并且快照 pvc1`的名称设置为 `pvc1-snap。卷快照类似于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`标识提供此快照的卷SnapshotContent对象。 `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`创建使用名为作为数据源的卷快照的PVC `<pvc-name>。创建 PVC 后,可以将其附加到 Pod 上,并像使用任何其他 PVC 一样使用。

警告 PVC将与源卷在同一后端创建。请参阅 "知识库文章:无法在备用后端创建从三端PVC Snapshot创建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

导入卷快照

Astra Trident支持"Kubbernetes预配置快照过程"、使集群管理员能够创建 `VolumeSnapshotContent`对象并导入在Astra Trident外部创建的快照。

开始之前

Asta三端存储必须已创建或导入快照的父卷。

步骤
  1. *集群管理员:*创建 `VolumeSnapshotContent`引用后端快照的对象。这将在Asta Trdent中启动快照工作流。

    • 在中将后端快照的名称指定 annotations`为 `trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">

    • 在中 snapshotHandle`指定 `<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>。这是调用中外部快照程序向Astra Trident提供的唯一信息。 ListSnapshots

      备注 `<volumeSnapshotContentName>`由于CR命名限制、不能始终与后端快照名称匹配。
      示例

      以下示例将创建一个 VolumeSnapshotContent`引用后端Snapshot的对象 `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>
  2. *Cluster admin:*创建引用对象的 VolumeSnapshot`CR `VolumeSnapshotContent。此操作将请求访问以在给定命名空间中使用 VolumeSnapshot

    示例

    以下示例将创建一个 VolumeSnapshot`名为的CR,该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
  3. *内部处理(无需执行任何操作):*外部快照程序识别新创建的 VolumeSnapshotContent`并运行 `ListSnapshots`调用。Asta Trident创建 `TridentSnapshot

    • 外部快照程序将设置为,将 VolumeSnapshot`设置 `VolumeSnapshotContent`为 `readyToUse true

    • Trident返回 readyToUse=true

  4. *any user:*创建 PersistentVolumeClaim`引用新的的 `VolumeSnapshot,其中 spec.dataSource(或 spec.dataSourceRef)名是 `VolumeSnapshot`名称。

    示例

    以下示例将创建一个引用名为 import-snap`的的PVC `VolumeSnapshot

    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-economy`驱动程序配置的卷 `ontap-nas。启用 `.snapshot`目录以直接从快照恢复数据。

使用volume Snapshot restore ONTAP命令行界面将卷还原到先前快照中记录的状态。

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

删除具有关联快照的PV

删除具有关联快照的永久性卷时,相应的 Trident 卷将更新为 " 正在删除 " 状态。删除卷快照以删除Asta Trdent卷。

部署卷快照控制器

如果您的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-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
  2. 创建快照控制器。

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl 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`命名空间。