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,一经查实,立即删除!

相关文章

android 设置资源,Android 资源

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

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

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

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

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

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

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

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

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

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

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

label标签 html5,HTML5 label 标签

实例HTML5 标签用于为 input 元素做出标记。带有两个输入字段和相关标记的简单 HTML 表单:MaleFemale尝试一下 浏览器支持目前大多数浏览器支持 标签。标签定义及使用说明标签为 input 元素定义标注(标记)。label 元素不会向用户呈现任何特殊效果。不过,…

me shy是什么歌 抖音make_抖音星河滚烫你是人间的理想下一句是什么歌 星河歌词完整版...

最近在抖音上听到一段话,这段话的开头是“星河滚烫,你是人间的理想……”。抖音星河滚烫你是人间的理想下一句是什么歌?星河歌词介绍?星河,是非常好听的一首歌曲,是很多人都喜欢的一首歌曲。抖音星河滚烫你…

修改使用计算机的名称,Windows 10中修改计算机名称的方法,你知道几种?

当用户新入手一台电脑时,通常做的第一件事就是做一些个性化设置。一般来说个性化的第一步就是给计算机起一个自己满意的名字,下面介绍几种修改计算机名字的方法。通过设置更改计算机名字按WinI键进入设置,在设置窗口中找到“系统”,点击它。在…

apollo 参数传递_使用Apollo通过WebSocket通过STOMP轻松进行消息传递

apollo 参数传递在我以前的文章中,我介绍了几个有趣的用例,这些用例使用著名的消息代理HornetQ和ActiveMQ通过Websockects实现STOMP消息传递。 但是我没有介绍的是Apollo,因为我个人认为它的API是冗长的,并且不像Java开发人员那样…

使用IntelliJ调试Java流

流功能非常强大,只需几行就可以捕获您预期功能的要点。 但是,就像它们在一切正常工作时一样平滑,就像它们在表现不正常时一样令人痛苦。 了解如何使用IntelliJ调试Java Streams并深入了解Stream的中间操作。 在本文中,我将在示例…

echart 饼图每一块间隙_花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃...

花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃前几年,在单位附近有一家只做酱香饼的小店,刚开张的时候排很长队,我为了一块酱香饼排队半小时。后来买酱香饼的人少了,我三天两头买一块酱香饼解馋…

404 单页应用 报错 路由_通过 Laravel 创建一个 Vue 单页面应用(五)

文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/34858我们在第4部分完成了编辑用户的功能,并且学习了如何使用 v-model 来监听视图组件中用户信息的更改。现在我们可以开始构思删除用户功能,以及删除…

使用计算机求解雷达方程,关于雷达方程

满意答案zjit99402014.01.27采纳率:41% 等级:12已帮助:2803人带宽校正系数是Co而不是Do.我们知道雷达接收到回波信号后,必须进行信号处理,使中频接收机的输出端(检波器的输入端)输出的信号和噪声功率比(简称信噪比)…

7500 cpuz跑分 i5_小米Pro笔记本亮相跑分网站:处理器包含AMD Zen3、11代酷睿

2020年已经接近尾声,随之而来的将会是一大波新品发布会,不仅是手机,笔记本电脑、显卡等产品也会有新品亮相。一年一度的CES 2021也即将开幕,届时英特尔、英伟达、AMD等知名厂商也都将出席活动。据悉,英特尔将推出11代酷…

2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用

点击上面“妙招姐”免费关注图文版:哈喽大家好,我是妙招姐,洗洁精是我们生活中的必须品,但用洗洁精来清洗餐具或水果等和食物相关的东西多多少少都会有残留,那么今天妙招姐就来教大家用橘子皮来自己制作洗洁精&#xf…

centos模拟post请求_java模拟post和get请求(2019/10/25)

一、http含义的介绍1.http协议是超文本传输协议--具体含义请百度2.基于tcp/ip协议--注意和udp的区别3.无状态---本次请求记不住以往请求的状态4.无连接--每次连接只处理一个请求5.媒体独立二、请求报文的组成部分请求行 请求方式 请求url http协议版本请求头关于请求头和响应头…

浙江计算机二级报名步骤,浙江2016年9月计算机二级考生报名流程

导读:2016年9月浙江全国计算机二级考试网上报名时间为2016年6月1日-6月19日;现场缴费确认为6月1日6月20日,具体报名流程请看如下信息。想了解更多相关信息请持续关注我们应届毕业生考试网!(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#…

单开双控_卧室或者楼梯灯怎么安装单联双控

点击上面蓝色字体关注!装修图例 | 别墅装修 | 装潢装饰 | 样板楼梯 | 装修设计在改电和布线前我们在这两个开关之间预埋3根线就够了。如果一头接电源,另一头接控制线的话,预埋2根线就够了,双控开关有三个接线柱,只要记…

Apache Ignite变得简单:第一个Java应用程序

在本文中,我们将更进一步,让您完成第一个Ignite应用程序的创建,以从分布式缓存中进行读写操作。 作为第一个示例,我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数据的应用程序。 可从GitHub存储库&#xf…