【发布时间】:2016-12-22 19:41:44
【问题描述】:
我知道当我想在 Openshift 中部署时可以有两种不同的策略。
滚动策略: Openshift 会等待新的 pod 准备就绪,然后再缩减生产 pod。
重新创建策略: Openshift 将删除旧实例并启动新实例。同时出现 503 HTTP 错误。对于 db 或两个或多个实例不能共存时。
要更改部署配置:
oc edit dc/mydeploy-conf -o json
"spec": {
"strategy": {
"type": "Recreate/Rolling"
},
EDIT 1 -- 从 Clayton 建议的项目 github 添加信息 https://github.com/openshift/origin/blob/master/examples/deployment/README.md
Openshift v3 中不包含策略,但可以手动完成。
- 蓝绿部署
蓝绿部署涉及同时运行一个应用程序的两个版本,并将生产流量从旧版本转移到新版本(有关蓝绿部署的更多信息)。在 OpenShift 中实现蓝绿部署有多种方法。
创建示例应用程序的两个副本
oc new-app openshift/deployment-example:v1 --name=bluegreen-example-old
oc new-app openshift/deployment-example:v2 --name=bluegreen-example-new
创建指向旧服务的路由
oc expose svc/bluegreen-example-old --name=bluegreen-example
编辑路由并将服务更改为 bluegreen-example-new
oc edit route/bluegreen-example
- A/B 部署
A/B 部署通常意味着同时运行两个(或更多)版本的应用程序代码或应用程序配置以进行测试或实验。
A/B 部署的最简单形式是在两个或多个不同的分片之间划分生产流量 - 一组具有同质配置和代码的实例。
更复杂的 A/B 部署可能涉及专门的代理或负载平衡器,它根据用户或应用程序的信息将流量分配给特定的分片(所有“测试”用户都会被发送到 B 分片,但普通用户会被发送到A 分片)。 A/B 部署可以被认为类似于 A/B 测试,尽管 A/B 部署意味着多个版本的代码和配置,而 A/B 测试通常使用一个代码库和特定于应用程序的检查。
示例: 一项服务,多种部署配置
OpenShift 通过标签和部署配置,可以支持通过同一服务同时公开多个分片。对于消费用户来说,分片是不可见的。下面描述了一个最简单的分片示例:
根据示例部署映像创建应用程序的第一个分片
oc new-app openshift/deployment-example --name=ab-example-a --labels=ab-example=true SUBTITLE="shard A"
编辑新创建的分片以设置一个标签 ab-example=true 对所有分片都是通用的:
oc edit dc/ab-example-a
在编辑器中,在 spec.selector 和 spec.template.metadata.labels 下添加行 ab-example: "true" 以及现有的 deploymentconfig=ab-example-a 标签。保存并退出编辑器。
触发重新部署第一个分片以获取新标签:
oc deploy ab-example-a --latest
创建一个使用通用标签的服务:
oc expose dc/ab-example-a --name=ab-example --selector=ab-example=true
通过路由使应用程序可用
oc expose svc/ab-example
基于与第一个分片相同但标记版本不同的源图像创建第二个分片,并设置唯一值:
oc new-app openshift/deployment-example:v2 --name=ab-example-b --labels=ab-example=true SUBTITLE="shard B" COLOR="red"
编辑新创建的分片以设置一个标签 ab-example=true 对所有分片都是通用的:
oc edit dc/ab-example-b
在编辑器中,在 spec.selector 和 spec.template.metadata.labels 下添加行 ab-example: "true" 以及现有的 deploymentconfig=ab-example-b 标签。保存并退出编辑器。
触发重新部署第二个分片以获取新标签:
oc deploy ab-example-b --latest
此时,两组 pod 都在路由下提供服务。但是,由于浏览器(通过保持连接打开)和路由器(默认情况下通过 cookie)都将尝试保留您与后端服务器的连接,因此您可能看不到两个分片都返回给您。要强制浏览器访问一个或另一个分片,请使用 scale 命令:
oc scale dc/ab-example-a --replicas=0
oc scale dc/ab-example-a --replicas=1; oc scale dc/ab-example-b --replicas=0
【问题讨论】:
标签: openshift kubernetes