×

您可以使用容器迁移工具包 (MTC) Web 控制台或从命令行迁移应用程序。

您可以使用分阶段迁移和切换迁移在集群之间迁移应用程序

  • 分阶段迁移将数据从源集群复制到目标集群,而不会停止应用程序。您可以多次运行分阶段迁移以减少切换迁移的持续时间。

  • 切换迁移会停止源集群上的事务并将资源移动到目标集群。

您可以使用状态迁移来迁移应用程序的状态

  • 状态迁移复制选定的持久卷声明 (PVC)。

  • 您可以使用状态迁移在同一集群内迁移命名空间。

大多数集群范围的资源尚不受 MTC 处理。如果您的应用程序需要集群范围的资源,您可能需要在目标集群上手动创建它们。

在迁移过程中,MTC 会保留以下命名空间批注

  • openshift.io/sa.scc.mcs

  • openshift.io/sa.scc.supplemental-groups

  • openshift.io/sa.scc.uid-range

这些批注保留 UID 范围,确保容器保留目标集群上的文件系统权限。存在迁移的 UID 可能会复制目标集群上现有或未来命名空间中的 UID 的风险。

迁移先决条件

  • 您必须以所有集群上的cluster-admin权限的用户身份登录。

直接镜像迁移
  • 您必须确保源集群的安全 OpenShift 镜像注册表已公开。

  • 您必须创建到已公开注册表的路由。

直接卷迁移
  • 如果您的集群使用代理,则必须配置 Stunnel TCP 代理。

内部镜像
  • 如果您的应用程序使用来自openshift命名空间的内部镜像,则必须确保目标集群上存在所需的镜像版本。

    您可以手动更新镜像流标签以在 OpenShift Container Platform 4.17 集群上使用已弃用的 OpenShift Container Platform 3 镜像。

集群
  • 源集群必须升级到最新的 MTC z 流版本。

  • 所有集群上的 MTC 版本必须相同。

网络
  • 集群可以彼此以及复制库之间进行无限制的网络访问。

  • 如果使用move复制持久卷,则集群必须能够无限制地访问远程卷。

  • 您必须在 OpenShift Container Platform 3 集群上启用以下端口:

    • 8443(API 服务器)

    • 443(路由)

    • 53(DNS)

  • 您必须在 OpenShift Container Platform 4 集群上启用以下端口:

    • 6443(API 服务器)

    • 443(路由)

    • 53(DNS)

  • 如果您使用 TLS,则必须在复制存储库上启用端口443

持久卷 (PV)
  • PV 必须有效。

  • PV 必须绑定到持久卷声明。

  • 如果您使用快照复制 PV,则适用以下附加先决条件:

    • 云提供商必须支持快照。

    • PV 必须使用相同的云提供商。

    • PV 必须位于相同的地理区域。

    • PV 必须具有相同的存储类。

迁移先决条件的附加资源

使用 MTC Web 控制台迁移您的应用程序

您可以使用 MTC Web 控制台配置集群和复制存储库。然后,您可以创建和运行迁移计划。

启动 MTC Web 控制台

您可以在浏览器中启动容器迁移工具包 (MTC) Web 控制台。

先决条件
  • MTC Web 控制台必须能够访问 OpenShift Container Platform Web 控制台。

  • MTC Web 控制台必须能够访问 OAuth 授权服务器。

步骤
  1. 登录到您已安装 MTC 的 OpenShift Container Platform 集群。

  2. 通过输入以下命令获取 MTC Web 控制台 URL:

    $ oc get -n openshift-migration route/migration -o go-template='https://{{ .spec.host }}'

    输出类似于以下内容:https://migration-openshift-migration.apps.cluster.openshift.com

  3. 启动浏览器并导航到 MTC Web 控制台。

    如果您尝试在安装容器迁移工具包运算符后立即访问 MTC Web 控制台,则控制台可能无法加载,因为运算符仍在配置集群。请等待几分钟然后重试。

  4. 如果您使用自签名 CA 证书,系统将提示您接受源集群 API 服务器的 CA 证书。网页将指导您完成接受其余证书的过程。

  5. 使用您的 OpenShift Container Platform **用户名** 和 **密码** 登录。

向 MTC Web 控制台添加集群

您可以向容器迁移工具包 (MTC) Web 控制台添加集群。

先决条件
  • 必须在源集群上配置跨源资源共享。

  • 如果您使用 Azure 快照复制数据:

    • 您必须指定集群的 Azure 资源组名称。

    • 集群必须位于同一 Azure 资源组中。

    • 集群必须位于同一地理位置。

  • 如果您使用直接镜像迁移,则必须向源集群的镜像注册表公开路由。

步骤
  1. 登录到集群。

  2. 获取migration-controller服务帐户令牌

    $ oc create token migration-controller -n openshift-migration
    示例输出
    eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtaWciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoibWlnLXRva2VuLWs4dDJyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Im1pZyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YjFiYWMwLWMxYmYtMTFlOS05Y2NiLTAyOWRmODYwYjMwOCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDptaWc6bWlnIn0.xqeeAINK7UXpdRqAtOj70qhBJPeMwmgLomV9iFxr5RoqUgKchZRG2J2rkqmPm6vr7K-cm7ibD1IBpdQJCcVDuoHYsFgV4mp9vgOfn9osSDp2TGikwNz4Az95e81xnjVUmzh-NjDsEpw71DH92iHV_xt2sTwtzftS49LpPW2LjrV0evtNBP_t_RfskdArt5VSv25eORl7zScqfe1CiMkcVbf2UqACQjo3LbkpfN26HAioO2oH0ECPiRzT0Xyh-KwFutJLS9Xgghyw-LD9kPKcE_xbbJ9Y4Rqajh7WdPYuB0Jd9DPVrslmzK-F6cgHHYoZEv0SvLQi-PO0rpDrcjOEQQ
  3. 登录到 MTC Web 控制台。

  4. 在 MTC Web 控制台中,单击**集群**。

  5. 单击**添加集群**。

  6. 填写以下字段:

    • **集群名称**:集群名称可以包含小写字母 (a-z) 和数字 (0-9)。它不能包含空格或国际字符。

    • **URL**:指定 API 服务器 URL,例如https://<www.example.com>:8443

    • **服务帐户令牌**:粘贴migration-controller服务帐户令牌。

    • **公开到镜像注册表的路由主机名**:如果您使用直接镜像迁移,请指定指向源集群镜像注册表的公开路由。

      要创建路由,请运行以下命令:

      • 对于 OpenShift Container Platform 3

        $ oc create route passthrough --service=docker-registry --port=5000 -n default
      • 对于 OpenShift Container Platform 4

        $ oc create route passthrough --service=image-registry --port=5000 -n openshift-image-registry
    • **Azure 集群**:如果您使用 Azure 快照复制数据,则必须选择此选项。

      • **Azure 资源组**:如果选择了**Azure 集群**,则会显示此字段。指定 Azure 资源组。

        在 Microsoft Azure 上创建 {OCP} 集群时,会创建一个 Azure 资源组来包含与集群关联的所有资源。在 Azure CLI 中,您可以通过发出以下命令来显示所有资源组:

        $ az group list

        与 OpenShift Container Platform 集群关联的ResourceGroups已标记,其中sample-rg-name是您将提取并提供给 UI 的值。

        {
          "id": "/subscriptions/...//resourceGroups/sample-rg-name",
          "location": "centralus",
          "name": "...",
          "properties": {
            "provisioningState": "Succeeded"
          },
          "tags": {
            "kubernetes.io_cluster.sample-ld57c": "owned",
            "openshift_creationDate": "2019-10-25T23:28:57.988208+00:00"
          },
          "type": "Microsoft.Resources/resourceGroups"
        },

        此信息也可从Azure 门户的**资源组**栏中获得。

    • **需要 SSL 验证**:可选:选择此选项以验证与集群的安全套接字层 (SSL) 连接。

    • **CA 证书包文件**:如果选择了**需要 SSL 验证**,则会显示此字段。如果您为自签名证书创建了自定义 CA 证书包文件,请单击**浏览**,选择 CA 证书包文件并上传。

  7. 单击**添加集群**。

    集群将显示在**集群**列表中。

向 MTC Web 控制台添加复制存储库

您可以将对象存储作为复制存储库添加到容器迁移工具包 (MTC) Web 控制台。

MTC 支持以下存储提供商:

  • Amazon Web Services (AWS) S3

  • 多云对象网关 (MCG)

  • 通用 S3 对象存储,例如 Minio 或 Ceph S3

  • Google Cloud Provider (GCP)

  • Microsoft Azure Blob

先决条件
  • 您必须将对象存储配置为复制存储库。

步骤
  1. 在 MTC Web 控制台中,单击**复制存储库**。

  2. 单击**添加存储库**。

  3. 选择**存储提供商类型**并填写以下字段:

    • 对于 S3 提供商,包括 AWS 和 MCG,选择**AWS**

      • **复制存储库名称**:在 MTC Web 控制台中指定复制存储库名称。

      • **S3 桶名称**:指定 S3 桶的名称。

      • **S3 桶区域**:指定 S3 桶区域。对于 AWS S3 **必需**。对于某些 S3 提供商 **可选**。请查看 S3 提供商的产品文档以了解预期值。

      • **S3 端点**:指定 S3 服务的 URL,而不是桶,例如https://<s3-storage.apps.cluster.com>。对于通用 S3 提供商 **必需**。必须使用https://前缀。

      • **S3 提供商访问密钥**:为 AWS 指定<AWS_SECRET_ACCESS_KEY>,或为 MCG 和其他 S3 提供商指定 S3 提供商访问密钥。

      • **S3 提供商密钥访问密钥**:为 AWS 指定<AWS_ACCESS_KEY_ID>,或为 MCG 和其他 S3 提供商指定 S3 提供商密钥访问密钥。

      • **需要 SSL 验证**:如果您使用的是通用 S3 提供商,请清除此复选框。

      • 如果您为自签名证书创建了自定义 CA 证书包,请单击**浏览**并浏览到 Base64 编码的文件。

    • GCP:

      • **复制存储库名称**:在 MTC Web 控制台中指定复制存储库名称。

      • **GCP 桶名称**:指定 GCP 桶的名称。

      • **GCP 凭据 JSON 块**:指定credentials-velero文件中的字符串。

    • Azure:

      • **复制存储库名称**:在 MTC Web 控制台中指定复制存储库名称。

      • **Azure 资源组**:指定 Azure Blob 存储的资源组。

      • **Azure 存储帐户名称**:指定 Azure Blob 存储帐户名称。

      • **Azure 凭据 - INI 文件内容**:指定credentials-velero文件中的字符串。

  4. 单击**添加存储库**并等待连接验证。

  5. 单击**关闭**。

    新存储库将显示在**复制存储库**列表中。

在 MTC Web 控制台中创建迁移计划

您可以在容器迁移工具包 (MTC) Web 控制台中创建迁移计划。

先决条件
  • 您必须以所有集群上的cluster-admin权限的用户身份登录。

  • 必须确保所有集群都安装了相同版本的 MTC。

  • 必须将集群和复制存储库添加到 MTC Web 控制台。

  • 如果您要使用移动数据复制方法迁移持久卷 (PV),则源集群和目标集群必须与远程卷具有不间断的网络访问。

  • 如果您要使用直接镜像迁移,则必须指定源集群镜像注册表的公开路由。这可以通过使用 MTC Web 控制台或更新MigCluster自定义资源清单来完成。

步骤
  1. 在 MTC Web 控制台中,单击**迁移计划**。

  2. 单击**添加迁移计划**。

  3. 输入**计划名称**。

    迁移计划名称不得超过 253 个小写字母数字字符 (a-z, 0-9),并且不得包含空格或下划线 (_)。

  4. 选择**源集群**、**目标集群**和**存储库**。

  5. 单击**下一步**。

  6. 选择要迁移的项目。

  7. 可选:单击项目旁边的编辑图标以更改目标命名空间。

  8. 单击**下一步**。

  9. 为每个 PV 选择**迁移类型**

    • **复制**选项会将数据从源集群的 PV 复制到复制存储库,然后在目标集群中使用具有类似特征的新创建的 PV 恢复数据。

    • **移动**选项会从源集群卸载远程卷(例如,NFS),在指向远程卷的目标集群上创建 PV 资源,然后将远程卷挂载到目标集群。目标集群上运行的应用程序使用与源集群使用的相同的远程卷。

  10. 单击**下一步**。

  11. 为每个 PV 选择**复制方法**

    • **快照复制**使用云提供商的快照功能备份和还原数据。它比**文件系统复制**快得多。

    • **文件系统复制**备份源集群上的文件并在目标集群上还原它们。

      直接卷迁移需要文件系统复制方法。

  12. 您可以选择**验证复制**以验证使用**文件系统复制**迁移的数据。通过为每个源文件生成校验和并在还原后检查校验和来验证数据。数据验证会显著降低性能。

  13. 选择**目标存储类**。

    如果您选择了**文件系统复制**,则可以更改目标存储类。

  14. 单击**下一步**。

  15. 在**迁移选项**页面上,如果您为源集群指定了公开的镜像注册表路由,则会选择**直接镜像迁移**选项。如果您使用**文件系统复制**迁移数据,则会选择**直接 PV 迁移**选项。

    直接迁移选项会直接将镜像和文件从源集群复制到目标集群。此选项比将镜像和文件从源集群复制到复制存储库,然后再从复制存储库复制到目标集群快得多。

  16. 单击**下一步**。

  17. 可选:单击**添加 Hook** 将 Hook 添加到迁移计划。

    Hook 运行自定义代码。您可以向单个迁移计划添加最多四个 Hook。每个 Hook 在不同的迁移步骤中运行。

    1. 输入要在 Web 控制台中显示的 Hook 名称。

    2. 如果 Hook 是 Ansible playbook,请选择**Ansible playbook** 并单击**浏览**上传 playbook 或将 playbook 的内容粘贴到字段中。

    3. 可选:如果您不使用默认的 Hook 镜像,请指定 Ansible 运行时镜像。

    4. 如果 Hook 不是 Ansible playbook,请选择**自定义容器镜像**并指定镜像名称和路径。

      自定义容器镜像可以包含 Ansible playbook。

    5. 选择**源集群**或**目标集群**。

    6. 输入**服务帐户名称**和**服务帐户命名空间**。

    7. 选择 Hook 的迁移步骤

      • preBackup:在源集群上备份应用程序工作负载之前

      • postBackup:在源集群上备份应用程序工作负载之后

      • preRestore:在目标集群上还原应用程序工作负载之前

      • postRestore:在目标集群上还原应用程序工作负载之后

    8. 单击**添加**。

  18. 单击**完成**。

    迁移计划将显示在**迁移计划**列表中。

其他资源

在 MTC Web 控制台中运行迁移计划

您可以使用在容器迁移工具包 (MTC) Web 控制台中创建的迁移计划来迁移应用程序和数据。

在迁移过程中,MTC 将迁移的持久卷 (PV) 的回收策略设置为目标集群上的Retain

Backup 自定义资源包含一个PVOriginalReclaimPolicy注释,该注释指示原始回收策略。您可以手动还原迁移的 PV 的回收策略。

先决条件

MTC Web 控制台必须包含以下内容:

  • 处于就绪状态的源集群

  • 处于就绪状态的目标集群

  • 复制存储库

  • 有效的迁移计划

步骤
  1. 登录 MTC Web 控制台并单击**迁移计划**。

  2. 单击迁移计划旁边的选项菜单 kebab,然后在**迁移**下选择以下选项之一:

    • **分阶段迁移**在不停止应用程序的情况下将数据从源集群复制到目标集群。

    • **切换迁移**停止源集群上的事务并将资源移动到目标集群。

      可选:在**切换迁移**对话框中,您可以清除**在迁移期间停止源集群上的事务**复选框。

    • **状态迁移**复制选定的持久卷声明 (PVC)。

      不要使用状态迁移在集群之间迁移命名空间。请改用分阶段迁移或切换迁移。

      • 在**状态迁移**对话框中选择一个或多个 PVC,然后单击**迁移**。

  3. 迁移完成后,请在 OpenShift Container Platform Web 控制台中验证应用程序是否已成功迁移。

    1. 单击**主页** → **项目**。

    2. 单击已迁移的项目以查看其状态。

    3. 在**路由**部分,单击**位置**以验证应用程序是否正在运行(如果适用)。

    4. 单击**工作负载** → **Pod** 以验证 Pod 是否在已迁移的命名空间中运行。

    5. 单击**存储** → **持久卷**以验证已迁移的持久卷是否已正确预配。