【问题标题】:Deployment strategies in Openshift v3Openshift v3 中的部署策略
【发布时间】: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


    【解决方案1】:

    https://github.com/openshift/origin/blob/master/examples/deployment/README.md 可能是关于策略类型以及如何实现它们的最佳文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      相关资源
      最近更新 更多