我在我的Kubernetes集群中运行了在nginx容器中烘焙的react应用程序。
每次我合并一个pull request时,我的CI/CD进程都会用静态文件创建一个新的容器镜像,并替换部署中的targetRevision(我使用ArgoCD)。我的部署使用2个副本和默认rollingUpdate策略(25% maxSurge和25% maxUnavailable)运行。
我注意到,在部署期间,在提供以前版本的静态文件(例如,GET /static/js/635.2a6f7fb8.js.map HTTP/1.1
)时,我会收到1-3个404错误
如果我理解正确,这些错误来自客户端请求以前的静态文件版本,所以我正在探索解决这个问题的方法。一个想法是在s3/efs中配置nginx回退到静态文件。这意味着,我的CI过程将复制(修改)新的静态文件到一个存储所有以前版本的地方(s3)-我不喜欢这个选项,因为它使我的CI复杂化。
我真的很喜欢我的静态文件被放在容器镜像中,因为它非常快速,使我的CI干净简单。
你能提出另一个想法吗?
更新-大多数提到的404错误都与LogRocket-AssetCacher有关,而不是真实的用户,但仍然是我想修复的问题
1条答案
按热度按时间tmb3ates1#
如果你的index.html没有被缓存,那么一旦新的容器包含了最新的资源,它就应该能够提供新的静态文件版本,这是由新的index.html请求的。
因此任何新的页面刷新都应该能够加载所需的资产。
404只有在副本大于2时才会出现,然后用户可以加载旧的index.html,然后尝试从新容器加载旧的静态资产。
如果您有>2个容器,且您想避免这些情况,那么不要进行滚动部署。而是选择蓝色绿色。