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

使用快照

贡献者 netapp-aruldeepa

Kubernetes 持久卷 (PV) 的卷快照可以创建卷的某个时间点副本。您可以创建使用Trident创建的卷的快照,导入在Trident之外创建的快照,从现有快照创建新卷,以及从快照恢复卷数据。

概述

卷快照受支持 ontap-nasontap-nas-flexgroupontap-sanontap-san-economysolidfire-sangcp-cvsazure-netapp-files , 和 `google-cloud-netapp-volumes`司机。

开始之前

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

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

备注 如果在 GKE 环境中创建按需卷快照,则不要创建快照控制器。 GKE 使用内置的隐藏快照控制器。

创建卷快照

步骤
  1. 创建一个 `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
  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
    • 此示例为名为“ 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肯定创建或导入了快照的父卷。

步骤
  1. 集群管理员: 创建一个 `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
  2. 集群管理员: 创建 `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
  3. 内部处理(无需操作): 外部快照程序识别新创建的内容 VolumeSnapshotContent`并运行 `ListSnapshots`称呼。Trident创造了 `TridentSnapshot

    • 外部快照程序设置 VolumeSnapshotContent`到 `readyToUse`以及 `VolumeSnapshot`到 `true

    • Trident回归 readyToUse=true

  4. 任何用户: 创建一个 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-sanontap-san-economyontap-nasontap-nas-flexgroupazure-netapp-filesgcp-cvsgoogle-cloud-netapp-volumes , 和 `solidfire-san`司机。

开始之前

您必须拥有已绑定的PVC和可用的卷快照。

  • 确认PVC状态是否已绑定。

    kubectl get pvc
  • 确认卷快照已准备就绪。

    kubectl get vs
步骤
  1. 创建 TASR CR。此示例为PVC创建CR。 pvc1`和卷快照 `pvc1-snapshot

    备注 TASR CR 必须位于 PVC 和 VS 存在的命名空间中。
    cat tasr-pvc1-snapshot.yaml
    apiVersion: trident.netapp.io/v1
    kind: TridentActionSnapshotRestore
    metadata:
      name: trident-snap
      namespace: trident
    spec:
      pvcName: pvc1
      volumeSnapshotName: pvc1-snapshot
  2. 应用 CR 从快照恢复。此示例从快照恢复 pvc1

    kubectl create -f tasr-pvc1-snapshot.yaml
    tridentactionsnapshotrestore.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: ""
备注
  • 大多数情况下, Trident不会在操作失败后自动重试。您需要再次执行此操作。

  • 没有管理员权限的 Kubernetes 用户可能需要管理员授予权限才能在其应用程序命名空间中创建 TASR CR。

删除包含关联快照的 PV

删除具有关联快照的持久卷时,相应的Trident卷将更新为“正在删除”状态。删除卷快照以删除Trident卷。

部署卷快照控制器

如果您的 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`添加到您的命名空间。