gpt4 book ai didi

kubernetes - k8s 加速部署——来自同一个 pod 的 css

转载 作者:行者123 更新时间:2023-12-04 14:08:23 25 4
gpt4 key购买 nike

我有一个 webapp在 Kubernetes 上运行 2 个 pod。

我使用来自 webapp:v1 的新镜像版本编辑我的部署至 webapp:v2 .

我在推出过程中发现了一个问题...

podA is v2
podB is still v1

html is served from podA
with a <link> to styles.css

styles.css is served from podB
with v1 styles

=> html v2 + css v1 = 💥

我如何保证所有后续请求都将从同一个 pod 或具有与 html 服务相同版本的 pod 提供服务?

最佳答案

How can I be guaranteed, that all subsequent requests will be served from the same pod, or a pod with the same version that the html served?



即使你这样做,你仍然会遇到问题。特别是如果您的应用程序是单页应用程序。考虑一下:
  • 用户进入您的网站,获取index.html v1
  • 你发布了 webapp:v2。几分钟后,所有 pod 都在运行 v2。
  • 用户仍然打开了 webapp,有 index.html v1
  • 用户在应用程序中导航。这需要加载 styles.css .用户获取styles.css v2.繁荣,你正在混合版本,失败。

  • 我在生产中遇到了这个问题,解决起来很痛苦。根据我的经验,最好的解决方案是:
  • 使用版本后缀(例如 styles.css -> styles-v1.css 或文件内容的哈希 styles-39cf1a0b.css )标记所有资源(css、js、imgs 等)。许多工具如 webpack、gulp 等都可以自动执行此操作。
  • index.html没有标记,但它确实引用了具有正确标记的其他资源。
  • 部署时,不要删除旧版本的资源,只需将它们与最新的资源合并即可。确保客户拥有旧的 index.html仍然可以成功获得它们。
  • 删除几个版本后的旧资源,或者更好,一段时间后(可能是 1 周?)。

  • 有了这个,上面的场景现在可以正常工作了!
  • 用户进入您的网站,获取index.html v1
  • 你发布了 webapp:v2。这将取代 index.html ,但保留所有 js/css,添加带有新版本后缀的新 js/css。
  • 用户仍然打开了 webapp,有 index.html v1
  • 用户在应用程序中导航。这需要加载 styles-v1.css , 加载成功并匹配 index.html 版本。没有版本混合=好!
  • 下次用户重新加载页面时,他们会收到 index.html v2,指向新的 styles-v2.css等还是没有混版!

  • 用 kubernetes 做这个有点棘手,你需要让你的镜像构建过程从一些旧镜像中获取文件并将它们包含在新镜像中,这有点奇怪。

    另一个解决方案是停止从 pod 提供您的 html/css/js,而是从 blob 存储提供它。 (亚马逊 S3、谷歌云存储等)。这样,部署只是复制所有文件,这些文件与旧文件合并,为您提供所需的行为。

    关于kubernetes - k8s 加速部署——来自同一个 pod 的 css,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56438315/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com