Reactjs 如果我将kubernetes部署扩展到3,前端应用程序将显示空白页

Reactjs 如果我将kubernetes部署扩展到3,前端应用程序将显示空白页,reactjs,kubernetes,kubernetes-ingress,kops,Reactjs,Kubernetes,Kubernetes Ingress,Kops,我有一个前端应用程序,当我只有一个应用程序实例在kubernetes集群中运行时,它工作得非常好。但是,当我将部署扩展到有3个副本时,它在第一次加载时显示一个空白页,然后在刷新后加载该页。一旦我将应用程序缩小到1,它就会再次开始正常加载。 以下是控制台在浏览器中打印的内容 hub.xxxxx.me/:1拒绝从“”执行脚本,因为其MIME类型(“text/html”)不可执行,并且启用了严格的MIME类型检查 同时添加屏幕截图。你知道可能是什么情况吗。我知道这是一个基础设施问题,因为只有在扩展应

我有一个前端应用程序,当我只有一个应用程序实例在kubernetes集群中运行时,它工作得非常好。但是,当我将部署扩展到有3个副本时,它在第一次加载时显示一个空白页,然后在刷新后加载该页。一旦我将应用程序缩小到1,它就会再次开始正常加载。 以下是控制台在浏览器中打印的内容

hub.xxxxx.me/:1拒绝从“”执行脚本,因为其MIME类型(“text/html”)不可执行,并且启用了严格的MIME类型检查

同时添加屏幕截图。你知道可能是什么情况吗。我知道这是一个基础设施问题,因为只有在扩展应用程序时才会发生

我注意到的一点是,两个pod的js文件与另一个pod不同

2个pod有这个文件-build/static/js/main.b6aff941.js

另一个pod有这个文件-build/static/js/main.5a4e61df.js

我认为错配是造成问题的原因。你知道如何解决这个不匹配的问题,使吊舱始终具有相同的构建吗

我认为错配是造成问题的原因。你知道如何解决这个不匹配的问题,使吊舱始终具有相同的构建吗

是的,这在构建中是很常见的,在构建中,这些资源会发生这样的变化。实际上,您不想使用传统的滚动更新机制,因为您的部署更接近蓝绿色:一次只能有一个“系列”的Pod在使用,否则Pod 1中的html将被提供,但Pod 2中对javascript的后续请求是404

浏览器拥有HTML缓存副本的风险也相当严重,但kubernetes本身无法帮助您实现这一点

一个相当合理的解决方案是将部署扩展到一个副本,进行映像修补,等待a-ok,然后将其重新扩展,这样一次在集群中运行的应用程序只有一个真实来源。回滚看起来非常相似:缩放1、回滚部署、放大

另一种机制是使用标签修补,以原子方式将
服务
(以及可能的
入口
)一次性切换到新的POD,但这需要在集群中同时拥有多个应用程序副本,对于前端应用程序来说,这可能比它的价值更麻烦

我认为错配是造成问题的原因。你知道如何解决这个不匹配的问题,使吊舱始终具有相同的构建吗

是的,这在构建中是很常见的,在构建中,这些资源会发生这样的变化。实际上,您不想使用传统的滚动更新机制,因为您的部署更接近蓝绿色:一次只能有一个“系列”的Pod在使用,否则Pod 1中的html将被提供,但Pod 2中对javascript的后续请求是404

浏览器拥有HTML缓存副本的风险也相当严重,但kubernetes本身无法帮助您实现这一点

一个相当合理的解决方案是将部署扩展到一个副本,进行映像修补,等待a-ok,然后将其重新扩展,这样一次在集群中运行的应用程序只有一个真实来源。回滚看起来非常相似:缩放1、回滚部署、放大


另一种机制是使用标签修补,以原子方式将
服务
(以及可能的
入口
)一次性切换到新的POD,但这需要在集群中同时拥有多个应用程序副本,对于前端应用程序来说,这可能比它的价值更麻烦。

我希望所有的pod都应该有相同的信息,为什么'main.b6aff941.js'脚本只有两个pod可用?我希望所有的pod都应该有相同的信息,为什么'main.b6aff941.js'脚本只提供两个pod?你说的图像补丁是什么意思?
kubectl set image deploy$the_deploy“the_con=the/new/image:tag”
将触发一个新的
卷展
,就像你修补了
部署
本身一样(当然,这是该命令在幕后所做的)谢谢,这真的很有帮助。这让我想到了另一种解决方法。如果我错了,请纠正我。我有一个gitlab runner构建映像,然后kubernetes将其拉入并部署。我在部署映像时正在构建源代码,这对我来说是一个糟糕的设计。我将创建一个预构建的代码,然后在部署过程中运行该代码。我认为这也应该解决问题。有什么想法吗?这是一个比健康的评论更大的问题,但是tl;dr是的,进入集群的图像应该是来自nginx的
,只需发送由CI构建的html附带资产,否则您将面临一些暂时性失败的风险,从而破坏静态网站的推出,这将是非常奇怪的,您所说的图像补丁是什么意思?
kubectl set image deploy$the_deploy“the_con=the/new/image:tag”
将触发新的
卷展
,就像您修补
部署
本身一样(当然,这是该命令在幕后所做的)谢谢,这真的很有帮助。这让我想到了另一种解决方法。如果我错了,请纠正我。我有一个gitlab runner,它构建了映像,然后kubernetes将其提取并部署。我在部署映像时构建了源代码,这对我来说是一个糟糕的设计。我将只创建一个预构建的代码,然后运行代码d太长了,读不下去了。我觉得这也应该解决这个问题。有什么想法吗?这是一个比评论更健康的问题,但是TL;Dr是,IMA。