如果我将kubernetes部署规模扩大到3,则前端应用程序将显示空白页面

时间:2019-02-02 20:17:47

标签: reactjs kubernetes kubernetes-ingress kops

我有一个前端应用程序时,我有一个kubernetes集群中运行的应用程序只有一个实例工作完全正常。但是,当我扩展部署有3个副本它显示了第一负载一个空白页面,然后刷新后,它加载页面。当我缩小了应用1,它再次开始加载的罚款。 这是控制台在浏览器中显示的内容。

  

hub.xxxxx.me/:1拒绝从执行脚本 'https://hub.xxxxxx.me/static/js/main.5a4e61df.js',因为它的MIME类型(文本/ html“)是不可执行的,严格的MIME类型检查被启用。

enter image description here 添加截图为好。任何想法可能是这样。我知道这是基础架构问题,因为只有在扩展应用程序时才会发生。

我注意到的一件事是2个Pod与另一个Pod具有不同的js文件。

  

2个吊舱有此文件 - 构建/静态/ JS / main.b6aff941.js

     

在其它荚具有该文件 - 构建/静态/ JS / main.5a4e61df.js

我认为不匹配是造成此问题的原因。知道如何解决此不匹配问题,以便吊舱始终具有相同的构造吗?

1 个答案:

答案 0 :(得分:1)

  

我认为不匹配是造成此问题的原因。知道如何解决此不匹配问题,以便吊舱始终具有相同的构造吗?

是的,这实际上在那些资源像这样变化的构建中很常见。实际上,您将不希望使用传统的滚动更新机制,因为您的部署接近于蓝绿色的部署:一次只能使用一个“系列”的Pod,否则需要使用 html ,但随后来自Pod 2的 javascript 请求是404

浏览器具有缓存的HTML副本也存在相当大的风险,但是kubernetes本身无法帮助您。

一个非常合理的解决方案是将Deployment扩展到一个副本,进行映像补丁,等待a-ok,然后将它们重新备份,因此在集群中运行的应用程序只有一个事实来源:一个时间。回滚看起来非常相似:扩展1,回滚部署,向上扩展

另一种机制是使用标签修补,将Service(可能因此Ingress)原子一次全部切换到新Pod,但这将需要具有多个副本同时在群集中使用该应用程序,对于前端应用程序来说,这可能比它值得的麻烦更多。