我已使用nginx-ingress hashing配置了入口控制器,并为部署定义了HPA。当我们进行负载测试时,我们在新创建的Pod上遇到了一个问题,这些Pod尚未充分预热,而负载平衡立即转变为目标流量的一部分时,延迟就会增加并且服务会阻塞。有没有一种方法可以定义一些平滑的负载平衡,而宁愿逐渐移动流量,从而以更自然的方式预热服务?
答案 0 :(得分:2)
乍一看,我发现有两种可能的原因:
我认为您有可能遇到与该问题Some requests fails during autoscaling in kubernetes相同的问题。在这种情况下,Nginx会将尚未完全准备好的请求发送到Pods。为了解决这个问题,您可以配置Readiness Probe。就个人而言,我将就绪探针配置为向服务的/ health端点发送http请求。
但是,您的应用程序在第一次请求期间自然有可能缓慢执行,这通常是由于缓存或其他一些在其生命周期开始时需要执行的操作所致。我在Django + Gunicorn应用程序中遇到了此问题,其中Gunicorn仅在第一个请求后才启动我的应用程序。为了解决这个问题,我使用了PostStart
Container Hook,它在创建容器后立即向我的应用发送请求。 Here是其用法的一个示例。您可能还会看到以下问题:Kubernetes Pod warm-up for load balancing。