中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Kubernetes部署期間正確處理DB模式

發布時間:2022-01-14 17:46:29 來源:億速云 閱讀:119 作者:小新 欄目:大數據

這篇文章主要介紹怎么在Kubernetes部署期間正確處理DB模式,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

正文:

Architecture(架構)

讓我們思考一下以下“two-tier”場景。

  •   一個具有多個無狀態微服務副本的“應用程序層”

  •   一個具有一個數據庫的“數據庫層”(在實際生產中,為了冗余可能還有多個副本)

  •   有一個用于創建和讀取用戶的API

  • “數據庫層”負責數據持久化

怎么在Kubernetes部署期間正確處理DB模式

實施:自頂向下

Services(服務)

上圖所示的應用層和數據庫層通過底層服務實現,Services本質提供:

  •   DNS名稱,以便可以輕松將請求發送到“tier”

  •   將請求透明路由到底層Pods

Pods

微服務和數據庫的運行都是在一個封閉的容器內,以達到資源隔離。這些容器本身封裝在Pods中,Pods是Kubernetes中最小的可部署單元。

Deployments(部署)

配置Pod副本的數量以及其生命周期的管理是由部署完成的,這是我們解決問題需要注意的一點。

Database Migrations(數據庫遷移)

但當您更改微服務代碼時,您還需要更改數據模式使其適配。一個簡單的方法就是通過數據庫遷移。步驟如下:

1.       將您的架構版本化;

2.       將每個更改寫入專用腳本(也被稱為“migration”)模式中,該腳本可以通過版本號識別;

3.       將所有的腳本與代碼打包;

4.       在啟動時,檢查您的架構版本,如果它已經過期,應用必要的遷移,以便與模式匹配。

這種方法的優點:

  •   簡單:在運行時不會引入新的移動基礎架構;

  •   易于部署:在開發、測試和生產階段,您都將擁有正確的版本模式。

目前效果

Kubernetes讓我們很容易的就實現了上述設置,它為我們完成了很多復雜工作,將整個工序簡化了很多。

實際上,上面描述的整個“應用程序層”基本上都是在以下兩個YAML清單中配置的:

怎么在Kubernetes部署期間正確處理DB模式

但是,上面的內容并不能提供所有您需要的特性,您也許想問如下一些問題:

  •  在部署新版本期間會發生什么?會出現宕機嗎?容量如何變化?

  •  如果犯了一個錯誤,新版本在部署時崩潰怎么辦?

  •  如果微服務在運行一段時間后崩潰,會發生什么?

  •  如果需要回滾應該怎樣做?

現在就讓我們解答一下這些問題:

實施:細節決定成敗!

Rolling Out(推出)

默認情況下,Kubernetes使用“rolling update”策略部署Pod,一次刪除1個舊Pod(maxUnavailable: 1)并添加1個新Pod(maxSurge: 1),這意味著有3個副本,在滾動新版本時,您將暫時失去33%的能力去服務終端用戶。

讓我們通過將maxUnavailable更改為0來解決此問題。首先,Kubernetes將部署一個新的Pod,并且只有在部署成功時才能刪除舊的Pod。但缺點是,集群中需要備用的容量來臨時運行這個額外的副本,所以如果您容量已滿,則可能需要添加額外的節點。

但優點是,理論上零停機不會對終端用戶產生影響。

Readiness(準備就緒)

當Kubernetes認為它已經“準備好(ready)”時,它會在其服務器負載均衡中添加一個Pod。默認情況下,“ready”只意味著Pod的所有容器已經啟動,Kubernetes可以執行它們。但是,如果要建立數據庫的連接,并在啟動時運行模式遷移,可能會需要一段時間,很顯然我們需要更好的定義"ready"。

從業務的角度看,我們的微服務已經準備就緒,可以開始響應終端用戶的請求。因此,我們可以通過配置 HTTP readinessProbe將確切的信息告訴Kubernetes 。此外,我們需要在啟動HTTP服務器之前創建數據庫連接并運行遷移。

一般來說,在每個Pod推出后稍等片刻也不是什么壞事。

現在,如果我們在啟動時崩潰了,或者無法連接到數據庫,新部署失敗的Pod將不會被添加到“應用程序層”的負載均衡中,而rollout將在那里停止。這意味著,即使在這個階段出現問題也不會影響到最終用戶。

Liveness(活躍度)

Kubernetes還會定期檢查Pod是否還“活著”,默認情況下也是如此。在我們的示例中,如果數據庫客戶端以某種方式進入損壞狀態,我們也許希望Kubernetes從負載均衡器中刪除受影響的pod,然后啟動一個新的。這可以通過添加檢查(理想情況下,會代表系統的健康狀況)、將其揭示給Kubernetes或者配置一個livenessProbe來實現。

Rolling back(回滾)

但是如果操作失敗,你也許想要回滾到最新的工作版本。良好的工程實踐可以幫助實現這一點。在我們的場景中,最主要的是我們微服務數據庫模式的向后兼容性。

例如,添加列并明確選擇列,我們將可以在最新模式下運行先前版本的微服務,并且允許從v1.1.0平穩回滾到v1.0.0,而無需更改任何模式。

重命名列將不能向后兼容。在這種情況下,您也許想使用“down migrations”恢復到以前的架構版本。但需要注意的是,前后滾動將打破“零停機時間”。實際上,終端用戶會遇到各種暫時性錯誤,這取決于他們部署的階段和遇到的副本。如果您不能接受這樣的錯誤,你可能需要先推出一個能夠同時支持新舊兩種模式的微服務版本(通過擁有兩個客戶端,選擇正確的一個或者同時嘗試兩個),然后推出具有遷移性的另一個版本,以便進行模式更改。

這中間可能會出現很多問題,所以需要你仔細測試一下。

對于大型系統,您可能需要研究“blue-green deployments(藍綠部署)”,但這實現起來會很困難。

少說話,多行動!

想要實現這些設置,可以參考以下建議。

我們建議使用Weave Cloud,因為它可以使前后滾變得簡單易行,并且還可以在您更改系統時提供完整的系統可觀性。

例如,您可以使用Weave Cloud可視化設置:可以在推出新版本的微服務時,確保新副本正在處理流量:

怎么在Kubernetes部署期間正確處理DB模式

怎么在Kubernetes部署期間正確處理DB模式

并且您可以任意查詢收集到的指標,并清楚的看到新版本(藍色垂直線)的影響。

怎么在Kubernetes部署期間正確處理DB模式

以上是“怎么在Kubernetes部署期間正確處理DB模式”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中超| 邛崃市| 新晃| 个旧市| 延津县| 法库县| 永德县| 灵璧县| 疏附县| 盘山县| 龙川县| 泾源县| 武安市| 友谊县| 广东省| 仁布县| 陈巴尔虎旗| 新蔡县| 海口市| 理塘县| 云林县| 佛教| 井冈山市| 亚东县| 高青县| 巴彦县| 盐池县| 梅州市| 桐城市| 和龙市| 津南区| 马关县| 正定县| 通许县| 阿图什市| 博罗县| 潞城市| 雅安市| 法库县| 嘉禾县| 绩溪县|