我尝试运行了OpenShift集群应用迁移工具的事情

这篇文章是2019年的OpenShift Advent Calendar中的第六天。

首先

从稍微晚了一点的日期2019年10月31日起,《OpenShift容器平台(OCP)4.2》推出了Cluster Application Migration(CAM)工具的GA(通用可用性)。

由于OCP 4与OCP 3在架构上发生了重大改变,因此无法从OCP 3直接升级到OCP 4。因此,提供了以下两种迁移工具:

    • Control Plane Migration Assistant (CPMA)

 

    Cluster Application Migration (CAM) tool

在本文中,我想介绍一下在OCP 3集群上进行应用程序迁移的Cluster Application Migration (CAM)工具。

集群应用迁移(CAM)工具是什么?

群集应用迁移(CAM)工具是一个基于开源项目Velero和Restic的工具,用于在OCP上进行应用程序迁移。截至本文撰写时(2019年12月),CAM工具支持从OCP 3.7及以上版本迁移到OCP 4.2的应用程序迁移。

集群应用迁移工具的架构如下。

スクリーンショット 2019-11-29 10.37.05.png

Velero可以安装在迁移源和目标的OCP集群上,通过Amazon S3兼容的对象存储Replication repository,在PV(持久卷)中迁移数据和应用容器镜像等。

尝试运行 Cluster Application Migration (CAM) 工具。

我想要边运行 Cluster Application Migration 工具,边进行解释。

迁移目标应用程序

本示例中,我们将使用“Node.js + MongoDB”模板创建一个简单的样本应用程序,在“migration-test”项目中进行迁移。


$ oc get all -n migration-test
NAME                                  READY     STATUS      RESTARTS   AGE
pod/mongodb-1-qvp9q                   1/1       Running     0          13m
pod/nodejs-mongo-persistent-1-6rvb6   1/1       Running     0          11m
pod/nodejs-mongo-persistent-1-build   0/1       Completed   0          13m

NAME                                              DESIRED   CURRENT   READY     AGE
replicationcontroller/mongodb-1                   1         1         1         13m
replicationcontroller/nodejs-mongo-persistent-1   1         1         1         11m

NAME                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
service/mongodb                   ClusterIP   172.30.201.103   <none>        27017/TCP   13m
service/nodejs-mongo-persistent   ClusterIP   172.30.99.50     <none>        8080/TCP    13m

NAME                                                         REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/mongodb                   1          1         1         config,image(mongodb:3.4)
deploymentconfig.apps.openshift.io/nodejs-mongo-persistent   1          1         1         config,image(nodejs-mongo-persistent:latest)

NAME                                                     TYPE      FROM      LATEST
buildconfig.build.openshift.io/nodejs-mongo-persistent   Source    Git       1

NAME                                                 TYPE      FROM          STATUS     STARTED          DURATION
build.build.openshift.io/nodejs-mongo-persistent-1   Source    Git@e59fe75   Complete   13 minutes ago   2m21s

NAME                                                     DOCKER REPO                                                               TAGS      UPDATED
imagestream.image.openshift.io/nodejs-mongo-persistent   docker-registry.default.svc:5000/migration-test/nodejs-mongo-persistent   latest    11 minutes ago

NAME                                               HOST/PORT                                                              PATH      SERVICES                  PORT      TERMINATION   WILDCARD
route.route.openshift.io/nodejs-mongo-persistent   nodejs-mongo-persistent-migration-test.apps.GUID.example.opentlc.com             nodejs-mongo-persistent   <all>                   None

前提条件 tí

为了将应用程序从 OCP 3 迁移到 OCP 4 群集,需要事先满足以下前提条件。

    • マイグレーション元/先の OCP クラスタに対して cluster-admin 権限を持っていること

 

    • OCP 3 クラスタへの操作のため docker (もしくは podman) がインストールされていること

 

    • Replication repository に利用するため Amazon S3 互換のオブジェクトストレージが用意されていること

 

    マイグレーション元の OCP クラスタにおいて古いバージョンの ImageStream (nodejs:6 など) を利用している場合、マイグレーション先の OCP クラスタに対して ImageStream が事前に追加されていること

请在 OCP 3 迁移到 OCP 4 的过程中,除上述外,还需考虑到架构方面的变化。请查看以下的网址,了解所需考虑的要点。

1.2.2. 迁移考虑事项
https://access.redhat.com/documentation/en-us/openshift_container_platform/4.2/html-single/migration/index#migration-considerations

1.2.2. 迁移的考虑事项

CAM操作员的安装

在 Cluster Application Migration 工具中,需要为每个迁移源/目标的 OCP 集群安装 CAM Operator。

在OCP 3集群中安装CAM运算符

首先,执行以下命令以登录到Red Hat容器注册表。

# docker login registry.redhat.io

接下来,通过执行以下两个命令,下载安装CAM操作员所需的清单文件。

# docker cp $(docker create registry.redhat.io/rhcam-1-0/openshift-migration-rhel7-operator:v1.0):/operator.yml ./
# docker cp $(docker create registry.redhat.io/rhcam-1-0/openshift-migration-rhel7-operator:v1.0):/controller-3.yml ./

从已下载的清单文件中生成CAM操作员的自定义资源。

$ oc create -f operator.yml 
namespace/openshift-migration created
rolebinding.rbac.authorization.k8s.io/system:deployers created
rolebinding.rbac.authorization.k8s.io/system:image-builders created
rolebinding.rbac.authorization.k8s.io/system:image-pullers created
serviceaccount/migration-operator created
customresourcedefinition.apiextensions.k8s.io/migrationcontrollers.migration.openshift.io created
role.rbac.authorization.k8s.io/migration-operator created
rolebinding.rbac.authorization.k8s.io/migration-operator created
clusterrolebinding.rbac.authorization.k8s.io/migration-operator created
deployment.apps/migration-operator created

$ oc create -f controller-3.yml 
migrationcontroller.migration.openshift.io/migration-controller created

通过以下命令可以确认CAM操作员已成功安装到OCP 3集群中,完成CAM操作员的安装。

$ oc get po -n openshift-migration
NAME                                  READY     STATUS    RESTARTS   AGE
migration-operator-69d58b9796-qznlz   2/2       Running   0          1m
restic-2lw8h                          1/1       Running   0          1m
restic-2qv2r                          1/1       Running   0          1m
restic-5nd9c                          1/1       Running   0          1m
restic-65xhr                          1/1       Running   0          1m
restic-67kgb                          1/1       Running   0          1m
restic-jzbrn                          1/1       Running   0          1m
restic-kcp4c                          1/1       Running   0          1m
restic-vnf2d                          1/1       Running   0          1m
velero-d5c888f7d-nvtjh                1/1       Running   0          1m

在迁移至 OCP 4.2 集群的目标位置安装 CAM Operator。

您可以从OperatorHub安装CAM Operator到OCP 4集群的迁移目标。

首先,从Web控制台的Administration -> Namespaces中选择「Create Namespace」按钮。在Name字段中输入”openshift-migration”,然后点击「Create」按钮,即可创建用于安装CAM Operator的Namespace。

接下来,从“操作员”->“操作员中心”中,将筛选器设置为“集群应用迁移操作员”,然后选择显示的“集群应用迁移操作员”。

スクリーンショット 2019-11-29 12.46.43.png

点击「安装」按钮,在“创建操作员订阅”页面上,按下默认设置的「订阅」按钮。

スクリーンショット 2019-11-29 12.48.41.png

当画面显示后,点击提供的API列表中的“查看更多12个…”链接。然后从“创建新”按钮中选择“迁移控制器”。

スクリーンショット 2019-11-29 12.53.19.png

在显示“创建迁移控制器”界面后,请点击“创建”按钮。

スクリーンショット 2019-11-29 13.00.58.png

如果所有的Pod都已经处于Running状态,那么CAM Operator的安装就已经完成了。

在OCP 3集群中添加CORS(跨源资源共享)的配置

为了允许 OCP 4 集群上的 Cluster Application Migration 工具连接到 OCP 3 的 API 服务器,需要在 OCP 3 集群上添加跨域资源共享(CORS)配置。

首先,在OCP 4集群的迁移目标上,使用以下命令生成CORS配置内容。

$ oc get -n openshift-migration route/migration -o go-template='(?i)//{{ .spec.host }}(:|\z){{ println }}' | sed 's,\.,\\.,g'
(?i)//migration-openshift-migration\.apps\.cluster-GUID\.sandboxXXXX\.opentlc\.com(:|\z)

然后,对来自迁移源OCP 3集群的每个Master节点的/etc/origin/master/master-config.yaml文件,使用上述命令获取的字符串添加到corsAllowedOrigins中。

(省略)
corsAllowedOrigins:
- (?i)//127\.0\.0\.1(:|\z)
- (?i)//localhost(:|\z)
- (?i)//192\.168\.0\.66(:|\z)
- (?i)//172\.30\.0\.1(:|\z)
- (?i)//kubernetes\.default(:|\z)
- (?i)//kubernetes\.default\.svc\.cluster\.local(:|\z)
- (?i)//kubernetes(:|\z)
- (?i)//openshift\.default(:|\z)
- (?i)//loadbalancer\.d6bb\.internal(:|\z)
- (?i)//openshift\.default\.svc(:|\z)
- (?i)//loadbalancer\.d6bb\.example\.opentlc\.com(:|\z)
- (?i)//master1\.d6bb\.internal(:|\z)
- (?i)//openshift\.default\.svc\.cluster\.local(:|\z)
- (?i)//kubernetes\.default\.svc(:|\z)
- (?i)//openshift(:|\z)
- (?i)//migration-openshift-migration\.apps\.cluster-GUID\.sandboxXXXX\.opentlc\.com(:|\z)
(省略)

为了启用CORS设置,通过以下命令重新启动OCP 3集群每个Master节点上的kubelet。

# /usr/local/bin/master-restart api
# /usr/local/bin/master-restart controllers

您可以通过执行以下命令示例并检查是否返回 HTTP 响应代码204来确认CORS是否已正确配置。

$ curl -v -k -X OPTIONS \
> "(OCP 3 クラスタの URL)/apis/migration.openshift.io/v1alpha1/namespaces/openshift-migration/migclusters" \
> -H "Access-Control-Request-Method: GET" \
> -H "Access-Control-Request-Headers: authorization" \
> -H "Origin: (OCP 4 クラスタ上の CAM Web コンソールの URL)" 

 (中略)

< HTTP/1.1 204 No Content
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-Requested-With, If-Modified-Since
< Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, PATCH
< Access-Control-Allow-Origin: https://migration-openshift-migration.apps.cluster-GUID.sandboxXXXX.opentlc.com
< Access-Control-Expose-Headers: Date
< Cache-Control: no-store
< Date: Thu, 28 Nov 2019 01:56:43 GMT
< 
* Connection #0 to host loadbalancer.GUID.example.opentlc.com left intact

使用CAM Web控制台操作

因为已经在此之前完成了 Cluster Application Migration 工具的安装和配置,所以接下来将解释 CAM Web 控制台的操作步骤。

在 OCP 3 集群中添加迁移源

在使用OCP 4集群时,通过执行以下命令并将结果中的URL复制到浏览器中,可以打开CAM Web控制台。

$ oc get route/migration -n openshift-migration -o go-template="{{.spec.host}}"
migration-openshift-migration.apps.cluster-GUID.sandboxXXXX.opentlc.com

请使用OCP 4集群的认证信息登录,屏幕上会显示登录界面。

接下来,为了向Cluster Application Migration tool添加OCP 3集群,需要在OCP 3集群上执行以下命令以获取令牌。

$ oc sa get-token mig -n openshift-migration

在CAM Web控制台中,依次点击”Clusters” -> “Add cluster”,然后输入以下数值,并点击”Add Cluster”按钮。

    • Cluster Name: (OCP 3 クラスタ名)

 

    • Url: (OCP 3 クラスタの URL)

 

    Service account token: (上記のコマンドにより取得したトークン)
スクリーンショット 2019-11-29 15.06.04.png

当显示出”连接成功”时,则表示从OCP 3集群的迁移源已经添加完成。

新增复制仓库

接下来,我们将添加一个复制存储库以迁移应用程序容器映像和PV(持久卷)中的数据。

在CAM Web控制台中,从Repositories -> Add repository,分别输入以下值,并点击”Add Repository”按钮。

    • Repository Name: (任意のレポジトリ名)

 

    • S3 Bucket Name: (Amazon S3 のバケット名)

 

    • S3 Bucket Region: (AWSのリージョン)

 

    • S3 Endpoint: (Amazon S3 のエンドポイントの URL)

 

    • S3 Provider Access Key: (AWSのアクセスキー)

 

    S3 Provider Secret Access Key: (AWSのシークレットアクセスキー)
スクリーンショット 2019-11-29 16.30.27.png

当显示出”连接成功”时,表示复制存储库的添加已完成。

放宽迁移计划的上限

一个迁移计划默认设置了以下上限值。

    • 10 namespaces

 

    • 100 Pods

 

    100 persistent volumes

如果想要在超过上述限制时进行迁移操作,需要在 OCP 4 集群中执行以下命令,并编辑 MigrationController 的自定义资源。

$ oc edit migrationcontroller -n openshift-migration

制定迁移计划

计划->添加计划后,将创建迁移计划。

请输入任意的迁移计划名称在计划名称一栏,并点击“下一步”按钮。

スクリーンショット 2019-11-29 15.23.59.png

在源集群中选择刚刚注册的 OCP 3 集群,并在复制存储库中选择刚刚注册的复制存储库,在目标集群中选择默认注册的”主机”。

スクリーンショット 2019-11-29 15.27.38.png

在本画面的底部,会显示一个选择迁移项目的页面,请选择迁移项目(例如:migration-test),然后点击“下一步”按钮。

スクリーンショット 2019-11-29 15.29.32.png

在显示迁移目标的持久卷 (PV) 后,选择 “Copy/Move” 中的任意一项,并按下 “下一步” 按钮。

スクリーンショット 2019-11-29 15.31.47.png

选择”复制/移动”是为了指定存储在PV(持久卷)中的数据迁移方式。如果选择”复制”,数据将被复制到复制存储库,并将数据复制到迁移到的OCP 4群集新创建的PV(持久卷)。相反,如果选择”移动”,PV(持久卷)将从迁移源OCP 3群集卸载,并在迁移到的OCP 4群集中使用相同的远程卷创建新的PV(持久卷)。

选择新创建的PV(持久化卷)的StorageClass,并点击“完成”按钮。

スクリーンショット 2019-11-29 18.31.06.png

这意味着迁移计划的创建已经完成,已经创建的迁移计划将显示在CAM Web控制台中,详见以下内容。

スクリーンショット 2019-11-29 15.39.51.png

进行迁移

因为到这里为止已经完全完成了迁移所需的设置,所以现在终于可以执行迁移了。

在 Cluster Application Migration 工具中,迁移的过程如下图所示。

スクリーンショット 2019-11-29 15.52.08.png

在“Stage”过程中,从迁移源OCP 3集群复制数据,此过程不会停止迁移源OCP 3集群。
在“Migrate”过程中,根据可选配置,将会停止迁移源OCP 3集群的应用程序,并执行将其迁移到目标OCP 4集群的操作。

在CAM Web控制台上,通过点击Plans中的“Stage”按钮,可以启动从OCP 3集群迁移数据的复制过程。

スクリーンショット 2019-11-29 16.02.29.png

当 “Last Status” 列显示 “Stage Succeeded” 时,点击 “Migrate” 按钮开始迁移至 OCP 4 集群。若想避免迁移期间停止迁移源 OCP 3 集群上的事务,请勾选 “Don’t halt transactions on the source while migrating”,然后点击 “Migrate” 按钮。

スクリーンショット 2019-11-29 16.22.05.png

当在“最新状态”栏中显示为“已关闭”时,表示迁移至 OCP 4 集群已完成。

スクリーンショット 2019-11-29 16.27.18.png

确认样本应用程序的迁移情况

请确认已经成功将基于 “Node.js + MongoDB” 模板的示例应用程序迁移到 OCP 4 集群上。

您可以通过以下命令确认目标示例应用已成功从OCP 4群集迁移。

$ oc get all,pv -n migration-test 
NAME                                   READY   STATUS      RESTARTS   AGE
pod/mongodb-1-7rrfx                    1/1     Running     0          127m
pod/mongodb-1-deploy                   0/1     Completed   0          127m
pod/nodejs-mongo-persistent-1-build    0/1     Completed   0          127m
pod/nodejs-mongo-persistent-1-deploy   0/1     Completed   0          127m
pod/nodejs-mongo-persistent-2-deploy   0/1     Completed   0          125m
pod/nodejs-mongo-persistent-2-svvsp    1/1     Running     0          125m

NAME                                              DESIRED   CURRENT   READY   AGE
replicationcontroller/mongodb-1                   1         1         1       127m
replicationcontroller/nodejs-mongo-persistent-1   0         0         0       127m
replicationcontroller/nodejs-mongo-persistent-2   1         1         1       125m

NAME                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
service/mongodb                   ClusterIP   172.30.135.243   <none>        27017/TCP   127m
service/nodejs-mongo-persistent   ClusterIP   172.30.252.153   <none>        8080/TCP    127m

NAME                                                         REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/mongodb                   1          1         1         config,image(mongodb:3.4)
deploymentconfig.apps.openshift.io/nodejs-mongo-persistent   2          1         1         config,image(nodejs-mongo-persistent:latest)

NAME                                                     TYPE     FROM   LATEST
buildconfig.build.openshift.io/nodejs-mongo-persistent   Source   Git    1

NAME                                                 TYPE     FROM          STATUS     STARTED       DURATION
build.build.openshift.io/nodejs-mongo-persistent-1   Source   Git@e59fe75   Complete   2 hours ago   1m42s

NAME                                                     IMAGE REPOSITORY                                                                          TAGS     UPDATED
imagestream.image.openshift.io/nodejs-mongo-persistent   image-registry.openshift-image-registry.svc:5000/migration-test/nodejs-mongo-persistent   latest   2 hours ago

NAME                                               HOST/PORT                                                                          PATH   SERVICES                  PORT    TERMINATION   WILDCARD
route.route.openshift.io/nodejs-mongo-persistent   nodejs-mongo-persistent-migration-test.apps.cluster-GUID.sandboxXXXX.opentlc.com          nodejs-mongo-persistent   <all>                 None

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   REASON   AGE
persistentvolume/pvc-a7259657-1276-11ea-88f6-0e2402e84846   1Gi        RWO            Delete           Bound    migration-test/mongodb   gp2                     148m

最后

本文介绍了Cluster Application Migration工具。有另外一个提供的迁移工具,名为”控制平面迁移助手(CPMA)”,据说在OpenShift Advent Calendar 2019中会有其他人撰写相应的文章。如果您对”控制平面迁移助手(CPMA)”感兴趣,也请查阅相关介绍文章。

请提供以下中国版的参考。

    • Migrating your applications to OpenShift 4

 

    Migrating from OpenShift Container Platform 3 to 4
广告
将在 10 秒后关闭
bannerAds