1.2. VolSync 持久性卷复制服务


VolSync 是一种 Kubernetes 操作器,支持异步复制集群中的持久性卷,或者在集群中使用存储类型不兼容进行复制的集群间复制。它使用容器存储接口(CSI)来克服兼容性限制。在您的环境中部署 VolSync Operator 后,您可以使用它来创建和维护持久数据的副本。

重要: VolSync 只支持复制带有 volumeModeFilesystem 的持久性卷声明。如果您没有选择 volumeMode,则默认为 Filesystem

1.2.1. 使用 VolSync 复制持久性卷

您可以使用三种支持的方法来复制带有 VolSync 的持久性卷,这取决于您拥有的同步位置数量:rsync, rsync-tls, restic 或 Rclone。

1.2.1.1. 先决条件

在集群上安装 VolSync 前,您必须满足以下要求:

  • 在受支持的 Red Hat Advanced Cluster Management hub 集群中配置了 Red Hat OpenShift Container Platform 环境
  • 您用于源持久性卷的存储驱动程序必须与 CSI 兼容,并能够支持快照。
  • 如果要使用 rsync-tls 在集群间复制数据,则必须有以下要求:

    • 至少两个用于同一 Red Hat Advanced Cluster Management hub 集群的受管集群
    • 使用 VolSync 配置的集群之间的网络连接。如果集群不在同一网络中,您可以配置 Submariner multicluster networking 和 service discovery,并使用 ServiceTypeClusterIP 值来联网集群,或使用带有 LoadBalancer 值的 ServiceType 的负载均衡器。

1.2.1.2. 在受管集群上安装 VolSync

要启用 VolSync 将一个集群上的持久性卷声明复制到另一个集群的持久性卷声明,您必须在源和目标受管集群中安装 VolSync。

当您在受管集群中从 Red Hat Advanced Cluster Management 安装 VolSync 时,它会安装到受管集群的 volsync-system 命名空间中。这样做提供了对非 OpenShift 受管集群的支持。

如果在以前的 Red Hat Advanced Cluster Management 版本中,您可以在 OpenShift Container Platform 受管集群中将 VolSync 作为 Operator Lifecycle Manager Operator 安装,则 VolSync Operator Lifecycle Manager Operator 会被删除,并替换为 volsync-system 命名空间中的 VolSync 部署。

您可以使用两种方式之一在环境中的两个集群中安装 VolSync。您可以为 hub 集群中的每个受管集群添加标签,也可以手动创建并应用 ManagedClusterAddOn,如以下部分所述:

1.2.1.2.1. 使用标签安装 VolSync

通过添加标签在受管集群中安装 VolSync。

  • 从 Red Hat Advanced Cluster Management 控制台完成以下步骤:

    1. 从 hub 集群控制台的 Clusters 页面中选择其中一个受管集群来查看其详情。
    2. Labels 字段中,添加以下标签:

      addons.open-cluster-management.io/volsync=true
      Copy to Clipboard Toggle word wrap

      VolSync 服务 pod 已安装在受管集群上。

    3. 为其他受管集群添加相同的标签。
    4. 在 hub 上运行以下命令,确认已安装了 VolSync operator:

      oc -n <managed-cluster-name> get ManagedClusterAddOn volsync
      Copy to Clipboard Toggle word wrap
    5. 验证命令输出显示 managedclusteraddon 是否具有 Ready 状态。
    6. 在每个受管集群中运行以下命令,以确认已安装了 VolSync Operator:

      kubectl -n volsync-system get deployment volsync
      Copy to Clipboard Toggle word wrap
  • 使用命令行界面完成以下步骤:

    1. 在 hub 集群中启动一个命令行会话。
    2. 输入以下命令为第一个集群添加标签:

      oc label managedcluster <managed-cluster-1> "addons.open-cluster-management.io/volsync"="true"
      Copy to Clipboard Toggle word wrap

      managed-cluster-1 替换为其中一个受管集群的名称。

    3. 输入以下命令在第二个集群中添加标签:

      oc label managedcluster <managed-cluster-2> "addons.open-cluster-management.io/volsync"="true"
      Copy to Clipboard Toggle word wrap

      managed-cluster-2 替换为其他受管集群的名称。

      应该在每个对应受管集群的命名空间中自动创建一个 ManagedClusterAddOn 资源。

1.2.1.2.2. 使用 ManagedClusterAddOn 安装 VolSync

要通过手动添加 ManagedClusterAddOn 在受管集群中安装 VolSync,请完成以下步骤:

  1. 在 hub 集群中,创建一个名为 volsync-mcao.yaml 的 YAML 文件,其中包含类似以下示例的内容:

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: ManagedClusterAddOn
    metadata:
      name: volsync
      namespace: <managed-cluster-1-namespace>
    spec: {}
    Copy to Clipboard Toggle word wrap

    managed-cluster-1-namespace 替换为其中一个受管集群的命名空间。此命名空间与受管集群的名称相同。

    注: 名称必须是 volsync

  2. 输入类似以下示例的命令,将该文件应用到您的配置中:

    oc apply -f volsync-mcao.yaml
    Copy to Clipboard Toggle word wrap
  3. 为其他受管集群重复上述步骤。

    应该在每个对应受管集群的命名空间中自动创建一个 ManagedClusterAddOn 资源。

1.2.1.3. 配置 Rsync-TLS 复制

您可以使用 Rsync-TLS 复制创建持久性卷的 1:1 异步复制。您可以使用基于 Rsync-TLS 的复制进行灾难恢复,或者将数据发送到远程站点。使用 Rsync-TLS 时,Volis 在 stunnel 提供的 TLS 保护隧道中使用 Rsync 来同步数据。如需更多信息,请参阅 stunnel 文档

以下示例演示了如何使用 Rsync-TLS 方法配置。有关 Rsync-TLS 的更多信息,请参阅 VolSync 文档中的使用情况

1.2.1.3.1. 在受管集群中配置 Rsync-TLS 复制

对于基于 Rsync-TLS 的复制,请在源和目标集群上配置自定义资源。自定义资源使用 address 值将源连接到目的地,以及 stunnel 提供的 TLS 保护隧道,以确保传输的数据安全。

参阅以下信息和示例,将 Rsync-TLS 复制的配置从使用 source-ns 命名空间中的 source 集群中的持久性卷声明,改为使用 destination-ns 命名空间中的 destination 集群上的持久性卷声明。在需要时替换值:

  1. 配置您的目标集群。

    1. 在目标集群中运行以下命令以创建命名空间:

      oc create ns <destination-ns>
      Copy to Clipboard Toggle word wrap

      destination-ns 替换为复制目的地所在的命名空间。

    2. 创建名为 replication_destination 的新 YAML 文件,并复制以下内容:

      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationDestination
      metadata:
        name: <destination>
        namespace: <destination-ns>
      spec:
        rsyncTLS:
          serviceType: LoadBalancer 
      1
      
          copyMethod: Snapshot
          capacity: 2Gi 
      2
      
          accessModes: [ReadWriteOnce]
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc
      Copy to Clipboard Toggle word wrap
      1
      在本例中,使用 LoadBalancerServiceType 值。负载均衡器服务由源集群创建,以便您的源集群可以将信息传送到不同的目标受管集群。如果您的源和目标位于同一集群中,或者配置了 Submariner 网络服务,则可以使用 ClusterIP 作为服务类型。记录下在配置源集群时引用的 secret 的地址和名称。确保 capacity 值与正在复制的持久性卷声明的容量匹配。
      2
      确保 capacity 值与正在复制的持久性卷声明的容量匹配。

      可选:如果您使用与环境默认值不同的存储类和卷快照类名称,请指定 storageClassNamevolumeSnapshotClassName 参数的值。

    3. 在目标集群中运行以下命令以创建 replicationdestination 资源:

      oc create -n <destination-ns> -f replication_destination.yaml
      Copy to Clipboard Toggle word wrap

      destination-ns 替换为目的地所在的命名空间的名称。

      创建 replicationdestination 资源后,以下参数和值会添加到资源中:

      Expand
      参数

      .status.rsyncTLS.address

      用于连接的目标集群的 IP 地址,用于启用源和目标集群进行通信。

      .status.rsyncTLS.keySecret

      包含与源集群验证连接的 TLS 密钥的 secret 名称。

    4. 运行以下命令复制 .status.rsyncTLS.address 的值,以便在源集群中使用:将 destination 替换为复制目标自定义资源的名称。将 destination-ns 替换为目的地所在的命名空间的名称。

      ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.address}}`
      echo $ADDRESS
      Copy to Clipboard Toggle word wrap

      输出结果类似如下,这适用于 Amazon Web Services 环境:

      a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
      Copy to Clipboard Toggle word wrap
    5. 运行以下命令来复制 secret 的名称:

      KEYSECRET=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.keySecret}}`
      echo $KEYSECRET
      Copy to Clipboard Toggle word wrap

      destination 替换为复制目标自定义资源的名称。

      destination-ns 替换为目的地所在的命名空间的名称。

      在配置源时,您必须在源集群中输入它。输出应该是 SSH 密钥 secret 文件的名称,该文件可能类似以下名称:

      volsync-rsync-tls-destination-name
      Copy to Clipboard Toggle word wrap
    6. 通过针对目标集群输入以下命令来从目标集群复制密钥 secret:

      oc get secret -n <destination-ns> $KEYSECRET -o yaml > /tmp/secret.yaml
      Copy to Clipboard Toggle word wrap

      destination-ns 替换为复制目的地所在的命名空间。

    7. 输入以下命令在 vi 编辑器中打开 secret 文件:

      vi /tmp/secret.yaml
      Copy to Clipboard Toggle word wrap
    8. 在目标集群的 open secret 文件中进行以下更改:

      • 将命名空间更改为源集群的命名空间。本例中是 source-ns
      • 删除所有者引用(.metadata.ownerReferences)。
    9. 在源集群中,在源集群中输入以下命令来创建 secret 文件:

      oc create -f /tmp/secret.yaml
      Copy to Clipboard Toggle word wrap
  2. 找到您要复制的源持久性卷声明。

    注: 源持久性卷声明必须位于 CSI 存储类中。

  3. 创建 ReplicationSource 项。

    1. 在源集群中创建一个名为 replication_source 的新 YAML 文件,并复制以下内容:

      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationSource
      metadata:
        name: <source> 
      1
      
        namespace: <source-ns> 
      2
      
      spec:
        sourcePVC: <persistent_volume_claim> 
      3
      
        trigger:
          schedule: "*/3 * * * *" #/*
        rsyncTLS:
          keySecret: <mykeysecret> 
      4
      
          address: <my.host.com> 
      5
      
          copyMethod: Snapshot
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc
      Copy to Clipboard Toggle word wrap
      1
      source 替换为复制源自定义资源的名称。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。
      2
      source-ns 替换为源所在持久性卷声明的命名空间。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。
      3
      persistent_volume_claim 替换为源持久性卷声明的名称。
      4
      mykeysecret 替换为从目标集群复制到源集群的 secret 的名称 ($KEYSECRET的值)。
      5
      my.host.com 替换为您在配置 ReplicationDestination.status.rsyncTLS.address 字段复制的主机地址。您可以在下一步中找到 sed 命令示例。

      如果您的存储驱动程序支持克隆,使用 Clone 作为 copyMethod 的值,则可能是更精简的复制过程。

      可选:如果您使用与环境默认值不同的存储类和卷快照类名称,请指定 storageClassNamevolumeSnapshotClassName 参数的值。

      现在,您可以设置持久性卷的同步方法。

    2. 在源集群中,输入以下命令替换 ReplicationSource 对象中的 addresskeySecret 的值来修改 replication_source.yaml 文件:

      sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml
      sed -i "s/<mykeysecret>/$KEYSECRET/g" replication_source.yaml
      oc create -n <source> -f replication_source.yaml
      Copy to Clipboard Toggle word wrap

      my.host.com 替换为您在配置 ReplicationDestination.status.rsyncTLS.address 字段复制的主机地址。

      keySecret 替换为您在配置时从 ReplicationDestination.status.rsyncTLS.keySecret 字段复制的密钥。

      使用源所在的持久性卷声明的名称替换 source

      注: 您必须在与要复制的持久性卷声明相同的命名空间中创建该文件。

    3. ReplicationSource 对象中运行以下命令来验证复制是否完成:

      oc describe ReplicationSource -n <source-ns> <source>
      Copy to Clipboard Toggle word wrap

      source-ns 替换为源所在持久性卷声明的命名空间。

      source 替换为复制源自定义资源的名称。

      如果复制成功,输出应类似以下示例:

      Status:
        Conditions:
          Last Transition Time:  2021-10-14T20:48:00Z
          Message:               Synchronization in-progress
          Reason:                SyncInProgress
          Status:                True
          Type:                  Synchronizing
          Last Transition Time:  2021-10-14T20:41:41Z
          Message:               Reconcile complete
          Reason:                ReconcileComplete
          Status:                True
          Type:                  Reconciled
        Last Sync Duration:      5m20.764642395s
        Last Sync Time:          2021-10-14T20:47:01Z
        Next Sync Time:          2021-10-14T20:48:00Z
      Copy to Clipboard Toggle word wrap

      如果 Last Sync Time 没有列出时间,则复制不会完成。

您有原始持久性卷声明的副本。

1.2.1.4. 配置 Rsync 复制

重要:使用 Rsync-TLS 而不是 Rsync 来提高安全性。通过使用 Rsync-TLS,您可以避免使用复制持久性卷不需要的提升用户权限。

您可以使用 Rsync 复制创建持久性卷的 1:1 异步复制。您可以使用基于 Rsync 的复制进行灾难恢复,或者将数据发送到远程站点。

以下示例演示了如何使用 Rsync 方法配置。

1.2.1.4.1. 在受管集群中配置 Rsync 复制

对于基于 Rsync 的复制,请在源和目标集群上配置自定义资源。自定义资源使用 address 值将源连接到目的地,sshKeys 则用于确保传输的数据安全。

注: 您必须将 addresssshKeys 的值从目的地复制到源,因此请在配置源前配置目的地。

本例显示了一个步骤,将 Rsync 复制的配置从使用 source-ns 命名空间中的 source 集群中的持久性卷声明,改为使用 destination-ns 命名空间中的 destination 集群上的持久性卷声明。如果需要,您可以将这些值替换为其他值。

  1. 配置您的目标集群。

    1. 在目标集群中运行以下命令以创建命名空间:

      oc create ns <destination-ns>
      Copy to Clipboard Toggle word wrap

      destination-ns 替换为包含目标持久性卷声明的命名空间的名称。

    2. 复制以下 YAML 内容,以创建名为 replication_destination.yaml 的新文件:

      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationDestination
      metadata:
        name: <destination>
        namespace: <destination-ns>
      spec:
        rsync:
          serviceType: LoadBalancer
          copyMethod: Snapshot
          capacity: 2Gi
          accessModes: [ReadWriteOnce]
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc
      Copy to Clipboard Toggle word wrap

      注意:容量值应与正在复制的持久卷声明的容量匹配。

      destination 替换为复制目的地 CR 的名称。

      destination-ns 替换为目的地所在的命名空间的名称。

      在本例中,使用 LoadBalancerServiceType 值。负载均衡器服务由源集群创建,以便您的源集群可以将信息传送到不同的目标受管集群。如果您的源和目标位于同一集群中,或者配置了 Submariner 网络服务,则可以使用 ClusterIP 作为服务类型。记录配置源集群时要引用的 secret 的地址和名称。

      storageClassNamevolumeSnapshotClassName 是可选参数。指定您的环境的值,特别是如果您使用与环境默认值不同的存储类和卷快照类名称。

    3. 在目标集群中运行以下命令以创建 replicationdestination 资源:

      oc create -n <destination-ns> -f replication_destination.yaml
      Copy to Clipboard Toggle word wrap

      destination-ns 替换为目的地所在的命名空间的名称。

      创建 replicationdestination 资源后,将以下参数和值添加到资源中:

      Expand
      参数

      .status.rsync.address

      用于连接的目标集群的 IP 地址,用于启用源和目标集群进行通信。

      .status.rsync.sshKeys

      启用保护从源集群到目标集群的数据传输的 SSH 密钥文件的名称。

    4. 运行以下命令复制 .status.rsync.address 的值,以便在源集群中使用:

      ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.address}}`
      echo $ADDRESS
      Copy to Clipboard Toggle word wrap

      destination 替换为复制目标自定义资源的名称。

      destination-ns 替换为目的地所在的命名空间的名称。

      输出结果应该类似以下示例,这适用于 Amazon Web Services 环境:

      a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
      Copy to Clipboard Toggle word wrap
    5. 运行以下命令来复制 secret 的名称:

      SSHKEYS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.sshKeys}}`
      echo $SSHKEYS
      Copy to Clipboard Toggle word wrap

      destination 替换为复制目标自定义资源的名称。

      destination-ns 替换为目的地所在的命名空间的名称。

      在配置源时,您必须在源集群中输入它。输出应该是 SSH 密钥 secret 文件的名称,该文件可能类似以下名称:

      volsync-rsync-dst-src-destination-name
      Copy to Clipboard Toggle word wrap
    6. 通过针对目标集群输入以下命令从目标集群复制 SSH secret:

      oc get secret -n <destination-ns> $SSHKEYS -o yaml > /tmp/secret.yaml
      Copy to Clipboard Toggle word wrap

      destination-ns 替换为目标所在持久性卷声明的命名空间。

    7. 输入以下命令在 vi 编辑器中打开 secret 文件:

      vi /tmp/secret.yaml
      Copy to Clipboard Toggle word wrap
    8. 在目标集群的 open secret 文件中进行以下更改:

      • 将命名空间更改为源集群的命名空间。本例中是 source-ns
      • 删除所有者引用(.metadata.ownerReferences)。
    9. 在源集群中,在源集群中输入以下命令来创建 secret 文件:

      oc create -f /tmp/secret.yaml
      Copy to Clipboard Toggle word wrap
  2. 找到您要复制的源持久性卷声明。

    注: 源持久性卷声明必须位于 CSI 存储类中。

  3. 创建 ReplicationSource 项。

    1. 复制以下 YAML 内容,在源集群上创建一个名为 replication_source.yaml 的新文件:

      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationSource
      metadata:
        name: <source>
        namespace: <source-ns>
      spec:
        sourcePVC: <persistent_volume_claim>
        trigger:
          schedule: "*/3 * * * *" #/*
        rsync:
          sshKeys: <mysshkeys>
          address: <my.host.com>
          copyMethod: Snapshot
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc
      Copy to Clipboard Toggle word wrap

      source 替换为复制源自定义资源的名称。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。

      source-ns 替换为源所在持久性卷声明的命名空间。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。

      persistent_volume_claim 替换为源持久性卷声明的名称。

      使用您从 ReplicationDestination.status.rsync.sshKeys 字段复制的密钥替换 mysshkeys

      my.host.com 替换为您在配置 ReplicationDestination.status.rsync.address 字段复制的主机地址。

      如果您的存储驱动程序支持克隆,使用 Clone 作为 copyMethod 的值,则可能是更精简的复制过程。

      storageClassNamevolumeSnapshotClassName 是可选参数。如果您使用与环境默认值不同的存储类和卷快照类名称,请指定这些值。

      现在,您可以设置持久性卷的同步方法。

    2. 在源集群中,输入以下命令替换 ReplicationSource 对象中的 addresssshKeys 的值来修改 replication_source.yaml 文件:

      sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml
      sed -i "s/<mysshkeys>/$SSHKEYS/g" replication_source.yaml
      oc create -n <source> -f replication_source.yaml
      Copy to Clipboard Toggle word wrap

      my.host.com 替换为您在配置 ReplicationDestination.status.rsync.address 字段复制的主机地址。

      使用您从 ReplicationDestination.status.rsync.sshKeys 字段复制的密钥替换 mysshkeys

      使用源所在的持久性卷声明的名称替换 source

      注: 您必须在与要复制的持久性卷声明相同的命名空间中创建该文件。

    3. ReplicationSource 对象中运行以下命令来验证复制是否完成:

      oc describe ReplicationSource -n <source-ns> <source>
      Copy to Clipboard Toggle word wrap

      source-ns 替换为源所在持久性卷声明的命名空间。

      source 替换为复制源自定义资源的名称。

      如果复制成功,输出应类似以下示例:

      Status:
        Conditions:
          Last Transition Time:  2021-10-14T20:48:00Z
          Message:               Synchronization in-progress
          Reason:                SyncInProgress
          Status:                True
          Type:                  Synchronizing
          Last Transition Time:  2021-10-14T20:41:41Z
          Message:               Reconcile complete
          Reason:                ReconcileComplete
          Status:                True
          Type:                  Reconciled
        Last Sync Duration:      5m20.764642395s
        Last Sync Time:          2021-10-14T20:47:01Z
        Next Sync Time:          2021-10-14T20:48:00Z
      Copy to Clipboard Toggle word wrap

      如果 Last Sync Time 没有列出时间,则复制不会完成。

您有原始持久性卷声明的副本。

1.2.1.5. 配置剩余的备份

基于 restic 的备份将持久性卷的 restic 备份副本复制到在 restic-config.yaml secret 文件中指定的位置。剩余的备份不会在集群之间同步数据,而是提供数据备份。

完成以下步骤以配置基于剩余的备份:

  1. 通过创建类似以下 YAML 内容的 secret 来指定存储备份镜像的存储库:

    apiVersion: v1
    kind: Secret
    metadata:
      name: restic-config
    type: Opaque
    stringData:
      RESTIC_REPOSITORY: <my-restic-repository>
      RESTIC_PASSWORD: <my-restic-password>
      AWS_ACCESS_KEY_ID: access
      AWS_SECRET_ACCESS_KEY: password
    Copy to Clipboard Toggle word wrap

    my-restic-repository 替换为您要存储备份文件的 S3 存储桶存储库的位置。

    my-restic-password 替换为访问存储库所需的加密密钥。

    如果需要,将 accesspassword 替换为您的供应商凭证。

    如果您需要准备新存储库,请参阅为流程准备新存储库。如果使用这个步骤,请跳过运行 restic init 命令的步骤来初始化存储库。VolSync 在第一个备份过程中自动初始化存储库。

    重要:当将多个持久性卷声明备份到同一 S3 存储桶时,存储桶的路径对于每个持久性卷声明来说必须是唯一的。每个持久性卷声明都使用单独的 ReplicationSource 备份,每个声明都需要单独的 restic-config secret。

    通过共享相同的 S3 存储桶,每个 ReplicationSource 具有对整个 S3 存储桶的写入访问权限。

  2. 通过创建类似以下 YAML 内容的 ReplicationSource 对象来配置备份策略:

    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationSource
    metadata:
      name: mydata-backup
    spec:
      sourcePVC: <source>
      trigger:
        schedule: "*/30 * * * *" #\*
      restic:
        pruneIntervalDays: 14
        repository: <restic-config>
        retain:
          hourly: 6
          daily: 5
          weekly: 4
          monthly: 2
          yearly: 1
        copyMethod: Clone
      # The StorageClass to use when creating the PiT copy (same as source PVC if omitted)
      #storageClassName: my-sc-name
      # The VSC to use if the copy method is Snapshot (default if omitted)
      #volumeSnapshotClassName: my-vsc-name
    Copy to Clipboard Toggle word wrap

    使用您要备份的持久性卷声明替换 source

    schedule 值替换为运行备份的频率。这个示例有每 30 分钟的调度。有关设置计划的更多信息,请参阅调度同步

    PruneIntervalDays 值替换为重新打包数据实例之间经过的天数,以节省空间。修剪操作可在其运行时生成大量 I/O 流量。

    restic-config 替换为在第 1 步中创建的 secret 的名称。

    retain 的值设置为备份镜像的保留策略。

    最佳实践: 将 Clone 用于 CopyMethod 的值,以确保保存点镜像。

注:默认情况下,Restic movers 在没有 root 权限的情况下运行。如果要以 root 用户身份运行 restic movers,请运行以下命令将升级的权限注解添加到您的命名空间。

oc annotate namespace <namespace> volsync.backube/privileged-movers=true
Copy to Clipboard Toggle word wrap

<namespace> 替换为您的命名空间的名称。

1.2.1.5.1. 恢复剩余的备份

您可以将复制的数据从其余备份恢复到新的持久性卷声明。最佳实践:仅将一个备份恢复到新的持久性卷声明中。要恢复剩余的备份,请完成以下步骤:

  1. 创建新的持久性卷声明,使其包含类似以下示例的新数据:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: <pvc-name>
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 3Gi
    Copy to Clipboard Toggle word wrap

    pvc-name 替换为新持久性卷声明的名称。

  2. 创建一个 ReplicationDestination 自定义资源,该资源类似以下示例来指定恢复数据的位置:

    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationDestination
    metadata:
      name: <destination>
    spec:
      trigger:
        manual: restore-once
      restic:
        repository: <restic-repo>
        destinationPVC: <pvc-name>
        copyMethod: Direct
    Copy to Clipboard Toggle word wrap

    destination 替换为复制目的地 CR 的名称。

    使用存储源的仓库的路径替换 restic-repo

    使用您要恢复数据的新持久性卷声明的名称替换 pvc-name。使用现有的持久性卷声明,而不是置备一个新的持久性卷声明。

恢复过程只需要完成一次,本例恢复最新的备份。有关恢复选项的更多信息,请参阅 VolSync 文档中的恢复选项

1.2.1.6. 配置 Rclone 复制

Rclone 备份通过中间对象存储位置(如 AWS S3)使用 Rclone 将单个持久性卷复制到多个位置。将数据分发到多个位置时非常有用。

完成以下步骤以配置 Rclone 复制:

  1. 创建一个类似以下示例的 ReplicationSource 自定义资源:

    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationSource
    metadata:
      name: <source>
      namespace: <source-ns>
    spec:
      sourcePVC: <source-pvc>
      trigger:
        schedule: "*/6 * * * *" #\*
      rclone:
        rcloneConfigSection: <intermediate-s3-bucket>
        rcloneDestPath: <destination-bucket>
        rcloneConfig: <rclone-secret>
        copyMethod: Snapshot
        storageClassName: <my-sc-name>
        volumeSnapshotClassName: <my-vsc>
    Copy to Clipboard Toggle word wrap

    source-pvc 替换为复制源自定义资源的名称。

    source-ns 替换为源所在持久性卷声明的命名空间。

    使用您要复制的持久性卷声明替换 source

    schedule 值替换为运行复制的频率。这个示例有每 6 分钟进行一次的调度。这个值必须包括在引号内。如需更多信息,请参阅调度同步

    intermediate-s3-bucket 替换为 Rclone 配置文件配置部分的路径。

    destination-bucket 替换为您要复制文件的对象存储桶的路径。

    rclone-secret 替换为包含您的 Rclone 配置信息的 secret 名称。

    copyMethod 的值设置为 CloneDirectSnapshot。这个值指定是否生成点时复制,如果是,则使用什么方法生成它。

    my-sc-name 替换为您要用于点复制的存储类的名称。如果没有指定,则使用源卷的存储类。

    如果您将 my-vsc 指定为 copyMethod,则将 my-vsc 替换为 VolumeSnapshotClass 的名称。对于其他类型的 copyMethod,这并不是必需的。

  2. 创建一个类似以下示例的 ReplicationDestination 自定义资源:

    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationDestination
    metadata:
      name: database-destination
      namespace: dest
    spec:
      trigger:
        schedule: "3,9,15,21,27,33,39,45,51,57 * * * *" #/*
      rclone:
        rcloneConfigSection: <intermediate-s3-bucket>
        rcloneDestPath: <destination-bucket>
        rcloneConfig: <rclone-secret>
        copyMethod: Snapshot
        accessModes: [ReadWriteOnce]
        capacity: 10Gi
        storageClassName: <my-sc>
        volumeSnapshotClassName: <my-vsc>
    Copy to Clipboard Toggle word wrap

    schedule 值替换为将复制移到目的地的频率。源和目标的调度必须是偏移的,以允许数据在从目的地拉取前完成复制。这个示例有每 6 分钟的调度,将偏移 3 分钟。这个值必须包括在引号内。有关调度的更多信息,请参阅调度同步

    intermediate-s3-bucket 替换为 Rclone 配置文件配置部分的路径。

    destination-bucket 替换为您要复制文件的对象存储桶的路径。

    rclone-secret 替换为包含您的 Rclone 配置信息的 secret 名称。

    copyMethod 的值设置为 CloneDirectSnapshot。这个值指定是否生成点时复制,如果是,则使用什么方法生成它。

    accessModes 的值指定持久性卷声明的访问模式。有效值为 ReadWriteOnceReadWriteMany

    capacity 指定目标卷的大小,它必须足够大来包含传入的数据。

    my-sc 替换为您要用作点时副本的存储类的名称。如果没有指定,则使用系统存储类。

    如果您将 my-vsc 指定为 copyMethod,则将 my-vsc 替换为 VolumeSnapshotClass 的名称。对于其他类型的 copyMethod,这并不是必需的。如果没有包括,则使用系统默认 VolumeSnapshotClass

注:默认情况下,Rclone movers 运行没有 root 权限。如果要以 root 用户身份运行 Rclone movers,请运行以下命令将升级的权限注解添加到您的命名空间。

oc annotate namespace <namespace> volsync.backube/privileged-movers=true
Copy to Clipboard Toggle word wrap

<namespace> 替换为您的命名空间的名称。

1.2.1.7. 其他资源

如需更多信息,请参阅以下内容:

1.2.2. 将复制镜像转换为可用的持久性卷声明

您可能需要将复制镜像转换为持久性卷声明来恢复数据。

当您使用 VolumeSnapshotReplicationDestination 位置复制或恢复 pesent 卷声明时,会创建一个 VolumeSnapshotVolumeSnapshot 包含最后一次成功同步的 latestImage。镜像的副本必须转换为持久性卷声明,然后才能使用它。VolSync ReplicationDestination 卷填充器可用于将镜像副本转换为可用的持久性卷声明。

  1. 使用 dataSourceRef 创建一个持久性卷声明,该声明引用要恢复持久性卷声明的 ReplicationDestination。此持久性卷声明填充了 VolumeSnapshot 的内容,其内容在 ReplicationDestination 自定义资源定义的 status.latestImage 设置中指定。

    以下 YAML 内容显示了一个可能使用的持久性卷声明示例:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc-name>
      namespace: <destination-ns>
    spec:
      accessModes:
        - ReadWriteOnce
      dataSourceRef:
        kind: ReplicationDestination
        apiGroup: volsync.backube
        name: <replicationdestination_to_replace>
      resources:
        requests:
          storage: 2Gi
    Copy to Clipboard Toggle word wrap

    pvc-name 替换为您的新持久性卷声明的名称。

    destination-ns 替换为持久性卷声明和 ReplicationDestination 所在的命名空间。

    replicationdestination_to_replace 替换为 ReplicationDestination 名称。

    最佳实践:当值至少与初始源持久性卷声明大小相同时,您可以使用不同的值更新 resources.requests.storage

  2. 输入以下命令验证您的持久性卷声明是否在环境中运行:

    $ kubectl get pvc -n <destination-ns>
    Copy to Clipboard Toggle word wrap

备注:

如果没有 latestImage,则持久性卷声明会一直处于待处理状态,直到 ReplicationDestination 完成并且快照可用。您可以创建一个 ReplicationDestination,以及一个同时使用 ReplicationDestination 的持久性卷控制器。持久性卷声明仅在 ReplicationDestination 完成复制和快照可用后启动卷填充过程。您可以在 .status.latestImage 中找到快照。

另外,如果所使用的存储类的 volumeBindingMode 的值为 WaitForFirstConsumer,则卷填充器会等待持久性卷声明的消费者被填充。当消费者需要访问权限时,如要挂载持久性卷声明的 pod,则卷会被填充。VolSync 卷填充器控制器使用 ReplicationDestination 中的 latestImage。每次创建持久性卷控制后,每次复制完成后都会更新 latestImage

1.2.3. 调度同步

在确定如何启动复制时,从三个选项中选择:始终运行、按计划或手动运行。调度复制是一个经常选择的选项。

Schedule 选项在计划的时间运行复制。调度由 cronspec 定义,因此调度可配置为间隔或特定时间。调度值的顺序为:

"minute (0-59) hour (0-23) day-of-month (1-31) month (1-12) day-of-week (0-6)"

复制将在调度的时间发生时开始。您为此复制选项的设置可能类似以下内容:

spec:
  trigger:
    schedule: "*/6 * * * *"
Copy to Clipboard Toggle word wrap

启用其中一种方法后,同步调度会根据您配置的方法运行。

如需了解更多信息和选项,请参阅 VolSync 文档。

1.2.4. VolSync 高级配置

您可以在复制持久性卷时进一步配置 VolSync,如创建自己的 secret。

1.2.4.1. 为 Rsync-TLS 复制创建 secret

源和目标必须具有对 TLS 连接的共享密钥的访问权限。您可以在 keySecret 字段中找到密钥位置。如果您没有在 .spec.rsyncTLS.keySecret 中提供 secret 名称,secret 名称会被自动生成并添加到 .status.rsyncTLS.keySecret 中。

要创建自己的 secret,请完成以下步骤:

  1. secret 使用以下格式:<id>:<at_least_32_hex_digits>

    请参见以下示例:1:23b7395fafc3e842bd8ac0fe142e6ad1

  2. 请参阅以下与上例对应的 secret.yaml 示例:

    apiVersion: v1
    data:
      # echo -n 1:23b7395fafc3e842bd8ac0fe142e6ad1 | base64
      psk.txt: MToyM2I3Mzk1ZmFmYzNlODQyYmQ4YWMwZmUxNDJlNmFkMQ==
    kind: Secret
    metadata:
      name: tls-key-secret
    type: Opaque
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat