红帽高级集群管理和应用程序管理,第2部分。蓝色/绿色部署,迁移...

大家好,这个博客!在上一篇文章中,我们介绍了Red Hat Advanced Cluster Management(ACM)中应用程序生命周期的基本概念,并展示了如何通过在两个集群之间部署应用程序来应用它们。今天,我们将向您展示如何使用ACM进行蓝绿色部署,跨集群应用程序迁移和灾难恢复。







回想一下,我们正在使用下图中所示的模型配置,并且请注意那里的标签,因为我们将在示例中积极使用它们。



软件组件 版本号
红帽OpenShift容器平台 4.5.7
红帽高级集群管理 2.0修订包2.0.2


Git仓库



我们还将使用上一篇文章中的Git存储库:



描述
配置 存储在所有环境中使用的应用程序的基本文件。
产品 存储生产环境中使用的应用程序的覆盖文件。
阶段 存储测试环境中使用的应用程序的覆盖文件


红帽ACM进行蓝色/绿色部署



在上一篇文章中,我们在两个环境(开发和生产)中部署了反向词应用程序。假设在“开发”中有0.0.3版,在“生产”中有0.0.2版。



现在,假设开发人员已经发布了0.0.4版,我们希望使用ACM的GitOps功能对开发和生产集群进行蓝绿色部署。



在上一篇文章中,我们在ACM中创建了必要的Channel,PlacementRules,Subscriptions和Applications资源,因此,当我们部署新版本时,只有Git才能在两个集群中工作。



在开发环境中更新应用程序



由于已经创建了所有必需的资源,因此我们只需要更改Git中的应用程序描述即可更新相应环境中的版本。



注意。由于这里仅展示ACM的GitOps功能,因此我们会将更改直接推送到存储库的分支,这不好。在现实生活中,您应该有一个定义明确的流程来对不同的环境进行更改,您可以在此处了解更多信息



1.转到我们克隆的Git存储库:



注意:如果您复制了上一篇文章中的示例,则您已经具有该存储库的克隆分支



cd /path/to/acm-app-lifecycle-blog/forked/repository/


2.首先,我们要在开发环境中更新应用程序的版本,以便在将更改推送到生产环境之前可以对其进行测试。因此,我们将与舞台分支合作。



git checkout stage


3.现在,您需要为应用程序部署更新覆盖,以便此部署使用新的版本映像(0.0.4)。



到目前为止,开发群集中正在运行版本0.0.3。



sed -i "s/v0.0.3/v0.0.4/g" apps/reversewords/overlays/deployment.yaml


4.提交更改之前,请检查开发集群中应用程序的当前状态。



curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080


如您所见,版本0.0.3当前正在开发环境中运行:



Reverse Words Release: Stage Release v0.0.3. App version: v0.0.3


5.提交文件并将其推送到Stage分支。



注意。再一次,在现实生活中,您不应该这样做。您必须对此有一个明确定义的过程。



git add apps/reversewords/overlays/deployment.yaml
git commit -m "Pushed development reverse-words app version to v0.0.4"
git push origin stage


6.由于我们已经有一个Subscription,一旦检测到对我们的存储库和分支的新提交,ACM将执行操作以将状态从当前状态更改为所需状态,如Git所示。



oc --context dev -n reverse-words-stage get pods


如您所见,已检测到更改,并且新版本的Pod与应用程序的新版本一起部署。



NAME                             READY   STATUS              RESTARTS   AGE
reverse-words-5ff744d4bd-kkfvn   0/1     ContainerCreating   0          3s
reverse-words-68b9b894dd-jfgpf   1/1     Running             0          109m


7.现在,我们对应用程序运行请求,并确保已部署0.0.4版本。



curl http://$(oc --context dev -n reverse-words-stage get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080

Reverse Words Release: Stage Release v0.0.4. App version: v0.0.4


8.生产版本保持不变。



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080

Reverse Words Release: Production release v0.0.2. App version: v0.0.2


9.现在,您可以运行验证测试,如果一切正常,则将新版本的应用程序投入生产。



在生产环境中更新应用程序



1.转到克隆的Git存储库。



cd /path/to/acm-app-lifecycle-blog/forked/repository/


2.我们相信我们已经在开发集群中成功测试了该应用程序的新版本,是时候进行适当的更改以将其部署到生产集群中了,因此现在我们将与prod分支一起工作。



git checkout prod


3.您需要为应用程序部署更新覆盖,以便此部署使用新的版本映像(0.0.4)。



到目前为止,生产集群中正在运行版本0.0.2。



sed -i "s/v0.0.2/v0.0.4/g" apps/reversewords/overlays/deployment.yaml


4.在提交更改之前,请检查生产集群中应用程序的当前状态。



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080


如您所见,版本0.0.2当前正在生产环境中运行:



Reverse Words Release: Stage Release v0.0.2. App version: v0.0.2


5.提交文件并将其推送到prod分支。



注意。再一次,在现实生活中,您不应该这样做。您必须对此有一个明确定义的过程。



git add apps/reversewords/overlays/deployment.yaml
git commit -m "Pushed production reverse-words app version to v0.0.4"
git push origin prod


6.由于我们已经有一个Subscription,一旦检测到对我们的存储库和分支的新提交,ACM将执行操作以将状态从当前状态更改为所需状态,如Git所示。



oc --context pro -n reverse-words-prod get pods


如您所见,已检测到更改,并且新版本的Pod与应用程序的新版本一起部署。



NAME                             READY   STATUS              RESTARTS   AGE
reverse-words-68795d69ff-6t4c7   0/1     ContainerCreating   0          5s
reverse-words-7dd94446c-vkzr8    1/1     Running             0          115m


7.现在,我们对应用程序运行请求,并确保已部署0.0.4版本。



curl http://$(oc --context pro -n reverse-words-prod get service reverse-words -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'):8080

Reverse Words Release: Production Release v0.0.4. App version: v0.0.4


8.就这样,我们已经在两种环境(开发和生产)中将我们的应用程序更新为版本0.0.4。



结论



本系列第一部分中,我们介绍了ACM属于GitOps类别的各个方面。今天,我们学习了如何使用ACM进行蓝绿色部署,集群之间的应用程序迁移以及灾难恢复。在下一篇文章中,我们将向您展示如何使用ACM在我们的集群之间无缝迁移反向词应用程序。



All Articles