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


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

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

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

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

Expand
变量类型默认值描述

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 上配置资源使用量要求和限制:

Expand
变量类型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 允许访问:

Expand
变量类型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"
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

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

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

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

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

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

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

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

8.2.1.3.2. 关于 pod 安全准入

OpenShift Container Platform 包括 Kubernetes pod 安全准入。不遵循全局或命名空间级别定义的 pod 安全准入的 Pod 不会被接受到集群且无法运行。

在全局范围内,会强制 privileged 配置集,restricted 配置集用于警告和审核。

您还可以在命名空间级别配置 pod 安全准入设置。

重要

不要在默认项目中运行工作负载或共享对默认项目的访问权限。为运行核心集群组件保留默认项目。

以下默认项目被视为具有高度特权:default, kube-public, kube-system, openshift, openshift-infra, openshift-node,其他系统创建的项目的标签 openshift.io/run-level 被设置为 01。依赖于准入插件(如 pod 安全准入、安全性上下文约束、集群资源配额和镜像引用解析)的功能无法在高特权项目中工作。

8.2.1.3.2.1. Pod 安全准入模式

您可以为命名空间配置以下 pod 安全准入模式:

Expand
表 8.1. Pod 安全准入模式
模式标签描述

enforce

pod-security.kubernetes.io/enforce

如果 pod 不符合集合配置集,则拒绝 pod 来自准入

audit

pod-security.kubernetes.io/audit

如果 pod 不符合集合配置集,日志审计事件

warn

pod-security.kubernetes.io/warn

如果 pod 不符合集合配置集,则会显示警告

8.2.1.3.2.2. Pod 安全准入配置集

您可以将每个 pod 安全准入模式设置为以下配置集之一:

Expand
表 8.2. Pod 安全准入配置集
profile描述

privileged

最低限制策略;允许已知特权升级

baseline

最低限制策略;防止已知特权升级

restricted

最严格的策略;遵循当前的 pod 强化最佳实践

8.2.1.3.2.3. 特权命名空间

以下系统命名空间总是设置为 privileged pod 安全准入配置集:

  • default
  • kube-public
  • kube-system

您无法更改这些特权命名空间的 pod 安全配置集。

特权命名空间配置示例

apiVersion: v1
kind: Namespace
metadata:
  labels:
    openshift.io/cluster-monitoring: "true"
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/audit: privileged
    pod-security.kubernetes.io/warn: privileged
  name: "<mig_namespace>"
# ...
Copy to Clipboard Toggle word wrap

默认情况下,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
    Copy to Clipboard Toggle word wrap

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

在目标集群中,您可以使用以下非 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
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

8.2.2. MigCluster 配置

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

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

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

Expand
变量类型必填描述

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)

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat