金丝雀部署 蓝绿部署_丰富多彩的部署:蓝绿色,金丝雀和滚动部署简介

2024-02-02 09:59

本文主要是介绍金丝雀部署 蓝绿部署_丰富多彩的部署:蓝绿色,金丝雀和滚动部署简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

金丝雀部署 蓝绿部署

在当今快节奏的世界中,使用持续集成和持续部署 (CI / CD)工作流似乎是保持软件测试和稳定性之上的唯一合理方法。 许多文章涵盖了CI / CD的基础知识,在本文中,我将重点介绍如何在最新版的OpenShift上实施三种流行的部署策略。 要继续阅读本文,您可以从GitHub下载OpenShift的最新稳定版本(在撰写本文时,我正在使用1.5.0 rc0版本)并运行:


oc cluster up 

这将是第一次,因为它将下载在计算机上本地运行OpenShift集群所需的多个映像。 该操作完成后,您应该会看到:

$ oc cluster up
-- Checking OpenShift client ... OK
-- Checking Docker client ... OK
-- Checking Docker version ... OK
-- Checking for existing OpenShift container ... OK
-- Checking for openshift/origin:v1.5.0-rc.0 image ...
...
-- Server Information ...
OpenShift server started.
The server is accessible via web console at:
https://192.168.121.49: 8443

You are logged in as :
User:   developer
Password: developer

To login as administrator:
oc login -u system:admin

您可以使用上述凭据从命令行( oc )或浏览器( https:// localhost:8443 / )访问群集。

蓝绿色部署

简而言之, 蓝绿色部署是关于具有两个相同的环境,在其前面有一个路由器或负载平衡器,可用于将流量定向到适当的环境:

Blue-green deployment.

蓝绿色部署

为了说明这种类型的部署,让我们创建一个蓝色应用程序的九个副本:

# this command creates a deployment running 9 replicas of the specified image
oc run blue --image = openshift/hello-openshift --replicas = 9

# this sets the environment variable inside the deployment config
oc set env dc/blue RESPONSE = "Hello from Blue"

# this exposes the deployment internally in the cluster
oc expose dc/blue --port = 8080

我们将使用OpenShift团队提供的hello world应用程序映像。 默认情况下,该图像运行一个简单的Web服务器,返回“ Hello world”文本,除非指定了RESPONSE环境变量,否则将返回其值。 因此,我们正在设置RESPONSE值,以轻松识别应用程序的蓝色版本。

一旦应用程序启动并运行,我们必须在外部公开它。 为此,我们将使用route ,它还将用作部署过程中应用程序的两个不同版本之间的切换。

# this exposes the application to be available outside the cluster under
# hello route
oc expose svc/blue --name = bluegreen

现在是执行升级的时候了。 我们必须创建与当前运行的环境相同的环境。 为了区分我们的应用程序的两个版本,这次我们将RESPONSE设置为“ Hello from Green”:

oc run green --image = openshift/hello-openshift --replicas = 9
oc set env dc/green RESPONSE = "Hello from Green"
oc expose dc/green --port = 8080

# this attaches green service under hello route,
# created earlier but with the entire traffic coming to blue
oc set route-backends bluegreen blue = 100 green = 0

我们的两个应用程序当前都在运行,但是只有蓝色显示了全部流量。 同时,绿色版本会通过所有必要的测试(集成,端到端等)。 当我们确信新版本可以正常工作时,我们可以翻转交换机并将所有流量路由到绿色环境:


oc set route-backends bluegreen blue = 0 green = 100 

可以从Web控制台执行上述所有步骤。 下面的屏幕截图显示了绿色环境当前正在提供流量:

OpenShift web console, route preview after the switch to the green environment.

OpenShift Web控制台,切换到绿色环境后路由预览

让我尝试总结蓝绿色的部署策略。 迄今为止,零停机时间是该方法的最大优势,因为切换几乎是瞬时的(接近理想状态),从而使用户不会注意到新环境何时满足了他们的请求。 不幸的是,这同时可能会引起问题-由于从服务流量的一台计算机物理切换到另一台计算机,所有当前事务和会话都将丢失。 在采用这种方法时,绝对要考虑到这一点。

这种方法的另一个重要好处是测试是在生产中执行的。 由于这种方法的性质,我们有一个完整的测试环境(同样是开发人员的理想世界),这使我们对应用程序按预期工作充满信心。 在最坏的情况下,您可以轻松地回滚到该应用程序的旧版本。 此策略的最后一个缺点是需要N-1 数据兼容性 ,这适用于本文稍后部分讨论的所有策略。

金丝雀部署

Canary旨在以较小的增量步骤来部署应用程序,并且仅将其部署给一小部分人。 有几种可能的方法,最简单的方法是仅向新应用程序提供一定比例的流量(我将在OpenShift中演示如何做到),以提供更复杂的解决方案,例如功能切换 。 功能切换可让您根据特定条件(例如,性别,年龄,原籍国)来控制对某些功能的访问。 我知道,最先进的功能切换功能Gatekeeper是在Facebook上实现的。

Canary deployment

金丝雀部署

让我们尝试使用OpenShift实施canary部署。 首先,我们需要创建我们的应用程序。 同样,我们将为此使用hello-openshift图像:

oc run prod --image = openshift/hello-openshift --replicas = 9
oc set env dc/prod RESPONSE = "Hello from Prod"
oc expose dc/prod --port = 8080

我们需要公开我们的应用程序以供外部访问:


oc expose svc/prod 

该应用程序的较新版本(称为canary)将类似地部署,但仅具有单个实例:

oc run canary --image = openshift/hello-openshift
oc set env dc/canary RESPONSE = "Hello from Canary"
oc expose dc/canary --port = 8080
oc set route-backends prod prod = 100 canary = 0

我们要验证新版本的应用程序在“生产”环境中是否正常运行。 需要注意的是,我们只想向少量客户公开它(例如,收集反馈)。 为此,我们需要以这样一种方式配置路由,即只有一小部分传入流量被转发到应用程序的较新(canary)版本:


oc set route-backends prod prod = 90 canary = 10 

验证此新设置的最简单方法(如下面的OpenShift Web控制台屏幕截图所示)是通过调用以下循环:


while true ; do curl http://prod-myproject.192.168.121.49. xip . io / ; sleep .2 ; done 

OpenShift web console, route preview after sending small percentage of the traffic to the canary version.

OpenShift Web控制台,在将少量流量发送到Canary版本后路由预览

注意:在您部署了多少个副本与针对每个版本的流量百分比之间存在联系。 由于部署前的服务与路由划分结合用作负载平衡器,因此可以为您提供应用程序将获得的实际流量。 在我们的情况下,约为1.5%。

这种方法的最大优点是功能切换,特别是当您具有一个可以选择金丝雀部署的目标组时。 结合良好的用户行为分析工具,您将获得有关正在考虑向更广泛的受众部署的新功能的良好反馈。 与蓝绿色部署一样,canary遭受N-1数据兼容性的困扰,因为在任何时候我们都在运行多个版本的应用程序。

没有什么可以阻止您在任何时间点进行多个canary部署。

滚动部署

滚动部署是OpenShift中的默认部署策略。 简而言之,此过程是要用较新的实例缓慢替换当前正在运行的应用程序实例。 最好用以下动画说明该过程:

Rolling2.gif

滚动部署

在左侧,我们有一个当前正在运行的应用程序版本。 在右侧,我们拥有该应用程序的更新版本。 我们看到,在任何时间点,我们都在运行N + 1个实例。 注意只有在新的健康检查通过后才删除旧的检查表,这一点很重要。 所有这些参数都可以轻松地在OpenShift的部署策略参数中进行调整。

screenshot

图6.在OpenShift Web控制台中滚动部署参数。

然后让我们创建示例应用程序:

oc run rolling --image = openshift/hello-openshift --replicas = 9
oc expose dc/rolling --port 8080
oc expose svc/rolling

一旦应用程序启动并运行,我们就可以触发新的部署。 为此,我们将通过设置环境变量来更改部署的配置,这将触发新的部署。 这是因为默认情况下,所有部署都定义了ConfigChange触发器 。


oc set env dc/rolling RESPONSE = "Hello from new roll" 

下面的屏幕快照是在推出过程中拍摄的,但是最好切换到OpenShift的Web控制台以查看实际的过程:

Rolling deployment in OpenShift web console.

在OpenShift Web控制台中滚动部署

这种方法的主要优点包括:随着流量的增加,逐步部署和逐步验证应用程序。 另一方面,我们又在努力解决N-1兼容性问题,这对所有连续部署方法来说都是一个重大问题。 执行此方法时,丢失的交易和注销的用户也是要考虑的因素。 最后一个缺点是需要N + 1个实例,尽管与具有相同环境的蓝绿色需求相比,它更容易实现。

结论

最后,我将给出最好的建议:没有一种适合所有人的方法。 充分理解方法和替代选项很重要。

此外,在为您的应用程序选择正确的方法时,开发人员和运营团队应密切合作。

最后,尽管我的文章仅着眼于这些策略中的每一个,但将它们组合起来以拥有最适合您的应用程序以及您所采用的组织和流程的最佳解决方案并没有错。

我将在俄勒冈州波特兰市的PyCon 2017(5月17日至25日)在PyCon 2017(3月17日至3月)上进行为时 3小时的研讨会( 在Kubernetes / OpenShift中有效运行Python应用程序)中介绍此主题。

如果您有任何疑问或反馈,请在下面的评论中告诉我,或通过Twitter @@ soltysh进行联系 。

翻译自: https://opensource.com/article/17/5/colorful-deployments

金丝雀部署 蓝绿部署

这篇关于金丝雀部署 蓝绿部署_丰富多彩的部署:蓝绿色,金丝雀和滚动部署简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670348

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

若依部署Nginx和Tomcat全过程

《若依部署Nginx和Tomcat全过程》文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署... 目录Nginx部署后端部署Tomcat部署出现问题:点击刷新404总结Nginx部署第一步:打包

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起