8.2. 用于直接卷迁移的 rsync 配置

MTC 中的直接卷迁移 (DVM) 使用 Rsync 在源和目标持久性卷 (PV) 间同步文件,使用两个 PV 之间的直接连接。

rsync 是一个命令行工具,允许您将文件和目录传送到本地和远程目的地。

DVM 使用的 rsync 命令针对按预期工作的集群进行了优化。

MigrationController CR 会公开以下变量,以便在直接卷迁移中配置 rsync_options

变量类型默认值描述

rsync_opt_bwlimit

int

未设置

当设置为一个正整数时,--bwlimit=<int> 选项被添加到 Rsync 命令中。

rsync_opt_archive

bool

true

在 Rsync 命令中设置 --archive 选项。

rsync_opt_partial

bool

true

在 Rsync 命令中设置 --partial 选项。

rsync_opt_delete

bool

true

在 Rsync 命令中设置 --delete 选项。

rsync_opt_hardlinks

bool

true

设置 --hard-links 选项是 Rsync 命令。

rsync_opt_info

string

COPY2

DEL2

REMOVE2

SKIP2

FLIST2

PROGRESS2

STATS2

在 Rsync Pod 中启用详细的日志记录。

rsync_opt_extras

string

为任何其他任意选项保留。

  • 对于所有迁移,通过上述变量设置选项是 全局的。当 Operator 成功协调 MigrationController CR 时,配置会对将来的所有迁移生效。任何持续迁移都可以使用更新的设置,具体取决于它当前所处的步骤。因此,建议在运行迁移前应用设置。用户始终可以根据需要更新设置。
  • 请谨慎使用 rsync_opt_extras 变量。使用此变量传递的任何选项都会附加到 rsync 命令中,并增加。请确定在指定多个选项时添加空格。指定选项时出现任何错误都可能导致迁移失败。但是,您可以尽可能更新 MigrationController CR 以供将来的迁移使用。
  • 自定义 rsync_opt_info 标志可能会对 MTC 的进度报告功能造成负面影响。但是,删除进度报告可能会具有性能优势。只有在观察到 Rsync 操作的性能无法接受时才应使用这个选项。
注意

DVM 使用的默认配置在各种环境中测试。只要集群健康且运行良好,大多数生产环境用例都可以接受。当默认设置无法正常工作且 Rsync 操作失败时,应使用这些配置变量。

8.2.1. Rsync pod 的资源限制配置

MigrationController CR 会公开以下变量,以便在 Rsync 上配置资源使用量要求和限制:

变量类型Default(默认)描述

source_rsync_pod_cpu_limits

string

1

源 rsync pod 的 CPU 限制

source_rsync_pod_memory_limits

string

1Gi

源 rsync pod 的内存限值

source_rsync_pod_cpu_requests

string

400m

源 rsync pod 的 cpu 请求

source_rsync_pod_memory_requests

string

1Gi

源 rsync pod 的内存请求

target_rsync_pod_cpu_limits

string

1

目标 rsync pod 的 cpu 限制

target_rsync_pod_cpu_requests

string

400m

目标 rsync pod 的 cpu 请求

target_rsync_pod_memory_limits

string

1Gi

目标 rsync pod 的内存限值

target_rsync_pod_memory_requests

string

1Gi

目标 rsync pod 的内存请求

8.2.1.1. Rsync pod 的补充组配置

如果 PVC 使用共享存储,可以通过将补充组添加到 Rsync pod 定义来配置对存储的访问,以便 pod 允许访问:

变量类型Default(默认)描述

src_supplemental_groups

string

未设置

用于源 Rsync pod 的以逗号分隔的补充组列表

target_supplemental_groups

string

未设置

目标 Rsync pod 的,以逗号分隔的补充组列表

例如,可以更新 MigrationController CR 来设置前面的值:

spec:
  src_supplemental_groups: "1000,2000"
  target_supplemental_groups: "2000,3000"

8.2.1.2. rsync 重试配置

在 MTC 1.4.3 及更新的版本中,引入了重试失败的 Rsync 操作的功能。

默认情况下,迁移控制器会重试 Rsync,直到所有数据都成功从源传输至目标卷或指定重试次数为止。默认重试限制设置为 20

对于较大的卷,限制为 20 次重试可能不足。

您可以使用 MigrationController CR 中的以下变量增加重试限制:

apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
  name: migration-controller
  namespace: openshift-migration
spec:
  [...]
  rsync_backoff_limit: 40

在本例中,重试限制增加到 40

8.2.1.3. 以 root 或非 root 身份运行 Rsync

OpenShift Container Platform 环境默认启用 PodSecurityAdmission 控制器。此控制器要求集群管理员通过命名空间标签强制实施 Pod 安全标准。集群中的所有工作负载都应该运行以下 Pod 安全标准级别之一: PrivilegedBaselineRestricted。每个集群都有自己的默认策略集。

为了保证在所有环境中成功进行数据传输,MTC 1.7.5 引入了 Rsync pod 中的更改,包括默认以非 root 用户身份运行 Rsync pod。这样可确保即使不一定需要更高特权的工作负载也可以进行数据传输。这个更改是进行的,因为它最适合运行具有最低级别权限的工作负载。

8.2.1.3.1. 为数据 trannsfer 手动覆盖默认非 root 操作

虽然在大多数情况下,以非 root 用户身份运行 Rsync pod 可以正常工作,但当您以 root 用户身份在源端运行工作负载时,数据传输可能会失败。MTC 提供了为数据传输手动覆盖默认非 root 操作的方法:

  • 将所有迁移配置为作为 root 在目标集群上针对所有迁移运行 Rsync pod。
  • 对于每个迁移,在目标集群上以 root 用户身份运行 Rsync pod。

在这两种情况下,您必须在迁移前运行具有较高特权的工作负载的命名空间源上设置以下标签: enforceauditwarn。

要了解更多有关标签的 Pod Security Admission 和设置值的信息,请参阅 控制 pod 安全准入同步

8.2.1.3.2. 将所有迁移的 MigrationController CR 配置为 root 或非 root

默认情况下,Rsync 作为非 root 运行。

在目标集群中,您可以将 MigrationController CR 配置为以 root 用户身份运行 Rsync。

流程

  • 配置 MigrationController CR,如下所示:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigrationController
    metadata:
      name: migration-controller
      namespace: openshift-migration
    spec:
      [...]
      migration_rsync_privileged: true

    此配置将适用于所有将来的迁移。

8.2.1.3.3. 将 MigMigration CR 配置为每个迁移的根或非 root

在目标集群中,您可以使用以下非 root 选项将 MigMigration CR 配置为以 root 或非 root 身份运行 Rsync:

  • 作为特定用户 ID (UID)
  • 作为一个特定组 ID (GID)

流程

  1. 要以 root 用户身份运行 Rsync,请根据本例配置 MigMigration CR:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigMigration
    metadata:
      name: migration-controller
      namespace: openshift-migration
    spec:
      [...]
      runAsRoot: true
  2. 要将 Rsync 作为特定用户 ID (UID)或特定组 ID (GID)运行,请根据本例配置 MigMigration CR:

    apiVersion: migration.openshift.io/v1alpha1
    kind: MigMigration
    metadata:
      name: migration-controller
      namespace: openshift-migration
    spec:
      [...]
      runAsUser: 10010001
      runAsGroup: 3

8.2.2. MigCluster 配置

对于 MTC 中创建的每个 MigCluster 资源,在集群中的 Migration Operator 命名空间中创建一个名为 migration-cluster-configConfigMap,其中 MigCluster 资源代表。 

migration-cluster-config 允许您配置 MigCluster 特定值。Migration Operator 管理 migration-cluster-config。 

您可以使用 MigrationController CR 中公开的变量配置 ConfigMap 中的每个值:

变量类型必填描述

migration_stage_image_fqin

string

用于 Stage Pod 的镜像(仅适用于 IndirectVolumeMigration)

migration_registry_image_fqin

string

用于 Migration Registry 的镜像

rsync_endpoint_type

string

数据传输的端点类型(Route, ClusterIP, NodePort

rsync_transfer_image_fqin

string

用于 Rsync Pod 的镜像(仅适用于 DirectVolumeMigration)

migration_rsync_privileged

bool

是否以特权方式运行 Rsync Pod

migration_rsync_super_privileged

bool

是否将 Rsync Pod 作为超级特权容器运行 (spc_t SELinux 上下文)

cluster_subdomain

string

集群的子域

migration_registry_readiness_timeout

int

Migration Registry 部署的就绪度超时(以秒为单位)

migration_registry_liveness_timeout

int

Migration Registry 部署的存活度超时(以秒为单位)

exposed_registry_validation_path

string

在 MigCluster 中验证公开的 registry 的子目录 (如 /v2)