如何在两个OpenShift集群间迁移有状态应用(openshift,两个,何在,开发技术)

时间:2024-05-03 12:21:12 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :
Portworx Kubemotion:在OpenShift集群间迁移有状态应用
如何在两个OpenShift集群间迁移有状态应用
Portworx是一个支撑K8S有状态应用的持久存储和数据管理平台。通过Portworx,它为有状态应用提供了一个单一的数据管理层,从而用户可以在任何底层架构上运行类似数据库这样的有状态应用。
Kubemotion是Portworx的核心功能之一,发布在Portworx企业版2.0中。它赋能K8S用户在集群间迁移应用和数据、备份和恢复、以及做蓝绿部署。(https://docs.portworx.com/portworx-install-with-kubernetes/migration/kubemotion/)
下面我们介绍如何在红帽OpenShift集群之间,迁移有状态应用的持久卷和相关K8S资源。
背景
在企业客户中,一个常见的场景是:在一个云区域中运行研发测试环境,而在另一个云区域中运行生产环境。研发测试环境通常会选择距离开发团队比较近,以降低网络延迟,而生产环境则会选择离用户比较近。
K8S的无状态应用迁移相对比较容易,但迁移有状态应用是一个挑战。
在演示中,我们会在AWS位于美国东部(俄亥俄),和美国西部(俄勒冈)的两个数据中心的Openshift集群间,迁移K8S资源。美国东部区域(俄亥俄)部署的是研发测试环境,美国西部区域(俄勒冈)部署的是生产环境。在系统的测试环节完成后,开发团队将使用Portworx和Kubemotion,把存储卷和应用资源,从研发测试环境,迁移到生产环境中。

如何在两个OpenShift集群间迁移有状态应用

研发测试环境和生产环境
我们有两个红帽OpenShift集群,分别是研发测试环境、以及生产环境,位于AWS的两个不同区域上,两个环境都安装了最新版本的Portworx集群,并且正在运行。如何在两个OpenShift集群间迁移有状态应用如何在两个OpenShift集群间迁移有状态应用上面的OpenShift集群代表了运行在AWS东部区域(俄亥俄)的研发测试环境。

如何在两个OpenShift集群间迁移有状态应用

如何在两个OpenShift集群间迁移有状态应用

上面的OpenShift集群代表了运行在AWS西部区域(俄勒冈)的生产环境。
现在有一个基于LAMP的内容管理系统(CMS)运行在研发测试环境上,我们需要把它迁移到生产环境里。
研发测试环境里部署了MySQL和WordPress,它们都位于CMS命名空间里。
关于如何在OpenShift上配置高可用的WordPress,可以参考这里的文档。(https://www.portworx.com/run-multi-tenant-ha-wordpress-platform-red-hat-openshift/)如何在两个OpenShift集群间迁移有状态应用

Portworx存储集群支撑了附加在这些Pod上的持久卷。

如何在两个OpenShift集群间迁移有状态应用

下面的卷附加到了MySQL pod上。

如何在两个OpenShift集群间迁移有状态应用

对于WordPress CMS, 有个共享的Portworx卷附加到了Pod上。

如何在两个OpenShift集群间迁移有状态应用

配置好的应用,可以通过WordPress相关的服务来访问。

如何在两个OpenShift集群间迁移有状态应用如何在两个OpenShift集群间迁移有状态应用
准备源环境和目标环境
在我们迁移之前,我们需要配置源集群和目标集群。按照下面的步骤来准备相关的环境。
创建对象存储的访问身份验证我们需要在源集群和目标集群上都创建对象存储的访问身份验证信息。我们需要获得目标集群的UUID,它会被附加在访问身份的名称上。

为了完成这一步,你需要AWS账户的访问密钥和Secret密钥。如果你已经配置好了AWS CLI,可以在这里发现这些密钥。~/.aws/credentials

回到生产环境集群,运行下面的命令来复制UUID。

PX_POD=$(ocgetpods-lname=portworx-nkube-system-ojsonpath='{.items[0].metadata.name}')oc-n=kube-systemexec$PX_POD--/opt/pwx/bin/pxctlstatus

如何在两个OpenShift集群间迁移有状态应用

记下集群的UUID,放在一个安全的地方。

我们在生产环境内,来创建生产环境集群的身份验证信息。

oc-n=kube-systemexec$PX_POD--/opt/pwx/bin/pxctlcredentialscreate\ --providers3\ --s3-access-key\ --s3-secret-key\ --s3-regionap-southeast-1\ --s3-endpoints3.ap-southeast-1.amazonaws.comclusterPair_c02528e3-30b1-43e7-91c0-c26c111d57b3

确保身份验证信息的名称按照这样的格式:‘clusterPair_UUID’。

如何在两个OpenShift集群间迁移有状态应用回到研发测试集群,重复操作来创建身份验证信息。如何在两个OpenShift集群间迁移有状态应用
获取目标集群的Token
下一步是获取生产环境集群的Token,它会被用来创建集群配对的YAML文件。
到生产环境集群,运行下面的命令来访问Token。
PX_POD=$(ocgetpods-lname=portworx-nkube-system-ojsonpath='{.items[0].metadata.name}')oc-n=kube-systemexec$PX_POD--/opt/pwx/bin/pxctlclustertokenshow

如何在两个OpenShift集群间迁移有状态应用

记下集群Token,放置在一个安全的地方。
为Portworx服务获取负载均衡的端点
我们还需要生产环境集群上的,与Portworx服务关联的负载均衡的DNS名称。我们可以通过下面的命令得到。
ocdescribesvcportworx-service-nkube-system

如何在两个OpenShift集群间迁移有状态应用

到这里,你已经准备好下面的数据了:

1.目标集群的Token

2.指向Portworx服务的负载均衡的CNAME

创建集群配对参数

我们从生产环境(目标集群)来创建YAML文件。并且把它应用到研发测试环境(源集群)。

确保你在在生产环境中,运行下面的命令。

storkctlgenerateclusterpair-ncmsprodcluster>clusterpair.yaml

打开clusterpair.yaml,在选项中增加下面的细节信息。它们反映了目标集群里的负载均衡的IP地址或者DNS名称,以及与目标集群关联的Token。

如何在两个OpenShift集群间迁移有状态应用

为Kubemotion进行集群配对

通过为源集群配置配对参数,我们可以把集群进行配对。

我们回到源集群(研发测试环境),来进行集群配对。

ocapply-fclusterpair.yamlocgetclusterpair-ncms

如何在两个OpenShift集群间迁移有状态应用

<pre>oc getclusterpairs</pre> 的输出确认了配对已经成功。

验证配对状态

我们可以通过storkctlCLI来验证配对状态。确保存储的状态,和调度器的状态都是正常,没有错误。

storkctl-n=cmsgetclusterpair

如何在两个OpenShift集群间迁移有状态应用

我们验证了,源集群和目标集群已经配对成功。

现在我们开始迁移。

从源集群向目标集群迁移CMS应用

在研发测试环境下,通过下面的步骤开始CMS应用的迁移。

开始迁移

用下面的内容创建一个名为migration.yaml的YAML文件。

apiVersion:stork.libopenstorage.org/v1alpha1kind:Migrationmetadata:name:cmsmigrationnamespace:cmsspec:#ThisshouldbethenameoftheclusterpaircreatedaboveclusterPair:prodcluster#IfsettofalsethiswillmigrateonlythePortworxvolumes.NoPVCs,apps,etcwillbemigratedincludeResources:true#Ifsettofalse,thedeploymentsandstatefulsetreplicaswillbesetto0onthedestination.#Therewillbeanannotationwith"stork.openstorage.org/migrationReplicas"onthedestinationtostorethereplicacountfromthesource.startApplications:true#Listofnamespacestomigratenamespaces:-cms

这里包括一些很重要的信息,例如集群配对的名称、迁移中包括的命名空间,需要被迁移的资源类型。

把YAML文件提交到研发测试集群,来开始迁移。

ocapply-fmigration.yamlmigration.stork.libopenstorage.org/cmsmigrationcreated

监控迁移的过程

使用storkctl我们来监控迁移的过程。

storkctlgetmigration-ncms

如何在两个OpenShift集群间迁移有状态应用

一旦迁移完成,storkctl会报告最后迁移到目标集群的卷的数量以及资源。

如何在两个OpenShift集群间迁移有状态应用

通过下面的命令,可以得到迁移过程的详细信息。

ocdescribemigrationcmsmigration-n=cms%ocdescribemigrationcmsmigration-n=cmsName:cmsmigrationNamespace:cmsLabels:Annotations:kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"stork.libopenstorage.org/v1alpha1","kind":"Migration","metadata":{"annotations":{},"name":"cmsmigration","namespace":"cms"}...APIVersion:stork.libopenstorage.org/v1alpha1Kind:MigrationMetadata:CreationTimestamp:2019-11-08T02:33:44ZGeneration:9ResourceVersion:346702SelfLink:/apis/stork.libopenstorage.org/v1alpha1/namespaces/cms/migrations/cmsmigrationUID:2eeb5d56-01d0-11ea-a393-02fec625b80aSpec:AdminClusterPair:ClusterPair:prodclusterIncludeResources:trueIncludeVolumes:trueNamespaces:cmsPostExecRule:PreExecRule:Selectors:StartApplications:trueStatus:FinishTimestamp:2019-11-08T02:34:56ZResources:Group:coreKind:PersistentVolumeName:pvc-ac60362f-0170-11ea-8418-06c5879a6a7aNamespace:Reason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:coreKind:PersistentVolumeName:pvc-c5dd1955-0170-11ea-a393-02fec625b80aNamespace:Reason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:coreKind:ServiceName:mysqlNamespace:cmsReason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:coreKind:ServiceName:wordpressNamespace:cmsReason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:coreKind:PersistentVolumeClaimName:px-mysql-pvcNamespace:cmsReason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:coreKind:PersistentVolumeClaimName:px-wp-pvcNamespace:cmsReason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:appsKind:DeploymentName:mysqlNamespace:cmsReason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:appsKind:DeploymentName:wordpressNamespace:cmsReason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Group:route.openshift.ioKind:RouteName:wpNamespace:cmsReason:ResourcemigratedsuccessfullyStatus:SuccessfulVersion:v1Stage:FinalStatus:SuccessfulVolumes:Namespace:cmsPersistentVolumeClaim:px-mysql-pvcReason:MigrationsuccessfulforvolumeStatus:SuccessfulVolume:pvc-ac60362f-0170-11ea-8418-06c5879a6a7aNamespace:cmsPersistentVolumeClaim:px-wp-pvcReason:MigrationsuccessfulforvolumeStatus:SuccessfulVolume:pvc-c5dd1955-0170-11ea-a393-02fec625b80aEvents:TypeReasonAgeFromMessage-------------------------NormalSuccessful82sstorkVolumepvc-ac60362f-0170-11ea-8418-06c5879a6a7amigratedsuccessfullyNormalSuccessful82sstorkVolumepvc-c5dd1955-0170-11ea-a393-02fec625b80amigratedsuccessfullyNormalSuccessful78sstork/v1,Kind=PersistentVolume/pvc-ac60362f-0170-11ea-8418-06c5879a6a7a:ResourcemigratedsuccessfullyNormalSuccessful78sstork/v1,Kind=PersistentVolume/pvc-c5dd1955-0170-11ea-a393-02fec625b80a:ResourcemigratedsuccessfullyNormalSuccessful78sstork/v1,Kind=Servicecms/mysql:ResourcemigratedsuccessfullyNormalSuccessful78sstork/v1,Kind=Servicecms/wordpress:ResourcemigratedsuccessfullyNormalSuccessful78sstork/v1,Kind=PersistentVolumeClaimcms/px-mysql-pvc:ResourcemigratedsuccessfullyNormalSuccessful78sstork/v1,Kind=PersistentVolumeClaimcms/px-wp-pvc:ResourcemigratedsuccessfullyNormalSuccessful78sstorkapps/v1,Kind=Deploymentcms/mysql:ResourcemigratedsuccessfullyNormalSuccessful77s(x2over78s)stork(combinedfromsimilarevents):route.openshift.io/v1,Kind=Routecms/wp:Resourcemigratedsuccessfully

在生产环境上验证迁移

回到生产环境,我们来检查CMS命名空间里的所有资源。

ocgetall-ncms

如何在两个OpenShift集群间迁移有状态应用

你可以通过为WordPress Pod使用port-forwardding,来访问应用。

如何在两个OpenShift集群间迁移有状态应用

小结

Kubemotion为有状态应用增加了迁移功能。它可以在本地环境和云环境之间,以及多云环境之间,无缝的迁移卷。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何在两个OpenShift集群间迁移有状态应用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:django中怎么设置访问服务器端地址下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18