假设你有一个 k8s 集群,使用 Traefik 作为入口控制器。
将 HTTP API 应用程序部署到集群(具有入口资源),该应用程序能够处理SIGTERM
并且在处理完所有活动请求之前不会退出。
假设您使用 10 个副本部署应用程序,为其获取一些流量并将部署缩减为 5 个副本。这 5 个 Pod 将从匹配的Service
资源中拉出。
对于这 5 个 Pod,应用程序将接收SIGTERM
并启动正常关闭。
问题是,Traefik 将如何处理那些与拉出的 5 个 Pod 的活动连接?
Traefik 将做第一个:它会优雅地让那些待处理的、正在进行的请求完成,但不会将任何进一步的请求转发到终止的 pod。
添加一些技术背景:从 Kubernetes 的角度来看,一旦 Pod 被视为终止,端点控制器(也是 Kubernetes 控制平面的一部分)将从关联的端点对象中删除其 IP 地址。Traefik 监视端点上的更新,接收通知,并相应地更新其转发规则。因此,从技术上讲,它无法转发任何进一步的流量,而这些最终请求将继续得到服务(通过 Go 的 http 包中先前建立的 goroutines)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句