Istio的零停机滚动更新

本系列文章的第一部分介绍了如何在Kubernetes集群中实现真正的零停机时间更新。 我们专门解决了将流量从旧实例切换到新实例时出现的请求失败。 本文将展示如何使用Istio群集实现相同的目标。

服务网格技术(例如Istio)通常与容器编排结合使用。 Istio以透明的方式为我们的应用程序提供了诸如弹性,遥测和高级流量管理之类的跨领域问题。

当我们使用Istio时,与内部Kubernetes相比,集群内部网络模型看起来有些不同。 如果您不了解Istio当前的网络API的设计方式,则可以观看以下说明视频 。

使用Istio尝试零停机

让我们从文章的第一部分开始。 如果我们采用与以前类似的方式将应用程序重新部署到Istio群集,则会注意到更新期间的行为有所不同。 当我们重新运行旨在检测可用性差距的负载测试时,我们会注意到,尽管我们有preStop pod生命周期处理程序,但仍有一些失败的请求。

Fortio 1.1.0 running at 500 queries per second, 4->4 procs, for 20s
Starting at 500 qps with 50 thread(s) [gomax 4] for 20s : 200 calls each (total 10000)
09:11:39 W http_client.go:673> Parsed non ok code 503 (HTTP/1.1 503)
[...]
Code 200 : 9960 (99.6 %)
Code 503 : 40 (0.4 %)
Response Header Sizes : count 10000 avg 165.204 +/- 10.43 min 0 max 167 sum 1652048
Response Body/Total Sizes : count 10000 avg 176.12 +/- 3.817 min 171 max 227 sum 1761200
[...]

输出表明有一些HTTP请求失败,并带有503 Service Unavailable状态代码。 无论我们如何调整preStop处理程序的等待时间,在流量大时更新服务时,我们似乎都会至少preStop一些客户端请求。 同样,我们是否通过网关从网格内部还是从群集外部访问Istio服务似乎也没有什么区别。

了解发生了什么

要了解发生了什么,让我们仔细看看Istio边车容器如何连接到各个服务。

零停机时间更新

网格中的所有流量都通过连接到各个实例的Sidecar代理进行路由。 对于通过网关的入口流量也是如此。

在我们的场景中,这意味着边车可能无法连接到实例,即使它们已经准备好为交通服务。 代理以最终一致的方式配置; 配置从飞行员平面逐渐传播。

Envoy还对实例执行主动的运行状况检查,它将检测异常值并最终阻止与它们的连接。 为Pod定义的基于HTTP的就绪探针也将包括在内,并由Envoy代理执行。 换句话说,即使容器仍会接受请求,代理容器也不会连接到准备就绪探测失败的容器。 我们可以通过网状配置添加到Sidecar代理中的重试配置只能缓解但不能解决此问题。

通过Istio实现零停机

有一些方法可以在将来向Kubernetes引入更多增强的健康检查概念。

但是,当前,在工作量和可靠性之间的合理平衡是使用Istio子集作为版本指示符,并独立于Kubernetes的滚动更新机制重新路由服务流量。 通过这种方法,我们使用服务子集来标识应用程序的版本(例如v1v2 ,并将虚拟服务配置为路由到一个特定版本。 由虚拟服务资源配置的Istio代理路由可以重新路由到具有真正零停机时间的不同子集版本。

零停机时间更新

为了使用这种方法,我们将创建单独的Kubernetes部署,为我们的应用程序的每个单独版本创建一个,并通过Istio执行实际的切换。

部署示例如下所示:

  • 最初:Kubernetes部署coffee-shop-v1带有标签app=coffee-shopversion=v1 ,目的地规则来定义子集v1 ,和虚拟服务,航线coffee-shop v1
  • 我们增强了目标规则,以包括版本v2的新子集
  • 我们创建一个version=v2的部署coffee-shop-v2 version=v2
  • 成功部署完成后,我们将虚拟服务重新路由到v2 。 切换将不会丢失请求。
  • 短暂的等待后,我们从目标规则中删除了子集v1 ,并部署了coffee-shop-v1

如果我们从第一部分开始重新运行相同的负载测试,则会注意到我们可以执行实际的零停机时间部署。

Fortio 1.1.0 running at 500 queries per second, 4->4 procs, for 20s
Starting at 500 qps with 50 thread(s) [gomax 4] for 20s : 200 calls each (total 10000)
[...]
Code 200 : 10000 (100.0 %)
Response Header Sizes : count 10000 avg 159.530 +/- 0.706 min 154 max 160 sum 1595305
Response Body/Total Sizes : count 10000 avg 167.853 +/- 2.51 min 161 max 171 sum 1678534
[...]

如果您不熟悉如何使用Istio的网络API来实现此过程,则可以观看说明视频 。

自动化是关键

当然,我们不想手动执行这些步骤。 想法是定义一个在每个新软件版本上执行的自动化过程。 最终,这种部署应作为持续交付管道的一部分进行,该管道将我们的软件部署到相应的环境中。

我们可以增强我们的持续交付渠道,以部署Canary版本,在该版本中,我们仅将一小部分用户流量路由到。 这也将作为自动化方法同样包含在管道中:逐渐将用户流量路由到新部署的版本,然后在Canary版本证明其自身运行良好后执行完全切换。

如果我们以模板语言定义部署和Istio路由定义,则将有帮助。 这样,我们可以可靠地定义和更改应用程序版本和映像版本,并始终如一地推出更改。 coffee-shop示例项目包括一个自动化脚本,该脚本使用Istio执行零停机时间部署,并基于使用kontemplate的YAML模板方法进行构建 。

结论

Kubernetes的生产就绪性是一个非常有价值的功能,它是开箱即用的。 但是,我们需要更多地考虑,以充分实现零停机时间行为。 测试您将在生产环境中运行的应用程序的停机时间并相应地调整探测和各种超时至关重要。

当然,了解Kubernetes和Istio如何分别管理与后端的连接也很有帮助。 如果我们在更新期间稍微调整行为,则可以消除最后的可用性差距。

零宕机时间以及正确的连接耗尽和保持活动连接处理能力使我们的应用程序可以随时部署,而不会中断用户。 一旦达到这一点,我们就可以不断改进软件,并更快地交付功能和错误修复以投入生产。 因此,零停机时间部署是持续交付和持续改进文化正常运行的前提之一。

  • GitHub项目示例(Istio版本)
  • Kubernetes的零停机滚动更新(第一部分)
  • Istio Networking API说明视频
  • Kontemplate(Kubernetes模板工具)

翻译自: https://www.javacodegeeks.com/2018/10/zero-downtime-rolling-updates-istio.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚类dbi指数_一种基于DBI-PD聚类算法的异常检测机制

一种基于DBI-PD聚类算法的异常检测机制丁姝郁【期刊名称】《电脑开发与应用》【年(卷),期】2015(000)002【摘要】分析了网络数据维数和检测准确度之间的关系,介绍了常用于入侵检测的聚类分析方法及其优缺点。在此基础上,提出一种以戴维森堡丁指数(DBI)为…

单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...

基于C语言的计算机与多单片机红外无线串口通信的实现基于C语言的计算机与多单片机红外无线串口通信的实现黄文亮 信息学院 电子信息工程专业指导教师 刘传菊摘要:计算机与一台或多台单片机的通信系统中的数据通讯一般采用的是串行通信方式。串行通信可采用有线与无线…

android 设置资源,Android 资源

Android 资源Android Resources02/01/2018本文内容本文介绍了 Xamarin 中 Android 资源的概念,并介绍了如何使用这些资源。其中介绍了如何使用 Android 应用程序中的资源来支持应用程序本地化和多个设备,包括不同的屏幕大小和密度。This article introdu…

zbrush常用笔刷_ZBrush中常用笔刷综合简介

单击左托盘的笔刷图标,弹出一个笔刷库,其中有许多常用笔刷,这也是许多初学者所头疼的问题,ZBrush的笔刷非常多,而且功能很强大,好多朋友不知道该选择哪一个笔刷进行雕刻。其实,在ZBrush的学习中…

spring java配置_Spring:使基于Java的配置更加优雅

spring java配置大家好,我很久没有写新文章了。 积累了很多资料,需要在不久的将来在我的博客中发布。 但是现在我想谈谈Spring MVC应用程序配置。 确切地说,我想谈谈基于Java的Spring配置。 尽管在3.0版本中引入了基于Spring java的配置&…

android封装oauth2,Android AccountAuthenticator和OAuth2

这肯定是可行的。来自Android AccountManager文档:Many servers support some notion of an authentication token, which canbe used to authenticate a request to the server without sending theusers actual password. (Auth tokens are normally created with…

php redis 队列抢红包_php+redis实现消息队列

消息队列:是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它应…

使用Spring Security在Spring Boot中进行缓存

在这篇文章中,我想分享一下O&B的一个团队的经验教训。 他们正在使用带有Spring Security的Spring Boot。 默认情况下,Spring Security保护的所有内容都将通过以下HTTP标头发送到浏览器: Cache-Control: no-cache, no-store, max…

wifi定位算法android,WIFI定位算法

网络定位指通过周边wifi列表、基站列表、IP地址等信息确定用户位置的过程。 我们采集的训练数据是每个GPS坐标位置和对应的Wifi和基站列表。 其中每个Wifi和基站有唯一的Mac地址作为ID和信号强度。有三种定位方法:均值法首先估计一个wifi的中心点位置,可…

仿小黄车android定位,小黄车ofo是怎么实现自行车定位功能的?

摩拜单车通过车身携带的GPS而实现单车定位,但是我们知道ofo是没有安装GPS,它又是如何实现单车定位的呢?我居住的地方距离地铁站步行大约15分钟左右,距离最近的商场步行将近30分钟,距离周边的便利店,水果店,饭店等步行1…

python苹果下载软件助手哪个好_Mac上有什么实用的必备软件?

Mac上的一些软件真的超好用,比如...每天依据时间变化的壁纸,看清晨、看夕阳我是 Super叔 ,关注了就是好朋友,这里说明下还是,软件只是工具,初衷是为了方便自己提高效率,别为了去模仿所谓某某软件可以怎么怎么复杂的,用得多么炫酷好用,而去花非常多精力为…

hibernate 刷新_Hibernate事实:了解刷新操作顺序很重要

hibernate 刷新Hibernate将开发人员的思维方式从思考SQL转变为思考对象状态转换。 根据Hibernate Docs,实体可能处于以下状态之一: new / transient:实体不与持久性上下文相关联,因为它是数据库不知道的新创建的对象。 持久性&a…

android变量要不要附空值,android-如何在使用Parcelable时序列化空值

我见过的大多数序列化代码都使用两个标志来指示值的存在/不存在,或者在值前加上一个计数字段(例如,在编写数组时),如果该值不等于,则计数字段仅设置为零。 根本不存在。检查Android核心类的源代码会发现以下代码(来自Message类)&a…

gprs连接中断记录_请收好!脉搏波血压计连接天天血压APP使用指南

总有那么几个粗心的小伙伴丢失了说明书,在后台追问波哥如何连接“天天血压”,于是给大家安排了这篇使用指南。首先我们来了解下“天天血压”的功能:1.通过蓝牙或GPRS传输,同步记录每次测量结果;2. 血压趋势分析&#x…

使用Spring Boot,JHipster和React构建照片库PWA

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 从本质上讲,React只是一个UI工具包,即ala GWT,但是…

html5画布funcition,2020前端基础知识学习第一节(示例代码)

一、选择题1. 浏览器端的存储技术有哪些()A.cookie  B.localStorage  C.session  D.userData答案:A B D分析:cookie通常用于存储用户等登录信息,能够存储的数据是有限的,而且在指定域名下所有的请求都会带上。localStoage是…

names文件和data文件_data.table让你的读取速度提升百倍

不知道大家有没有用read.table和read.csv读取过文件,当文件不大的时候你可能还感觉不出读取速度,但是当文件比较大的时候,比如有上万行的时候,你就会感觉到等待时间明显变长,甚至无法忍受。今天小编给大家安利一个实用…

差分放大电路差模共模公式_提高差分放大器的共模抑制比,电阻的选择很关键...

在各种应用领域,采用模拟技术时都需要使用差分放大器电路。例如测量技术,根据其应用的不同,可能需要极高的测量精度。为了达到这一精度,尽可能减少典型误差源(例如失调和增益误差,以及噪声、容差和漂移)至关重要。为此…

计算机网络的含义是什么意思,互联网的基本含义是什么

互联网大家都知道,但是互联网的基本含义都了解吗?学习啦小编为大家整理了相关内容,供大家参考阅读!互联网的基本含义互联网是由一些使用公用语言互相通信的计算机连接而成的网络,即广域网、局域网及单机按照一定的通讯协议组成的国际计算机网…

在单个try-with-resources语句中仔细指定多个资源

Java 7更有用的新功能之一是引入了try-with-resources语句 [AKA 自动资源管理 ( ARM )]。 try-with-resources语句的吸引力在于其承诺 “确保在语句末尾关闭每个资源”。 在这种情况下,“资源”是实现AutoCloseable及其close(&…