我们有一个服务在关闭时需要运行一些更长的 SQL 查询。但是,当 pod 收到来自 Kubernetes 的 SIGTERM 时,istio 代理容器仅等待 5 秒就关闭。这会导致我们的查询失败并且服务异常终止。
我们尝试过的事情:
terminationGracePeriodSeconds为3600. 5 秒后 Istio 仍然关闭。TERMINATION_DRAIN_DURATION_SECONDS为3600istio 容器上。即使我们的服务已完成关闭,Istio 仍会持续运行直到 3600 秒过去。我们试图打电话curl -XPOST http://127.0.0.1:15000/quitquitquit让 Istio 早点关闭,但它仍然全职运行。我们怎样才能让 Istio 保持足够长的运行时间,以便我们的服务能够优雅地终止,而又不会让它运行太长时间?
据我所知,不幸的是 istio sidecar 不支持优雅关闭:
目前还没有。这似乎是一个有趣的功能请求,但可能值得在 github 上提出一个功能请求。
我还认为在 github 上设置适当的线程将是一个解决方案。我知道的唯一方法是使用TERMINATION_DRAIN_DURATION_SECONDS选项。
github上还有几个与这个主题相关的主题:
目前 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
| 归档时间: |
|
| 查看次数: |
7667 次 |
| 最近记录: |