想象一下,你有一个k8s集群设置Traefik作为Ingress控制器。
HTTP API应用程序部署到集群(带有入口资源),能够处理SIGTERM
,并且在处理完所有活动请求之前不会退出。
假设您使用10个副本部署应用程序,获取一些流量并将部署扩展到5个副本。这5个Pod将从匹配的Service
资源中提取出来。
对于这5个Pod,应用程序将收到SIGTERM
并开始正常关闭。
问题是,Traefik将如何处理拔出5个Pod的活跃连接?
答案 0 :(得分:1)
Traefik会做第一个:它会优雅地让那些待处理的飞行中请求完成,但不会向终止吊舱转发任何进一步的请求。
添加一些技术背景:一旦认为吊舱从Kubernetes'透视,端点控制器(也是Kubernetes控制平面的一部分)将从关联的端点对象中删除其IP地址。 Traefik监视端点上的更新,接收通知,并相应地更新其转发规则。从技术上讲,它不能转发任何进一步的流量,而这些最终请求将继续提供(由Go的http包中先前建立的goroutines)。