1.3. 迁移工具和先决条件

您可以使用 Cluster Application Migration(CAM)工具将应用程序工作负载从 OpenShift Container Platform 3.7、3.9、3.10 和 3.11 迁移到 OpenShift Container Platform 4.3。使用 CAM 工具,您可以控制迁移并最小化应用程序的停机时间。

CAM 工具的 Web 控制台和 API,基于 Kubernetes 自定义资源,您可以按照命名空间迁移有状态应用程序工作负载。

CAM 工具支持文件系统和快照数据复制方法,用于将数据从源集群迁移到目标集群。您可以选择适合于您的环境并受您的存储供应商支持的方法。

您可以在迁移期间的特定点使用迁移 hook 运行 Ansible playbook。您在创建迁移计划时可以添加 hook。

注意

OpenShift Container Platform 4 中已弃用服务目录。您可以将服务目录置备的工作负载资源从 OpenShift Container Platform 3 迁移到 4,但无法在迁移后在这些工作负载上执行服务目录操作,如 provisiondeprovisionupdate

CAM 工具会显示有关服务目录资源的消息(如 ClusterServiceClassServiceInstanceServiceBinding)无法迁移。

Control Plane Migration Assistant(CPMA)是一个基于 CLI 的工具,可帮助您迁移 control plane。CPMA 处理 OpenShift Container Platform 3 配置文件并生成自定义资源 (CR) 清单文件,这些文件由 OpenShift Container Platform 4.3 Operator 使用。

重要

在开始迁移前,请查看规划迁移中的信息。

1.3.1. 迁移先决条件

  • 必须安装 podman
  • 源集群必须是 OpenShift Container Platform 3.7 、3.9 、3.10 或 3.11。
  • 必须将源集群升级到最新的 z-stream 版本。
  • 需要在所有集群中都有 cluster-admin 权限。
  • 源和目标集群必须有对复制存储库的不受限制的网络访问权限。
  • 安装 Migration controller 的集群必须具有对其他集群的不受限制的访问权限。
  • 如果应用程序使用 openshift 命名空间中的镜像,则目标集群中必须有所需的镜像版本。

    如果没有所需的镜像,您必须更新 imagestreamtags 的引用以使用与应用程序兼容的可用版本。如果无法更新 imagestreamtags,您可以手动将相关的镜像上传到应用程序命名空间中,并更新应用程序以引用它们。

以下 imagestreamtags 已从 OpenShift Container Platform 4.2 中删除

  • dotnet:1.0, dotnet:1.1, dotnet:2.0
  • dotnet-runtime:2.0
  • mariadb:10.1
  • mongodb:2.4mongodb:2.6
  • mysql:5.5mysql:5.6
  • nginx:1.8
  • nodejs:0.10nodejs:4nodejs:6
  • perl:5.16perl:5.20
  • php:5.5php:5.6
  • postgresql:9.2, postgresql:9.4, postgresql:9.5
  • python:3.3python:3.4
  • ruby:2.0ruby:2.2

1.3.2. 关于集群应用程序迁移(CAM)工具

集群应用程序迁移 (CAM) 工具可让您使用 CAM web 控制台或 Kubernetes API 将 OpenShift Container Platform 源集群中的 Kubernetes 资源、持久性卷数据和内部容器镜像迁移到 OpenShift Container Platform 4.3 目标集群。

使用 CAM web 控制台迁移应用程序涉及以下步骤:

  1. 在所有集群中安装 Cluster Application Migration Operator

    您可以在有限的或没有互联网访问的受限环境中安装 Cluster Application Migration Operator。源和目标集群必须可以在相互间进行访问,而需要可以访问 registry 的镜像(mirror).

  2. 配置复制存储库,这是 CAM 工具用来迁移数据的中间对象存储

    源和目标集群必须有对复制存储库的不受限制的网络访问权限。在受限环境中,您可以使用内部托管的 S3 存储存储库。如果使用代理服务器,您必须确保将复制存储库列入白名单。

  3. 在 CAM web 控制台中添加源集群
  4. 在 CAM web 控制台中添加复制存储库
  5. 创建迁移计划,包含以下数据迁移选项之一:

    • Copy:CAM 工具将数据从源集群复制到复制存储库,再从复制存储库把数据复制到目标集群。

      迁移 PV 复制
    • Move:CAM 工具从源集群中卸载一个远程卷(例如 NFS),在目标集群上创建一个指向这个远程卷的 PV 资源,然后在目标集群中挂载远程卷。在目标集群中运行的应用程序使用源集群使用的同一远程卷。远程卷必须可以被源集群和目标集群访问。

      注意

      虽然复制存储库没有出现在此图表中,但实际迁移过程需要它。

      迁移 PV 移动
  6. 运行迁移计划,使用以下选项之一:

    • Stage (可选)在不停止应用程序的情况下将数据复制到目标集群。

      Stage 可以多次运行,以便在迁移前将大多数数据复制到目标。这样可最小化实际迁移时间和应用程序停机时间。

    • Migrate 在源集群中停止应用程序,并在目标集群中重新创建其资源。您可以选择在不停止应用程序的情况下迁移工作负载。
OCP 3 到 4 的应用程序迁移

1.3.3. 关于数据复制方法

CAM 工具支持文件系统和快照数据复制方法,用于将数据从源集群迁移到目标集群。您可以选择适合于您的环境并受您的存储供应商支持的方法。

1.3.3.1. 文件系统复制方法

CAM 工具将数据文件从源集群复制到复制存储库,并从那里复制到目标集群。

表 1.1. 文件系统复制方法概述

优点限制:
  • 集群可以有不同的存储类
  • 所有 S3 存储供应商均支持
  • 使用 checksum 验证数据(可选)
  • 比快照复制方法慢
  • 可选的数据校验可能会显著降低性能

1.3.3.2. 快照复制方法

CAM 工具将源集群的数据快照复制到云供应商的对象存储,后者配置为复制存储库。数据在目标集群上恢复。

AWS、Google Cloud Provider 和 Microsoft Azure 支持快照复制方法。

表 1.2. 快照复制方法概述

优点限制:
  • 比文件系统复制方法快
  • 云供应商必须支持快照。
  • 集群必须位于相同的云供应商。
  • 集群必须位于同一位置或区域。
  • 集群必须具有相同的存储类。
  • 存储类必须与快照兼容。

1.3.4. 关于迁移 hook

您可以在迁移期间的特定点使用迁移 hook 运行 Ansible playbook。您在创建迁移计划时可以添加 hook。

注意

如果您不想使用 Ansible playbook,您可以创建自定义容器镜像并将其添加到迁移计划中。

迁移 hook 执行的任务包括自定义应用程序默认、手动迁移不受支持的数据类型以及在迁移后更新应用程序。

在源集群或目标集群中以以下迁移步骤之一运行单个迁移 hook:

  • PreBackup: 在源集群上启动备份前的任务
  • PostBackup: 在源集群中完成备份任务后
  • PreRestore: 在目标集群上启动恢复前的任务
  • PostRestore: 在目标集群中完成恢复后的任务

    您可以为每个迁移步骤分配一个 hook,单个迁移计划最多可分配四个 hook。

默认 hook-runner 镜像为 registry.redhat.io/rhcam-1-2/openshift-migration-hook-runner-rhel7。该镜像基于 Ansible Runner,并包括用于 Ansible Kubernetes 资源的 python-openshift 以及更新的 oc 二进制文件。您还可以使用其他 Ansible 模块或工具创建自己的 hook 镜像。

Ansible playbook 作为一个 ConfigMap 挂载到 hook 容器上。hook 容器在具有指定服务帐户和命名空间的集群中作为一个作业(job)运行。作业运行(即使初始 Pod 被驱除或终止),直到达到默认的 backoffLimit (6)或成功完成为止。

1.3.5. 关于 Control Plane Migration Assistant

Control Plane Migration Assistant (CPMA) 是一个基于 CLI 的工具,它可帮助您将 control plane 从 OpenShift Container Platform 3.7(或更新版本)迁移到 OpenShift Container Platform 4.3。CPMA 处理 OpenShift Container Platform 3 配置文件并生成自定义资源 (CR) 清单文件,这些文件由 OpenShift Container Platform 4.3 Operator 使用。

因为 OpenShift Container Platform 3 和 4 的配置差别很大,所以不是所有的参数都会被处理。CPMA 可生成报告,描述功能是否被全面支持、部分支持或根本不支持。

配置字段

CPMA 使用 Kubernetes 和 OpenShift Container Platform API 来访问 OpenShift Container Platform 3 集群中的以下配置文件:

  • master 配置文件(默认为 /etc/origin/master/master-config.yaml
  • CRI-O 配置文件(默认为 /etc/crio/crio.conf
  • etcd 配置文件(默认为 /etc/etcd/etcd.conf
  • 镜像 registry 文件(默认为 /etc/containers/registries.conf
  • 依赖性配置文件:

    • 密码文件(例如: HTPasswd)
    • ConfigMaps
    • secret

CR 清单

CPMA 为以下配置生成 CR 清单:

  • API 服务器 CA 证书: 100_CPMA-cluster-config-APISecret.yaml

    注意

    如果您使用的是未签名的 API 服务器 CA 证书,则必须手动将证书添加到目标集群中。

  • CRI-O: 100_CPMA-crio-config.yaml
  • 集群资源配额: 100_CPMA-cluster-quota-resource-x.yaml
  • 项目资源配额: 100_CPMA-resource-quota-x.yaml
  • 可移植镜像 registry(/etc/registries/registries.conf)和可移植镜像策略(etc/origin/master/master-config.yam): 100_CPMA-cluster-config-image.yaml
  • OAuth 提供程序:100_CPMA-cluster-config-oauth.yaml
  • 项目配置: 100_CPMA-cluster-config-project.yaml
  • 调度程序:100_CPMA-cluster-config-scheduler.yaml
  • SDN: 100_CPMA-cluster-config-sdn.yaml