【问题标题】:What happens to the in-progress requests during blue green deployment蓝绿部署期间正在进行的请求会发生什么情况
【发布时间】:2020-09-22 12:29:47
【问题描述】:

我一直在使用nginx-ingresskubernetes 中尝试蓝绿色部署。我创建了几个并发 http 请求来访问我的应用程序的 v1 版本。与此同时,我将路由器切换为指向我的应用程序的 v2 版本。正如预期的那样,v2 版本在交换后为请求提供服务,但让我好奇的是所有请求都成功了。在我进行交换时,很可能在 v1 中有一些正在进行的请求。为什么这样的请求没有失败?

我也尝试了同样的方法,在我的服务中引入了一些延迟,以便请求需要更长的时间来处理。仍然没有一个请求失败。

【问题讨论】:

  • 嗯,取决于你的测试。如果您每秒执行几个非并发请求,那么这对任何服务器来说都是糖果,从一个版本切换到另一个版本可能需要 10 倍以上的时间。尝试发送并发请求;每秒几百个,其中一些会失败。
  • 我尝试了 50 个并发请求 1000 次。仍然所有请求都成功。我怀疑 nginx-ingress-controller 是否会优雅地排出请求,但找不到任何支持文档
  • 50个并发请求还没有失败?即使服务器启动也可能失败。您如何发送这些请求?可以粘贴命令吗?

标签: kubernetes nginx-ingress blue-green-deployment


【解决方案1】:

通常允许进行中的请求完成,只是代理不会发送新的请求。

【讨论】:

  • 它是 nginx-ingress 控制器中的一些配置来确保执行中的请求完成吗?因为我在尝试滚动升级时注意到很少有请求失败。
  • 顺便说一句,没有“允许完成”请求之类的东西。服务器宕机了,就是这样!即使请求就在门前,它也会被丢弃。
  • 蓝/绿和滚动升级不是一回事。在蓝色/绿色中,旧服务完全保持运行,您只需停止发送流量即可。在滚动更新中,随着您的进行,事物将被关闭。 K8s 确实在终止之前删除了 Endpoint,但它可能需要一些时间才能反映在 Ingress 中,因此您通常希望在 pre-stop hook 中等待几秒钟,然后确保正常关闭 Web 服务器(通常 SIGTERM 会默认执行此操作,但请检查)。
  • @suren 在服务注销和强制 pod kill 之间有一个等级期,专门用于允许完成飞行中的请求等事情。你错了:)那个年级甚至是可配置的,还有一个钩子可以进一步定制。
猜你喜欢
  • 1970-01-01
  • 2015-03-18
  • 2019-06-11
  • 1970-01-01
  • 2023-02-02
  • 2021-07-01
  • 1970-01-01
  • 2017-12-28
  • 2020-07-21
相关资源
最近更新 更多