回想一下,我们正在使用下图中所示的模型配置,并且请注意那里的标签,因为我们将在示例中积极使用它们。
软件组件 | 版本号 |
---|---|
红帽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在我们的集群之间无缝迁移反向词应用程序。