簡體   English   中英

如何在 kube.netes 中無縫部署帶有散列資源的 web 應用程序?

[英]How do I seamlessly deploy a web app with hashed resources in kubernetes?

我想部署一個使用 vue.js 前端的 Java 應用程序。 目前,我在 Deployment、ClusterIp Service 和 nginx Ingress 中使用多個 pod。 Ingress 以循環模式運行。

問題如下:

部署前很好:

  • 該應用程序部署在版本1.0中。
  • 1.0版提供了一個前端,它使用一些名稱中帶有哈希值的資源——我們只說1.0.js1.0.css (我們將使用版本而不是哈希值以使其更易於閱讀)。
  • 用戶請求站點,站點告訴他請求1.0.js ,他照做了。 循環 nginx 會將請求分派給另一個也是1.0版本的 Pod,他可以檢索資源。

部署期間損壞:

  • 部署了2.0版,提供全新的2.0前端( 2.0.js2.0.css
  • 在部署期間,集群中至少有兩個具有不同版本( 1.02.0 )的 Pod
  • 用戶請求站點並在2.0 Pod 上完成。 該站點告訴他請求2.0.js ,他照做了。 循環 nginx 會將對2.0.js的請求分派到手頭沒有資源的1.0 Pod——請求失敗(404,反過來也會失敗)。

部署后很好:

  • 部署完成,所有pod都是2.0版本
  • 沒有更多的請求失敗。

所以在開發過程中,請求會不斷失敗。 有兩個 pod,大約 50% 的時間用戶會收到 404。這不僅是散列資源(webpack 等)的問題,而且還有僅在 pod 版本上提供的所有其他資源的問題。

有沒有辦法減少這些失敗的請求? 可能在部署到新 Pod 期間限制新請求? 我研究了 Ingress/Service LB 但一無所獲,我是不是忽略了重點?

這是因為您有RollingUpdate部署策略。

您可以嘗試實施Canary藍綠部署,我認為這將解決您的問題。

對於 Nginx 入口,實現金絲雀和藍綠是很棘手的,但是邏輯就像,一旦您的所有 v2 POD 部署到集群,您就更新服務的標簽,因此服務只會將流量轉發到V2版本的 pod。

通過更改服務中的標簽的簡單示例: https://www.sivalabs.in/2021/09/kube.netes-blue-green-deployments/

以上是最簡單的解決方案,你可以使用服務label來管理流量和版本。

或者

除了 Nginx 入口,您還可以使用 Istio 服務網格或 HAproxy 來很好地管理流量路由

帶有金絲雀部署的 Istio 示例: https://www.digitalocean.com/community/tutorials/how-to-do-canary-deployments-with-istio-and-kube.netes

具有藍/綠部署的 Istio 示例: https://thenewstack.io/tutorial-blue-green-deployments-with-kube.netes-and-istio/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM