OpenShift 4 - 用 MTC 将应用从 OpenShift 3 迁移至 OpenShift 4(附视频)

7 篇文章 0 订阅
4 篇文章 0 订阅

OpenShift 4.x HOL教程汇总
说明:本文已经在OpenShift 4.14环境中验证

什么是 MTC ?

红帽的容器迁移工具包(Migration Toolkit for Containers - MTC)可以在不同的 OpenShift Container Platform 集群之间以命名空间的粒度复制有状态应用工作负载。复制的应用资源包括这些应用运行相关的 Kubernetes 对象、镜像和应用使用的 PV 数据。

MTC 使用了开源项目 Velero 来实现在源和目标集群之间复制应用资源。在复制应用资源过程中,被复制的应用资源是存放在基于对象存储副本库中。对象存储将在间接迁移过程中用来复制 Image、PV 和 Kubernetes 对象,或在直接 PV 迁移或直接 Image 迁移过程中用来复制 Kubernetes 对象。
在这里插入图片描述
为了在源集群和目标集群之间迁移应用,需要将 MTC 运行在每个 OpenShift 集群上。可参见:《MTC 文档》已确认需要使用那个版本的 MTC Operator。

MTC 中有关应用迁移的概念

  • 间接迁移:使用 Restic 将 Image、PV 和 Kubernetes 对象先从源群集复制到副本库,再从副本复制到目标群集。
  • Direct volume migration - DVM:使用 Rsync 将 PV 直接从源群集复制到目标群集。
  • Direct image migration - DIM:将 Image 直接从源群集复制到目标群集。
  • Cutover migration:先停止源群集上的应用程序,再将其资源迁移到目标群集。
  • Stage migration:无需停止应用程序,只将数据复制到目标群集,不迁移应用的 Kubernetes 对象。
  • Host cluster:通常是目标集群,用来运行 migration-controller 和 web console。
  • Remote cluster:通常是源集群。远程群集需要一个公开的 Registry Route,用来接迁移映像。另外还需要有用来访问 migration-controller 服务账户的 Secret。
  • MTC web console 和 Migration Controller:运行在 Host cluster 之上用来运行 MTC 的控制台和控制器。缺省使用目标集群充当 Host cluster,但也可运行在独立集群或源集群之上。
    在这里插入图片描述

MTC 中的定制资源

MTC 使用以下几种 CR 定制资源完成应用资源的迁移:

  • MigCluster:定义集群的配置。
  • MigStorage:定义存储的配置。
  • MigPlan:定义迁移涉及的源和目标集群、副本库和命名空间等配置。
  • MigMigration:每次在源和目标集群之间执行迁移计划的动作。
  • Backup:当执行迁移计划时,在源集群中创建 Velero 的 Backup CR。
  • Restore:当执行迁移计划时,在目标集群中创建 Velero 的 Restore CR。
    在这里插入图片描述

准备对象存储

MTC 的 Replication Repository 可以使用以下对象存储:

  • Amazon Web Services (AWS) S3
  • Google Cloud Provider (GCP)
  • Microsoft Azure Generic
  • S3 object storage, MinIO 或 Ceph

请参考《OpenShift 4 - 部署运行 MinIO 对象存储》在 OpenShift 4 上部署 MinIO 环境。然后根据文档创建一个名为 ocp-migration-bucket 的 Bucket。

配置迁移源集群的环境

注意:本文以 OpenShift 3 为迁移的源集群。如果源集群是 OpenShift 4 的环境,可以参考下一章节先在 OpenShift 4 上安装 MTC Operator,然后使用缺省配置创建一个 MigrationController 对象即可。随后可继续完成本文的“部署 file-uploader 测试应用”等后续操作。

安装 MTC 运行环境

  1. 执行命令,根据 2 个 yaml文件创建 MTC 运行环境。
$ mkdir $HOME/mtc
$ sudo docker cp $(sudo docker create registry.redhat.io/rhmtc/openshift-migration-rhel7-operator:v1.3.1):/operator.yml $HOME/mtc
$ sudo docker cp $(sudo docker create registry.redhat.io/rhmtc/openshift-migration-rhel7-operator:v1.3.1):/controller-3.yml $HOME/mtc
$ oc create -f $HOME/mtc/operator.yml
$ oc create -f $HOME/mtc/controller-3.yml
  1. 查看部署的 Operator资源
$ oc get pods -n openshift-migration
NAME                                  READY     STATUS    RESTARTS   AGE
migration-operator-77d77fff48-28t9c   1/1       Running   0          1m
restic-b2k9z                          1/1       Running   0          31s
restic-c8hwm                          1/1       Running   0          31s
restic-gpnjz                          1/1       Running   0          31s
restic-nfqwd                          1/1       Running   0          31s
velero-585b8ddc7d-ftprk               1/1       Running   0          31s

部署 file-uploader 测试应用

  1. 在 OpenShift 3 的控制台先进入 “file-uploader” 项目,然后在 Service Catalog 中找到 “PHP”。然后根据下图创建 “file-uploader” 应用。
    其中 Git Repository - https://github.com/christianh814/openshift-php-upload-demo
    在这里插入图片描述
  2. 进入名为 “file-uploader” 的 Deployment ,然后查看 Configuration 栏目。在下图中修改 Replicas 数量,将其增加到 3 个。
    在这里插入图片描述
  3. 然后点击上图下方的 “Add Storage” 链接,在跳转的 “Add Storage” 页面中点击“Create Storage”。
    在这里插入图片描述
  4. 在“Create Storage”页面先创建一个名为 “file-uploader-vol-claim” 的 PVC,然后在 Deployment 中按照下图使用这个新建的 PVC。
    在这里插入图片描述
  5. 最后通过 Route 访问应用,然后上传一个图像。

查看集群配置

  1. 查到 ServiceAccount 中的 migration-controller 令牌。后面将使用 OCP3-TOKEN 引用这个令牌,并用来访问这个 OpenShift 3 集群。
$ oc sa get-token migration-controller -n openshift-migration
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJvcGVuc2hpZnQtbWlncmF0aW9uIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Im1pZ3JhdGlvbi1jb250cm9sbGVyLXRva2VuLTJmNmhrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Im1pZ3JhdGlvbi1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNmQyNmVjN2UtMWQzYS0xMWViLWI2ZjQtMTYzZjM1MzNlNTFmIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Om9wZW5zaGlmdC1taWdyYXRpb246bWlncmF0aW9uLWNvbnRyb2xsZXIifQ.Nf134JLn9cMmNORxZC8ilJN9W43sj0_tj_B5c3Bf6l-Z4mcdXnjgR1NLH11qqJc7-9H9bgTfm8lza0kQZgEcsNIY47nxPoezkKGoOXVKEpTsaP_inykHRr6iqUuZgKiCu9I0n8st27dG0VYE8bpboPOlO8iITTH7VHbLVnWEKgk-_5CKnSmycsgFoqrfWYSEi9qbnxi2PkrQ3wLhic8RmItvCgpbvr62eV2z5Q82Gxtf9x4-RPLK5_vFtKHvK8vXjs2mw-jihM_LBuxRLbQCI64_F5MRUowFp8zUIaAuqCDtUVAPukJq6dt91tPTXg_YuSZGHV5s_NVeSIb1PDqUWg
  1. 获得 OpenShift 3 集群的 API 地址,后面将使用 OCP3-API 引用这个 API 地址。
$ oc whoami --show-server
https://master.bdvwt.sandbox725.opentlc.com:443

配置迁移目标集群的环境

安装 MTC 运行环境

  1. 使用缺省配置安装 Migration Toolkit for Containers Operator。注意:缺省会安装到 openshift-migration 项目中。
    在这里插入图片描述
  2. 使用缺省配置创建一个 MigrationController 对象,创建过程还会自动创建一个 MigCluster 对象,并且安装 OADP Operator。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 查看运行在 “openshift-migration” 项目中的 Pod,还可在 “开发者” 视图的 “拓扑” 中可以查看部署资源的状态,或查看 “migration-controller” 的 Resources 栏目中的资源状态。
$ oc get pods -n openshift-migration
NAME                                                READY   STATUS    RESTARTS   AGE
migration-controller-5bc4bc78b9-pbdwn               2/2     Running   0          7m20s
migration-log-reader-6f8bfbdb99-2tjwb               2/2     Running   0          7m19s
migration-operator-5bcf744cc7-mz2gm                 1/1     Running   0          9m25s
migration-ui-7d687d9476-xqc6t                       1/1     Running   0          7m13s
node-agent-mzkfq                                    1/1     Running   0          7m40s
openshift-adp-controller-manager-7c67d4554c-5h68m   1/1     Running   0          9m28s
velero-6dc746b548-4whf2                             1/1     Running   0          7m40s

在这里插入图片描述

  1. 查看名为 “migration ” 的路由地址,然后登录该地址后可以看到 Migration Toolkit for Containers 的控制台。
$ oc get route migration -n openshift-migration  -o jsonpath=https://{.spec.host}
https://migration-openshift-migration.apps.cluster-n8rwq.n8rwq.sandbox1048.opentlc.com

在这里插入图片描述

添加 Replication Repository (MigStorage)

  1. 进入 MTC 控制台的 Replication repositories 菜单,然后点击 “Add replication repository” 。
    在这里插入图片描述
  2. 在 “Add replication repository” 窗口中按照以下填写配置,最后点击 “Add Repository” 会显示 “Connection successful”。
    Storage provider type : S3
    Replication repository name:ocp-migration-repository
    S3 bucket name:ocp-migration-bucket
    S3 endpoint:Minio 服务的路由地址
    S3 provider access key:minio
    S3 provider secret access key:minio123
    在这里插入图片描述
  3. 完成后可以在 OpenShift 控制台的 MTC Operator 中查找创建的 MigStore 对象。
    在这里插入图片描述

添加迁移的 OpenShift 集群

  1. 进入 MTC 控制台中的 “Clusters” 菜单,然后点击 “Add cluster”。在 “Add cluster” 窗口提供以下配置:
    Cluster name:ocp3
    URL:https://OCP3-API
    Service account token:OCP3-TOKEN
    然后点击 “Add cluster” 按钮,成功后会显示“Connection successful”。
    在这里插入图片描述
  2. 完成后 Clusters 中的 “ocp3” 是迁移的源集群,“host” 是迁移的目标集群。
    在这里插入图片描述

添加迁移计划

  1. 进入 MTC 控制台的 Migration plan,然后点击 “Add migration plan”。
  2. 在 “Create a migration plan” 窗口的 General 步骤按照下图设置:
    Plan name:file-uploader-mig-plan
    Source cluster:ocp3
    Target cluster:host
    Repository:ocp-migration-repository
    在这里插入图片描述
  3. 在 Namespaces 步骤选中 “file-uploader”。
  4. 在 Persistent volumes 步骤的 “Migration type” 选择 “Copy”。
    在这里插入图片描述
  5. 在Copy options 步骤的 “Copy method” 选择 “Filesystem copy”,然后在 Target storage class 中选择一个目标集群的 StoreClass。
    在这里插入图片描述
  6. 在 5、6 步骤接受缺省即可完成。

应用迁移和回退

执行迁移计划

  1. 在 file-uploader-migration-plan 迁移计划的下列菜单中选择 “Cutover”。注意:如果是 Stage,则只迁移 PV 数据,而不迁移 Kubernetes 对象。
    在这里插入图片描述
  2. 在弹出的窗口中点击 “Migrate”。
  3. 进入上图 “Migrations” 列的链接,查看迁移的执行进度,知道全部执行完。
    在这里插入图片描述
  4. 在目标 OpenShift 4 集群中确认已经有 file-uploader 项目,并且file-uploader应用已经可以访问,并且已经有前面上传的文件。
    在这里插入图片描述
  5. 确认此时在迁移源 OpenShift 3 集群的 file-uploader 应用中的 Pod 数量已经降为 “0”,
    在这里插入图片描述
  6. 确认迁移目标 OpenShift 4 集群的 file-uploader 应用中的 Pod 数量为 “3,且应用中已包含测试图片,这说明 PV 也迁移成功。

回退迁移

  1. 在 file-uploader-migration-plan 迁移计划的下列菜单中选择 “Rollback”。
  2. 查看执行进入直到完成。
  3. 确认迁移目标 OpenShift 4 的 file-uploader 应用已经不能访问,而迁移源 OpenShift 3 的 file-uploader 应用已经恢复访问了。

其他功能

查看迁移过程涉及到哪些对象

可以查看 MigAnalytic 对象,它记录了迁移过程涉及到哪些类型的对象被迁移了。

不迁移某些特定资源

可以定制 MigrationController 对象,以定义默认对那些资源进行迁移。

apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
  name: migration-controller
  namespace: openshift-migration
spec:
  disable_image_migration: true
  disable_pv_migration: true
  ...
  excluded_resources:
  - imagetags
  - templateinstances
  - clusterserviceversions
  - packagemanifests
  - subscriptions
  - servicebrokers
  - servicebindings
  - serviceclasses
  - serviceinstances
  - serviceplans
  - operatorgroups
  - events

演示视频

视频

参考

https://docs.openshift.com/container-platform/4.15/migration_toolkit_for_containers/about-mtc.html
https://docs.openshift.com/container-platform/4.15/migration_toolkit_for_containers/advanced-migration-options-mtc.html
https://docs.openshift.com/container-platform/4.15/migrating_from_ocp_3_to_4/installing-3-4.html
https://github.com/migtools/labs/blob/master/mtc/bookbag/workshop/content/Intro.adoc
https://developer.ibm.com/tutorials/migrate-kubernetes-cluster-openshift-konveyor-crane/
https://redhat-cop.github.io/openshift-migration-best-practices/
https://github.com/konveyor/labs/tree/master/mtc
https://github.com/konveyor/mig-demo-apps
https://www.konveyor.io/blog/direct-migration/
https://access.redhat.com/articles/5064151
https://www.redhat.com/it/blog/a-guide-to-migrating-workloads-from-ocp3-to-red-hat-openshift-service-on-aws-rosa-using-the-migration-toolkit-for-containers-mtc

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值