[英]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.js
和1.0.css
(我們將使用版本而不是哈希值以使其更易於閱讀)。1.0.js
,他照做了。 循環 nginx 會將請求分派給另一個也是1.0
版本的 Pod,他可以檢索資源。部署期間損壞:
2.0
版,提供全新的2.0
前端( 2.0.js
和2.0.css
)1.0
和2.0
)的 Pod2.0
Pod 上完成。 該站點告訴他請求2.0.js
,他照做了。 循環 nginx 會將對2.0.js
的請求分派到手頭沒有資源的1.0
Pod——請求失敗(404,反過來也會失敗)。部署后很好:
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.