6.4. CSI 卷组快照


本文档论述了如何使用带有支持的 Container Storage Interface (CSI) 驱动程序的卷组快照来帮助防止 OpenShift Container Platform 中的数据丢失。建议先熟悉持久性卷

重要

CSI 卷组快照只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

要使用此技术预览功能,您必须使用功能门启用它

6.4.1. CSI 卷组快照概述

快照(snapshot)代表了集群中特定时间点的存储卷的状态 。卷快照可以用来置备新卷。

卷组快照使用标签选择器对多个持久性卷声明进行分组以进行快照。卷组快照代表来自同一时间点获取的多个卷的副本。这对包含多个卷的应用程序很有用。

CSI 驱动程序支持容器存储接口(CSI)卷组快照。OpenShift Data Foundation 支持卷组快照。

卷组快照提供三个新的 API 对象来管理快照:

VolumeGroupSnapshot
请求为多个持久性卷声明创建卷组快照。它包含卷组快照操作的信息,如执行卷组快照时的时间戳,以及是否准备就绪。
VolumeGroupSnapshotContent
由快照控制器为动态创建的 volumeGroupSnapshot 创建。它包含卷组快照的信息,包括卷组快照 ID。此对象代表集群中置备的资源(组快照)。VolumeGroupSnapshotContent 对象绑定到使用一对一映射创建的卷组快照。
VolumeGroupSnapshotClass
由集群管理员创建来描述如何创建卷组快照,包括驱动程序信息、删除策略等。

这三个 API 类型定义为 CustomResourceDefinitions (CRD)。这些 CRD 必须安装到 OpenShift Container Platform 集群中,才能支持卷组快照。

6.4.2. CSI 卷组快照限制

卷组快照有以下限制:

  • 不支持将现有持久性卷声明(PVC)恢复到快照代表的早期状态,它只支持从快照置备新卷。
  • 除了存储系统提供的外,不会保证应用程序一致性(如崩溃一致性)。有关应用程序一致性的更多信息,请参阅 Quiesce 和 Unquiesce Hook

6.4.3. 创建卷组快照类

在创建卷组快照前,集群管理员需要创建一个 VolumeGroup 5-4。

这个对象描述了如何创建卷组快照,包括驱动程序信息、删除策略等。

先决条件

  • 使用管理员特权登录到正在运行的 OpenShift Container Platform 集群。
  • 使用功能门启用此功能。有关如何使用功能门的详情,请参考 使用功能门启用功能集

流程

创建 VolumeGroup5-4

  1. 使用以下示例文件创建 VolumeGroupSnapshotClass YAML 文件:

    卷组快照类 YAML 文件示例

    apiVersion: groupsnapshot.storage.k8s.io/v1beta1
    kind: VolumeGroupSnapshotClass 
    1
    
    metadata:
      name: csi-hostpath-groupsnapclass 
    2
    
    deletionPolicy: Delete
    driver: hostpath.csi.k8s.io
         …...
    Copy to Clipboard Toggle word wrap

    1
    指定 VolumeGroup5-4 对象。
    2
    VolumeGroupSnapshotClass 的名称。
  2. 运行以下命令来创建 'VolumeGroup5-4' 对象:

    $ oc create -f <volume-group-snapshot-class-filename>.yaml
    Copy to Clipboard Toggle word wrap

6.4.4. 创建卷组快照

当您创建 VolumeGroupSnapshot 对象时,OpenShift Container Platform 会创建一个卷组快照。

先决条件

  • 登陆到一个正在运行的 OpenShift Container Platform 集群。
  • 使用功能门启用此功能。有关如何使用功能门的详情,请参考 使用功能门启用功能集
  • 您要为快照组群的持久性卷声明(PVC)使用支持 VolumeGroupSnapshot 对象的 CSI 驱动程序创建。
  • 用于置备存储后端的存储类。
  • 管理员已创建了 VolumeGroupClone 对象。

流程

创建卷组快照:

  1. 找到(或创建)要在卷组快照中包含的 PVC:

    $ oc get pvc
    Copy to Clipboard Toggle word wrap

    命令输出示例

    NAME        STATUS    VOLUME                                     CAPACITY   ACCESSMODES   AGE
    pvc-0       Bound     pvc-a42d7ea2-e3df-11ed-b5ea-0242ac120002   1Gi        RWO           48s
    pvc-1       Bound     pvc-a42d81b8-e3df-11ed-b5ea-0242ac120002   1Gi        RWO           48S
    Copy to Clipboard Toggle word wrap

    这个示例使用两个 PVC

  2. 将 PVC 标记为属于快照组:

    1. 运行以下命令标记 PVC pvc-0:

      $ oc label pvc pvc-0 group=myGroup
      Copy to Clipboard Toggle word wrap

      输出示例

      persistentvolumeclaim/pvc-0 labeled
      Copy to Clipboard Toggle word wrap

    2. 运行以下命令标记 PVC pvc-1:

      $ oc label pvc pvc-1 group=myGroup
      Copy to Clipboard Toggle word wrap

      输出示例

      persistentvolumeclaim/pvc-1 labeled
      Copy to Clipboard Toggle word wrap

      在本例中,您要将 PVC "pvc-0" 和 "pvc-1" 标记为属于组 "myGroup"。

  3. 创建 VolumeGroupSnapshot 对象以指定您的卷组快照:

    1. 使用以下示例文件创建 VolumeGroupSnapshot 对象 YAML 文件:

      VolumeGroupSnapshot YAML 文件示例

      apiVersion: groupsnapshot.storage.k8s.io/v1beta1
      kind: VolumeGroupSnapshot 
      1
      
      metadata:
        name: <volume-group-snapshot-name> 
      2
      
        namespace: <namespace> 
      3
      
      spec:
        volumeGroupSnapshotClassName: <volume-group-snapshot-class-name> 
      4
      
        source:
          selector:
            matchLabels:
              group: myGroup 
      5
      Copy to Clipboard Toggle word wrap

      1
      VolumeGroupSnapshot 对象请求为多个 PVC 创建卷组快照。
      2
      卷组快照的名称。
      3
      卷组快照的命名空间。
      4
      VolumeGroup5-4 名称。这个对象由管理员创建,描述了如何创建卷组快照。
      5
      用于对快照所需的 PVC 进行分组的标签名称。在本例中,是 "myGroup"。
    2. 运行以下命令来创建 VolumeGroupSnapshot 对象:

      $ oc create -f <volume-group-snapshot-filename>.yaml
      Copy to Clipboard Toggle word wrap

结果

根据将多少 PVC 指定为卷组快照的一部分来创建单个卷快照。

这些单独的卷快照被命名,格式为: <hash of VolumeGroupSnaphotContentUUID+volumeHandle>:

单个卷快照示例

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: snapshot-4dc1c53a29538b36e85003503a4bcac5dbde4cff59e81f1e3bb80b6c18c3fd03
  namespace: default
  ownerReferences:
  - apiVersion: groupsnapshot.storage.k8s.io/v1beta1
    kind: VolumeGroupSnapshot
    name: my-groupsnapshot
    uid: ba2d60c5-5082-4279-80c2-daa85f0af354
  resourceVersion: "124503"
  uid: c0137282-f161-4e86-92c1-c41d36c6d04c
spec:
  source:
    persistentVolumeClaimName:pvc-1
status:
  volumeGroupSnapshotName: volume-group-snapshot-name
Copy to Clipboard Toggle word wrap

在前面的示例中,创建两个单独的卷快照作为卷组快照的一部分。

snapshot-4dc1c53a29538b36e85003503a4bcac5dbde4cff59e81f1e3bb80b6c18c3fd03
snapshot-fbfe59eff570171765df664280910c3bf1a4d56e233a5364cd8cb0152a35965b
Copy to Clipboard Toggle word wrap

6.4.5. 恢复卷组快照

您可以使用 VolumeGroupSnapshot 自定义资源定义(CRD)内容将现有卷恢复到以前的状态。

要恢复现有卷,您可以从 VolumeGroupSnapshot 一部分的 VolumeSnapshot 对象请求一个新的持久性卷声明(PVC)。这会触发置备使用指定快照数据的新卷。重复此过程,直到从属于卷组快照的所有快照创建所有卷。

先决条件

  • 登陆到一个正在运行的 OpenShift Container Platform 集群。
  • 使用支持卷组快照的 Container Storage Interface (CSI) 驱动程序创建 PVC。
  • 用于置备存储后端的存储类。
  • 已创建卷组快照并可使用。

流程

将现有卷从卷组快照恢复到以前的状态:

  1. 从 PVC 的卷组快照中指定 VolumeSnapshot 数据源,如下例所示:

    恢复 PVC YAML 文件示例

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc-restore-name> 
    1
    
      namespace: <namespace> 
    2
    
    spec:
      storageClassName: csi-hostpath-sc
      dataSource:
        name: snapshot-fbfe59eff570171765df664280910c3bf1a4d56e233a5364cd8cb0152a35965b 
    3
    
        kind: VolumeSnapshot 
    4
    
        apiGroup: snapshot.storage.k8s.io 
    5
    
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    Copy to Clipboard Toggle word wrap

    1
    恢复 PVC 的名称。
    2
    命名空间的名称。
    3
    作为卷组快照一部分的单独卷快照名称,用作源。
    4
    必须设置为 VolumeSnapshot 的值。
    5
    必须设置为 snapshot.storage.k8s.io
  2. 运行以下命令来创建 PVC:

    $ oc create -f <pvc-restore-filename>.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    上一步中指定的 PVC 恢复文件的名称。
  3. 运行以下命令验证恢复的 PVC 是否已创建:

    $ oc get pvc
    Copy to Clipboard Toggle word wrap

    此时会出现一个带有您在第一步中指定的名称的新 PVC。

  4. 根据需要重复这个过程,直到从属于卷组快照的所有快照中创建所有卷。

6.4.6. 其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat