搜索

1.2. VolSync 持久性卷复制服务(技术预览)

download PDF

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

1.2.1. 使用 VolSync 复制持久性卷

您可以使用三种方法复制 VolSync 的持久性卷,这取决于您拥有的同步位置数量。本例中使用 Rsync 方法。有关其他方法以及 Rsync 的更多信息,请参阅 VolSync 文档中的使用情况

rsync 复制常用于持久性卷的一个一对一复制。这用于将数据复制到远程站点。

VolSync 不自行创建命名空间,因此它与其他 OpenShift Container Platform all-namespace operator 位于同一个命名空间中。您对 VolSync 的 operator 设置所做的任何更改都会影响同一命名空间中的其他 Operator,例如,如果您更改为手动批准频道更新。

1.2.1.1. 先决条件

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

  • 配置了 Red Hat OpenShift Container Platform 环境,运行 Red Hat Advanced Cluster Management 版本 2.4 或更高版本、hub 集群
  • 至少两个由同一 Red Hat Advanced Cluster Management hub 集群管理的集群
  • 您要通过 VolSync 配置的集群之间的网络连接;如果集群不位于同一网络中,您可以配置 Submariner 多集群联网和服务发现,并使用 ServiceTypeClusterIP 值来联网 集群,或使用 ServiceType 值为 ServiceType 的负载均衡器。
  • 您用于源持久性卷的存储驱动程序必须与 CSI 兼容,并能够支持快照。

1.2.1.2. 在受管集群上安装 VolSync

要启用 VolSync,将一个集群上的持久性卷声明复制到另一个集群的持久性卷声明中,您必须在源和目标集群上安装 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

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

    3. 添加相同的标签,标记其他受管集群。
    4. 在每个受管集群中运行以下命令,以确认已安装了 VolSync Operator:

      oc get csv -n openshift-operators

      安装时,会列出 VolSync 的 Operator。

  • 使用命令行界面完成以下步骤:

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

      oc label managedcluster <managed-cluster-1> "addons.open-cluster-management.io/volsync"="true"

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

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

      oc label managedcluster <managed-cluster-2> "addons.open-cluster-management.io/volsync"="true"

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

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

1.2.1.2.2. 使用 ManagedClusterAddOn 安装 VolSync

要通过手动添加 ManagedClusterSetAddOn 在受管集群中安装 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: {}

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

    注: 名称必须是 volsync

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

    oc apply -f volsync-mcao.yaml
  3. 为其他受管集群重复上述步骤。

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

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

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

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

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

  1. 配置您的目标集群。

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

      $ kubectl create ns <destination-ns>

      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

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

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

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

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

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

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

      $ kubectl create -n <destination-ns> -f replication_destination.yaml

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

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

      参数

      .status.rsync.address

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

      .status.rsync.sshKeys

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

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

      $ ADDRESS=`kubectl get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.address}}`
      $ echo $ADDRESS

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

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

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

      a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
    5. 运行以下命令复制 secret 的名称,以及作为 .status.rsync.sshKeys 的值提供的 secret 的内容。

      $ SSHKEYS=`kubectl get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.sshKeys}}`
      $ echo $SSHKEYS

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

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

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

      volsync-rsync-dst-src-destination-name
  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: gp2-csi

      source 替换为复制源 CR 的名称。有关如何 自动替换该流程 的说明,请参阅此流程的第 3 步。

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

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

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

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

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

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

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

    2. 通过针对目标集群输入以下命令从目标集群复制 SSH secret:

      $ kubectl get secret -n <destination-ns> $SSHKEYS -o yaml > /tmp/secret.yaml

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

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

      $ vi /tmp/secret.yaml
    4. 在目标集群的 open secret 文件中进行以下更改:

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

      $ kubectl create -f /tmp/secret.yaml
    6. 在源集群中,使用以下命令将 ReplicationSource 对象中的 地址和 sshKeys 值替换为来自目标集群的值来修改 replication_source.yaml 文件:

      $ sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml
      $ sed -i "s/<mysshkeys>/$SSHKEYS/g" replication_source.yaml
      $ kubectl create -n <source> -f replication_source.yaml

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

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

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

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

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

      $ kubectl describe ReplicationSource -n <source-ns> <source>

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

      source 替换为复制源 CR 的名称。

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

      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

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.