8.2. 用于直接卷迁移的 rsync 配置
MTC 中的直接卷迁移 (DVM) 使用 Rsync 在源和目标持久性卷 (PV) 间同步文件,使用两个 PV 之间的直接连接。
rsync 是一个命令行工具,允许您将文件和目录传送到本地和远程目的地。
				DVM 使用的 rsync 命令针对按预期工作的集群进行了优化。
			
				MigrationController CR 会公开以下变量,以便在直接卷迁移中配置 rsync_options :
			
| 变量 | 类型 | 默认值 | 描述 | 
|---|---|---|---|
| 
								 | int | 未设置 | 
								当设置为一个正整数时, | 
| 
								 | bool | 
								 | 
								在 Rsync 命令中设置  | 
| 
								 | bool | 
								 | 
								在 Rsync 命令中设置  | 
| 
								 | bool | 
								 | 
								在 Rsync 命令中设置  | 
| 
								 | bool | 
								 | 
								设置  | 
| 
								 | string | 
								 
								 
								 
								 
								 
								 
								 | 在 Rsync Pod 中启用详细的日志记录。 | 
| 
								 | string | 空 | 为任何其他任意选项保留。 | 
- 
						对于所有迁移,通过上述变量设置选项是 全局的。当 Operator 成功协调 MigrationControllerCR 时,配置会对将来的所有迁移生效。任何持续迁移都可以使用更新的设置,具体取决于它当前所处的步骤。因此,建议在运行迁移前应用设置。用户始终可以根据需要更新设置。
- 
						请谨慎使用 rsync_opt_extras变量。使用此变量传递的任何选项都会附加到rsync命令中,并增加。请确定在指定多个选项时添加空格。指定选项时出现任何错误都可能导致迁移失败。但是,您可以尽可能更新MigrationControllerCR 以供将来的迁移使用。
- 
						自定义 rsync_opt_info标志可能会对 MTC 的进度报告功能造成负面影响。但是,删除进度报告可能会具有性能优势。只有在观察到 Rsync 操作的性能无法接受时才应使用这个选项。
DVM 使用的默认配置在各种环境中测试。只要集群健康且运行良好,大多数生产环境用例都可以接受。当默认设置无法正常工作且 Rsync 操作失败时,应使用这些配置变量。
8.2.1. Rsync pod 的资源限制配置
					MigrationController CR 会公开以下变量,以便在 Rsync 上配置资源使用量要求和限制:
				
| 变量 | 类型 | Default(默认) | 描述 | 
|---|---|---|---|
| 
									 | string | 
									 | 源 rsync pod 的 CPU 限制 | 
| 
									 | string | 
									 | 源 rsync pod 的内存限值 | 
| 
									 | string | 
									 | 源 rsync pod 的 cpu 请求 | 
| 
									 | string | 
									 | 源 rsync pod 的内存请求 | 
| 
									 | string | 
									 | 目标 rsync pod 的 cpu 限制 | 
| 
									 | string | 
									 | 目标 rsync pod 的 cpu 请求 | 
| 
									 | string | 
									 | 目标 rsync pod 的内存限值 | 
| 
									 | string | 
									 | 目标 rsync pod 的内存请求 | 
8.2.1.1. Rsync pod 的补充组配置
如果 PVC 使用共享存储,可以通过将补充组添加到 Rsync pod 定义来配置对存储的访问,以便 pod 允许访问:
| 变量 | 类型 | Default(默认) | 描述 | 
|---|---|---|---|
| 
										 | string | 未设置 | 用于源 Rsync pod 的以逗号分隔的补充组列表 | 
| 
										 | string | 未设置 | 目标 Rsync pod 的,以逗号分隔的补充组列表 | 
						例如,可以更新 MigrationController CR 来设置前面的值:
					
spec: src_supplemental_groups: "1000,2000" target_supplemental_groups: "2000,3000"
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 中的以下变量增加重试限制:
					
						在本例中,重试限制增加到 40。
					
8.2.1.3. 以 root 或非 root 身份运行 Rsync
						OpenShift Container Platform 环境默认启用 PodSecurityAdmission 控制器。此控制器要求集群管理员通过命名空间标签强制实施 Pod 安全标准。集群中的所有工作负载都应该运行以下 Pod 安全标准级别之一: privileged、baseline 或 restricted。每个集群都有自己的默认策略集。
					
为了保证在所有环境中成功进行数据传输,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。
							在这两种情况下,您必须在迁移前运行具有较高特权的工作负载的命名空间源上设置以下标签: enforce、audit 和 warn。
						
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 被设置为 0 或 1。依赖于准入插件(如 pod 安全准入、安全性上下文约束、集群资源配额和镜像引用解析)的功能无法在高特权项目中工作。
							
8.2.1.3.2.1. Pod 安全准入模式
您可以为命名空间配置以下 pod 安全准入模式:
| 模式 | 标签 | 描述 | 
|---|---|---|
| 
												 | 
												 | 如果 pod 不符合集合配置集,则拒绝 pod 来自准入 | 
| 
												 | 
												 | 如果 pod 不符合集合配置集,日志审计事件 | 
| 
												 | 
												 | 如果 pod 不符合集合配置集,则会显示警告 | 
8.2.1.3.2.2. Pod 安全准入配置集
您可以将每个 pod 安全准入模式设置为以下配置集之一:
| profile | 描述 | 
|---|---|
| 
												 | 最低限制策略;允许已知特权升级 | 
| 
												 | 最低限制策略;防止已知特权升级 | 
| 
												 | 最严格的策略;遵循当前的 pod 强化最佳实践 | 
8.2.1.3.2.3. 特权命名空间
								以下系统命名空间总是设置为 privileged pod 安全准入配置集:
							
- 
										default
- 
										kube-public
- 
										kube-system
您无法更改这些特权命名空间的 pod 安全配置集。
privileged 命名空间配置示例
默认情况下,Rsync 作为非 root 运行。
							在目标集群中,您可以将 MigrationController CR 配置为以 root 用户身份运行 Rsync。
						
流程
- 配置 - MigrationControllerCR,如下所示:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 此配置将适用于所有将来的迁移。 
8.2.1.3.4. 将 MigMigration CR 配置为每个迁移的根或非 root
							在目标集群中,您可以使用以下非 root 选项将 MigMigration CR 配置为以 root 或非 root 身份运行 Rsync:
						
- 作为特定用户 ID (UID)
- 作为一个特定组 ID (GID)
流程
- 要以 root 用户身份运行 Rsync,请根据本例配置 - MigMigrationCR:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要将 Rsync 作为特定用户 ID (UID)或特定组 ID (GID)运行,请根据本例配置 - MigMigrationCR:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
8.2.2. MigCluster 配置
					对于 MTC 中创建的每个 MigCluster 资源,在集群中的 Migration Operator 命名空间中创建一个名为 migration-cluster-config 的 ConfigMap,其中 MigCluster 资源代表。 
				
					migration-cluster-config 允许您配置 MigCluster 特定值。Migration Operator 管理 migration-cluster-config。 
				
					您可以使用 MigrationController CR 中公开的变量配置 ConfigMap 中的每个值:
				
| 变量 | 类型 | 必填 | 描述 | 
|---|---|---|---|
| 
									 | string | 否 | 用于 Stage Pod 的镜像(仅适用于 IndirectVolumeMigration) | 
| 
									 | string | 否 | 用于 Migration Registry 的镜像 | 
| 
									 | string | 否 | 
									数据传输的端点类型( | 
| 
									 | string | 否 | 用于 Rsync Pod 的镜像(仅适用于 DirectVolumeMigration) | 
| 
									 | bool | 否 | 是否以特权方式运行 Rsync Pod | 
| 
									 | bool | 否 | 
									是否将 Rsync Pod 作为超级特权容器运行 ( | 
| 
									 | string | 否 | 集群的子域 | 
| 
									 | int | 否 | Migration Registry 部署的就绪度超时(以秒为单位) | 
| 
									 | int | 否 | Migration Registry 部署的存活度超时(以秒为单位) | 
| 
									 | string | 否 | 在 MigCluster 中验证公开的 registry 的子目录 (如 /v2) |