如何防止 Istio sidecar 在我的服务正常终止之前关闭?

Jes*_*Bye 5 istio

我们有一个服务在关闭时需要运行一些更长的 SQL 查询。但是,当 pod 收到来自 Kubernetes 的 SIGTERM 时,istio 代理容器仅等待 5 秒就关闭。这会导致我们的查询失败并且服务异常终止。

我们尝试过的事情:

  • 设置terminationGracePeriodSeconds3600. 5 秒后 Istio 仍然关闭。
  • 保持 HTTP 连接打开以尝试强制 Istio 不关闭。Istio 仍然关闭,迫使我们的 HTTP 连接也关闭。
  • 设置TERMINATION_DRAIN_DURATION_SECONDS3600istio 容器上。即使我们的服务已完成关闭,Istio 仍会持续运行直到 3600 秒过去。我们试图打电话curl -XPOST http://127.0.0.1:15000/quitquitquit让 Istio 早点关闭,但它仍然全职运行。

我们怎样才能让 Istio 保持足够长的运行时间,以便我们的服务能够优雅地终止,而又不会让它运行太长时间

Mik*_*iak 4

据我所知,不幸的是 istio sidecar 不支持优雅关闭:

目前还没有。这似乎是一个有趣的功能请求,但可能值得在 github 上提出一个功能请求。

我还认为在 github 上设置适当的线程将是一个解决方案。我知道的唯一方法是使用TERMINATION_DRAIN_DURATION_SECONDS选项。

github上还有几个与这个主题相关的主题:

istio-proxy 在我的容器之前停止 #10112

目前 Envoy 不支持优雅关闭。参考:envoyproxy/envoy#2920一旦 Envoy 实现了这一点,我们就可以在 Sidecar 中支持它。


从 global.proxy.env 或environmentOverride 注解渲染 istio-proxy 环境变量 #18333

对于任何想了解为什么与 Pod 的连接提前断开的问题的人来说,希望这会有所帮助。

您需要 pod 有一个 terminationGracePeriodSeconds,我假设您已经知道了,并且您还需要 pod 的 sidecar 配置的注释:

注释:# https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#ProxyConfig proxy.istio.io/config:| TerminationDrainDuration: {{ $terminationGracePeriodSeconds }}s


Envoy 在它所包装的东西之前关闭可能会导致请求失败 #7136

使用注入的 envoy-sidecar 优雅关闭 #536