9.5. 迁移控制器选项

您可以编辑迁移计划限制,启用持久性卷大小,或者在 MigrationController 自定义资源 (CR) 中启用缓存的 Kubernetes 客户端,以用于大型迁移并提高性能。

9.5.1. 为大型迁移增加限制

您可以使用 MTC 为大型迁移增加迁移对象和容器资源的限制。

重要

您必须在生产环境中执行迁移前测试这些更改。

流程

  1. 编辑 MigrationController 自定义资源(CR)清单:

    $ oc edit migrationcontroller -n openshift-migration
  2. 更新以下参数:

    ...
    mig_controller_limits_cpu: "1" 1
    mig_controller_limits_memory: "10Gi" 2
    ...
    mig_controller_requests_cpu: "100m" 3
    mig_controller_requests_memory: "350Mi" 4
    ...
    mig_pv_limit: 100 5
    mig_pod_limit: 100 6
    mig_namespace_limit: 10 7
    ...
    1
    指定 MigrationController CR 可用的 CPU 数量。
    2
    指定 MigrationController CR 可用的内存量。
    3
    指定可用于 MigrationController CR 请求的 CPU 单元数。100m 代表 0.1 CPU 单元(100 * 1e-3)。
    4
    指定可用于 MigrationController CR 请求的内存量。
    5
    指定可迁移的持久性卷数量。
    6
    指定可迁移的 pod 数量。
    7
    指定可迁移的命名空间数量。
  3. 创建使用更新的参数验证更改的迁移计划。

    如果您的迁移计划超过 MigrationController CR 限制,则 MTC 控制台在保存迁移计划时会显示警告信息。

9.5.2. 为直接卷迁移启用持久性卷大小

您可以启用持久性卷(PV)调整直接卷迁移的大小,以避免在目标集群中耗尽磁盘空间。

当 PV 的磁盘用量达到配置级别时,MigrationController 自定义资源(CR)会将持久性卷声明(PVC)的请求存储容量与其实际置备的容量进行比较。然后,它会计算目标集群所需的空间。

pv_resizing_threshold 参数决定何时使用 PV 调整大小。默认阈值是 3%。这意味着,当 PV 的磁盘用量超过 97% 时,PV 会调整大小。您可以提高这个阈值,以便 PV 调整大小在较低的磁盘用量级别上发生。

PVC 容量根据以下标准计算:

  • 如果 PVC 请求的存储容量(spec.resources.requests.storage)不等于实际置备的容量(status.capacity.storage),则会使用较大的值。
  • 如果 PV 通过 PVC 置备,然后更改以便其 PV 和 PVC 容量不再匹配,则会使用较大的值。

先决条件

  • PVC 必须附加到一个或多个正在运行的 pod,以便 MigrationController CR 可以执行命令。

流程

  1. 登录主机集群。
  2. 通过修补 MigrationController CR 来启用 PV 调整大小:

    $ oc patch migrationcontroller migration-controller -p '{"spec":{"enable_dvm_pv_resizing":true}}' \ 1
      --type='merge' -n openshift-migration
    1
    将值设为 false 可禁用 PV 大小调整。
  3. 可选:更新 pv_resizing_threshold 参数以增加阈值:

    $ oc patch migrationcontroller migration-controller -p '{"spec":{"pv_resizing_threshold":41}}' \ 1
      --type='merge' -n openshift-migration
    1
    默认值为 3

    超过阈值时,MigPlan CR 状态中会显示以下状态信息:

    status:
      conditions:
    ...
      - category: Warn
        durable: true
        lastTransitionTime: "2021-06-17T08:57:01Z"
        message: 'Capacity of the following volumes will be automatically adjusted to avoid disk capacity issues in the target cluster:  [pvc-b800eb7b-cf3b-11eb-a3f7-0eae3e0555f3]'
        reason: Done
        status: "False"
        type: PvCapacityAdjustmentRequired
    注意

    对于 AWS gp2 存储,因为 gp2 计算卷用量和大小的方式,这个信息不会出现,除非 pv_resizing_threshold 为 42% 或更高。(BZ#1973148

9.5.3. 启用缓存的 Kubernetes 客户端

您可以在 MigrationController 自定义资源(CR)中启用缓存的 Kubernetes 客户端,以便在迁移过程中提高性能。在位于不同区域的集群之间迁移时,或存在显著的网络延迟时,会显示最大的性能优势。

注意

但是,委派的任务(例如,用于直接卷迁移的 Rsync 备份或 Velero 备份和恢复)并不会显著提高通过缓存的客户端的性能。

缓存的客户端需要额外的内存,因为 MigrationController CR 会缓存与 MigCluster CR 交互所需的所有 API 资源。通常发送到 API 服务器的请求会被定向到缓存。缓存会监视 API 服务器是否有更新。

如果启用了缓存的客户端后发生 OOMKilled 错误,您可以增加 MigrationController CR 的内存限值和请求。

流程

  1. 运行以下命令启用缓存的客户端:

    $ oc -n openshift-migration patch migrationcontroller migration-controller --type=json --patch \
      '[{ "op": "replace", "path": "/spec/mig_controller_enable_cache", "value": true}]'
  2. 可选:运行以下命令来增加 MigrationController CR 内存限值:

    $ oc -n openshift-migration patch migrationcontroller migration-controller --type=json --patch \
      '[{ "op": "replace", "path": "/spec/mig_controller_limits_memory", "value": <10Gi>}]'
  3. 可选:运行以下命令来增加 MigrationController CR 内存请求:

    $ oc -n openshift-migration patch migrationcontroller migration-controller --type=json --patch \
      '[{ "op": "replace", "path": "/spec/mig_controller_requests_memory", "value": <350Mi>}]'