9.4.2. 蓝绿部署
蓝绿部署涉及同时运行应用程序的两个版本,并将流量从生产版本(绿色版本)移动到更新版本(蓝色版本)。您可以使用 滚动策略 或切换路由中的服务。
由于许多应用程序依赖于持久数据,因此您将需要有一个支持 N-1 兼容性 的应用程序,这意味着您可以通过创建数据层的两个副本在数据库、存储或磁盘间共享数据并实现实时迁移。
以测试新版本时使用的数据为例。如果是生产数据,新版本中的错误可能会破坏生产版本。
9.4.2.1. 使用蓝绿部署
蓝绿部署使用两个部署配置。这两者都在运行,生产环境中的部署配置依赖于路由指定的服务,每个部署配置公开给不同的服务。您可以创建指向新版本的新路由并进行测试。准备就绪后,将生产路由中的服务更改为指向新服务和新的 blue 版本。
如果需要,可以通过将服务切回到之前的版本以回滚到老的绿色版本。
使用路由和两个服务
这个示例设置了两个部署配置:一个用于稳定版本(绿色版本),另一个用于较新的版本(蓝色版本)。
路由指向某个服务,可以随时更改为指向不同服务。作为开发人员,您可以在生产流量路由到前连接到新服务来测试新版代码。
路由适用于 Web(HTTP 和 HTTPS)流量,因此这种技术最适合 Web 应用程序。
创建示例应用程序的两个副本:
$ oc new-app openshift/deployment-example:v1 --name=example-green $ oc new-app openshift/deployment-example:v2 --name=example-blue
这会创建两个独立的应用程序组件:一个在
example-green
服务下运行 v1 镜像,另一个使用example-blue
服务下的 v2 镜像。创建指向旧服务的路由:
$ oc expose svc/example-green --name=bluegreen-example
通过
bluegreen-example.<project>.<router_domain&
gt; 访问应用程序,验证您能否看到 v1 镜像。注意在 v3.0.1 之前的版本上,这个命令会在
example-green.<project>.<router_domain&
gt; 生成一个路由,而不是以上位置。编辑路由并将服务名称改为
example-blue
:$ oc patch route/bluegreen-example -p '{"spec":{"to":{"name":"example-blue"}}}'
- 要验证路由是否已改变,请刷新浏览器直到您看到 v2 镜像。