Skip to main content
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

使用快照

貢獻者

Kubernetes 持續磁碟區( PV )的磁碟區快照可啟用磁碟區的時間點複本。您可以建立使用 Trident 建立的磁碟區快照、匯入在 Trident 外部建立的快照、從現有快照建立新的磁碟區、以及從快照復原磁碟區資料。

總覽

支援Volume Snapshot ontap-nasontap-nas-flexgroupontap-sanontap-san-economysolidfire-sangcp-cvs`和 `azure-netapp-files 驅動程式:

開始之前

您必須擁有外部快照控制器和自訂資源定義( CRD )、才能使用快照。這是Kubernetes Orchestrator的責任(例如:Kubeadm、GKE、OpenShift)。

如果您的Kubernetes發佈版本未包含快照控制器和CRD、請參閱 部署 Volume Snapshot 控制器

註 如果在 GKE 環境中建立隨需磁碟區快照、請勿建立快照控制器。GKE使用內建的隱藏式快照控制器。

建立磁碟區快照

步驟
  1. 建立 VolumeSnapshotClass。如需詳細資訊、請參閱 "Volume SnapshotClass"

    • `driver`指向 Trident CSI 驅動程式。

    • deletionPolicy 可以 DeleteRetain。設定為時 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 的 Volume Snapshot 物件建立一個 pvc1 快照名稱設為 pvc1-snap。Volume Snapshot類似於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 描述Volume Snapshot。。 Snapshot Content Name 識別提供此快照的Volume 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 使用名為的 Volume Snapshot 建立 PVC <pvc-name> 做為資料來源。建立好永久虛擬基礎架構之後、就能將它附加到Pod上、就像使用任何其他永久虛擬基礎架構一樣使用。

警告 將在來源 Volume 所在的同一個後端建立 PVC 。請參閱 "KB :無法在替代後端建立 Trident 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

匯入 Volume 快照

Trident 支援、"Kubernetes 預先配置的快照程序"可讓叢集管理員建立 `VolumeSnapshotContent`物件、並匯入在 Trident 之外建立的快照。

開始之前

Trident 必須已建立或匯入快照的父磁碟區。

步驟
  1. * 叢集管理: * 建立 `VolumeSnapshotContent`參照後端快照的物件。這會在 Trident 中啟動快照工作流程。

    • 在中指定後端快照的名稱 annotations 做為 trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">

    • 請在中 snapshotHandle`指定 `<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>。這是通話中外部快照機提供給 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>
  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

    • 外部快照器會設定 VolumeSnapshotContentreadyToUseVolumeSnapshottrue

    • 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

使用快照恢復 Volume 資料

快照目錄預設為隱藏、以協助使用進行資源配置的磁碟區達到最大相容性 ontap-nasontap-nas-economy 驅動程式:啟用 .snapshot 直接從快照恢復資料的目錄。

使用 Volume Snapshot Restore ONTAP CLI 將磁碟區還原至先前快照中記錄的狀態。

cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
註 當您還原快照複本時、會覆寫現有的 Volume 組態。建立快照複本之後對 Volume 資料所做的變更將會遺失。

刪除含有相關快照的 PV

刪除具有相關快照的持續Volume時、對應的Trident Volume會更新為「刪除狀態」。移除磁碟區快照以刪除 Trident 磁碟區。

部署 Volume Snapshot 控制器

如果您的Kubernetes發佈版本未包含快照控制器和客戶需求日、您可以依照下列方式進行部署。

步驟
  1. 建立Volume Snapshot客戶需求日。

    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. 建立Snapshot控制器。

    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 到您的命名空間。