我有以下问题。
我们在 GKE 上部署了一个带有10个Pod的网站,在新部署中,我们使用MAXsurge=1
MAXunavailable=0
。
有时,当我尝试在部署新版本期间加载网站时,在浏览器中仅看到标题,并且加载静态块时出现一些错误...我认为负载均衡器会将我发送到旧的pod或尝试加载旧的缓存的静态文件...。是否有一种方法可以配置GKE,以便仅在所有可用的或类似的设备上才将流量发送到新的Pod。
部署后2分钟,我在cloudbuild中清除了CF缓存,这是最后一步,但这不是100%的帮助。
我相信可以将其配置为仅将流量发送到新版本的Pod或类似的东西,但是我对GKE还是陌生的,不确定
也许我们在css或浏览器缓存控制的时间戳中出了点问题.....它正在寻找不存在的文件.....
browser errors
最佳答案
负载平衡器会将流量发送到任何被认为正常(通过就绪探针)的Pod。此分发由k8s服务处理。根据您当前的部署计划,将在删除任何旧容器之前创建具有新版本的新容器。在准备好新的 pods (通过readinessProbe)之前,不会删除旧的 pods 。如果在此窗口期间将请求发送到您的应用程序,则很可能有流量流向您的旧应用程序。
如果您有多个 pods ,则此过程将花费更长的时间,因为新 pods 一次推出1个,而旧 pods 则以相同的速度卸下。只要有一个Pod在就绪状态下运行旧版本,就有可能将流量定向到该Pod。
确保所有流量都流向新应用程序的唯一真实方法是立即执行完整部署(如果有3个容器,请将maxUnavailable设置为3)。这将导致短暂的停机时间(持续时间很长,直到您的Pod就绪为止),但将确保没有流量流向您的旧版本。
另外,您可以通过使用不同的标签(例如version=1.1
)使用新版本创建第二个部署来进行蓝绿色部署。所有Pod就绪后,更新服务定义以指向新标签。所有流量将立即切换,而不会造成停机。
关于javascript - GKE交通管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62451088/