《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 运行环境
- 执行命令,根据 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
- 查看部署的 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 测试应用
- 在 OpenShift 3 的控制台先进入 “file-uploader” 项目,然后在 Service Catalog 中找到 “PHP”。然后根据下图创建 “file-uploader” 应用。
其中 Git Repository - https://github.com/christianh814/openshift-php-upload-demo
- 进入名为 “file-uploader” 的 Deployment ,然后查看 Configuration 栏目。在下图中修改 Replicas 数量,将其增加到 3 个。
- 然后点击上图下方的 “Add Storage” 链接,在跳转的 “Add Storage” 页面中点击“Create Storage”。
- 在“Create Storage”页面先创建一个名为 “file-uploader-vol-claim” 的 PVC,然后在 Deployment 中按照下图使用这个新建的 PVC。
- 最后通过 Route 访问应用,然后上传一个图像。
查看集群配置
- 查到 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
- 获得 OpenShift 3 集群的 API 地址,后面将使用 OCP3-API 引用这个 API 地址。
$ oc whoami --show-server
https://master.bdvwt.sandbox725.opentlc.com:443
配置迁移目标集群的环境
安装 MTC 运行环境
- 使用缺省配置安装 Migration Toolkit for Containers Operator。注意:缺省会安装到 openshift-migration 项目中。
- 使用缺省配置创建一个 MigrationController 对象,创建过程还会自动创建一个 MigCluster 对象,并且安装 OADP Operator。
- 查看运行在 “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
- 查看名为 “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)
- 进入 MTC 控制台的 Replication repositories 菜单,然后点击 “Add replication repository” 。
- 在 “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
- 完成后可以在 OpenShift 控制台的 MTC Operator 中查找创建的 MigStore 对象。
添加迁移的 OpenShift 集群
- 进入 MTC 控制台中的 “Clusters” 菜单,然后点击 “Add cluster”。在 “Add cluster” 窗口提供以下配置:
Cluster name:ocp3
URL:https://OCP3-API
Service account token:OCP3-TOKEN
然后点击 “Add cluster” 按钮,成功后会显示“Connection successful”。
- 完成后 Clusters 中的 “ocp3” 是迁移的源集群,“host” 是迁移的目标集群。
添加迁移计划
- 进入 MTC 控制台的 Migration plan,然后点击 “Add migration plan”。
- 在 “Create a migration plan” 窗口的 General 步骤按照下图设置:
Plan name:file-uploader-mig-plan
Source cluster:ocp3
Target cluster:host
Repository:ocp-migration-repository
- 在 Namespaces 步骤选中 “file-uploader”。
- 在 Persistent volumes 步骤的 “Migration type” 选择 “Copy”。
- 在Copy options 步骤的 “Copy method” 选择 “Filesystem copy”,然后在 Target storage class 中选择一个目标集群的 StoreClass。
- 在 5、6 步骤接受缺省即可完成。
应用迁移和回退
执行迁移计划
- 在 file-uploader-migration-plan 迁移计划的下列菜单中选择 “Cutover”。注意:如果是 Stage,则只迁移 PV 数据,而不迁移 Kubernetes 对象。
- 在弹出的窗口中点击 “Migrate”。
- 进入上图 “Migrations” 列的链接,查看迁移的执行进度,知道全部执行完。
- 在目标 OpenShift 4 集群中确认已经有 file-uploader 项目,并且file-uploader应用已经可以访问,并且已经有前面上传的文件。
- 确认此时在迁移源 OpenShift 3 集群的 file-uploader 应用中的 Pod 数量已经降为 “0”,
- 确认迁移目标 OpenShift 4 集群的 file-uploader 应用中的 Pod 数量为 “3,且应用中已包含测试图片,这说明 PV 也迁移成功。
回退迁移
- 在 file-uploader-migration-plan 迁移计划的下列菜单中选择 “Rollback”。
- 查看执行进入直到完成。
- 确认迁移目标 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