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

使用快照

贡献者

从 Astra Trident 的 20.01 版开始,您可以在 Kubernetes 层创建 PV 快照。您可以使用这些快照维护由 Astra Trident 创建的卷的时间点副本,并计划创建其他卷(克隆)。支持卷快照 ontap-nasontap-sanontap-san-economysolidfire-sangcp-cvs,和 azure-netapp-files 驱动程序。

备注 此功能可从 Kubernetes 1.17 (测试版)获得,从 1.20 开始正式上市。要了解从测试版迁移到 GA 所涉及的变化,请参见 "发布博客"。随着毕业到GA v1 API版本已推出、可向后兼容 v1beta1 快照。
您需要的内容
  • 创建卷快照需要创建外部快照控制器和自定义资源定义(Custom Resource Definitions、CRD)。这是所使用的Kubernetes流程编排程序(例如:Kubeadm、GKE、OpenShift)的责任。

如果您的Kubernetes分发版不包含快照控制器和CRD、则可以按如下所示进行部署。

  1. 创建卷快照CRD。

    对于Kubernetes 1.20及更高版本、请使用v5.0或更高版本的Snapshot组件的v1 Snapshot CRD。对于Kubernetes 1.19、请将v1beta1与v3.0.3 Snapshot组件结合使用。

    5.0版组件
    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
    v3.0.3组件
    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
  2. 在所需命名空间中创建Snapshot控制器。编辑以下 YAML 清单以修改命名空间。

    对于Kubernetes 1.20及更高版本、请使用5.0或更高版本。对于Kubernetes 1.19版、请使用v3.0.3

    备注 如果在GKE-环境中设置按需卷快照、请勿创建快照控制器。GKE- 使用内置的隐藏快照控制器。
    5.0版控制器
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
    v3.0.3控制器
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
提示 CSI Snapshotter 提供了 "正在验证 webhook" 帮助用户验证现有 v1bea1 快照并确认它们是有效的资源对象。正在验证的 webhook 会自动标记无效的快照对象,并防止将来创建无效对象。验证 webhook 由 Kubernetes 流程编排程序部署。请参见有关手动部署验证 webhook 的说明 "此处"。查找无效快照清单的示例 "此处"

下面详细介绍的示例说明了使用快照所需的构造,并说明了如何创建和使用快照。

第1步:设置 VolumeSnapshotClass

在创建卷快照之前、请设置一个链接:./trident -referation/objects.html[VolumeSnapshotClass^。

cat snap-sc.yaml
#Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: csi-snapclass
driver: csi.trident.netapp.io
deletionPolicy: Delete

driver 指向Astra Trident的CSI驱动程序。 deletionPolicy 可以是 DeleteRetain。设置为时 Retain、存储集群上的底层物理快照会保留、即使在使用时也是如此 VolumeSnapshot 对象已删除。

第 2 步:创建现有 PVC 的快照

cat snap.yaml
#Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: pvc1-snap
spec:
  volumeSnapshotClassName: csi-snapclass
  source:
    persistentVolumeClaimName: pvc1

正在为名为的PVC创建快照 pvc1、快照的名称设置为 pvc1-snap

kubectl create -f snap.yaml
volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created

kubectl get volumesnapshots
NAME                   AGE
pvc1-snap              50s

这就创建了 VolumeSnapshot 对象。VolumeSnapshot类似于PVC、并与关联 VolumeSnapshotContent 表示实际快照的对象。

可以标识 VolumeSnapshotContent 的对象 pvc1-snap VolumeSnapshot的说明。

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
.
.

Snapshot Content Name 标识提供此快照的VolumeSnapshotContent对象。。 Ready To Use 参数表示可使用Snapshot创建新的PVC。

第 3 步:从 VolumeSnapshots 创建 PVC

有关使用快照创建 PVC 的示例,请参见以下示例:

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

dataSource 显示必须使用名为的VolumeSnapshot创建PVC pvc1-snap 作为数据源。此操作将指示 Astra Trident 从快照创建 PVC 。创建 PVC 后,可以将其附加到 Pod 上,并像使用任何其他 PVC 一样使用。

备注 删除具有关联快照的永久性卷时,相应的 Trident 卷将更新为 " 正在删除 " 状态。要删除 Astra Trident 卷,应删除该卷的快照。

了解更多信息

  • "卷快照"

  • 链接:./trident参考/objects.html[VolumeSnapshotClass^