k8s其它學習鏈接 k8s基礎之六 有狀態和無狀態的區別

 

 

k8s彈性伸縮概念以及測試用例

https://www.cnblogs.com/jasonboren/p/11493347.html

 

 

 

k8s基礎之六 有狀態和無狀態的區別

 

無狀態

(1)、是指該服務運行的實例不會在本地存儲需要持久化的數據,並且多個實例對於同一個請求響應的結果是完全一致的。

(2)、多個實例可以共享相同的持久化數據。例如:nginx實例,tomcat實例等

(3)、相關的k8s資源有:ReplicaSet、ReplicationController、Deployment等,由於是無狀態服務,所以這些控制器創建的pod序號都是隨機值。並且在縮容的時候並不會明確縮容某一個pod,而是隨機的,因爲所有實例得到的返回值都是一樣,所以縮容任何一個pod都可以

 

有狀態

(1)、寵物和牛的類比,農場主的牛如果病了可以丟掉再重新買一頭,如果寵物主的寵物病死了是沒法找到一頭一模一樣的寵物的。

有狀態服務 可以說是 需要數據存儲功能的服務、或者指多線程類型的服務,隊列等。(mysql數據庫、kafka、zookeeper等)

(2)、每個實例都需要有自己獨立的持久化存儲,並且在k8s中是通過申明模板來進行定義。持久卷申明模板在創建pod之前創建,綁定到pod中,模板可以定義多個。

 

 

說明

(1)、有狀態的 pod是用來運行有狀態應用的,所以其在數據捲上存儲的數據非常重要,在 Statefulset縮容時刪除這個聲明將是災難性的,特別是對於 Statefulset來說,縮容就像減少其 replicas 數值一樣簡單。基於這個原因,當你需要釋放特定的持久卷時,需要手動刪除對應的持久卷聲明。

(2)、相關的k8s資源爲:statefulSet,由於是有狀態的服務,所以每個pod都有特定的名稱和網絡標識。比如pod名是由statefulSet名+有序的數字組成(0、1、2..)

(3)、在進行縮容操作的時候,可以明確知道會縮容哪一個pod,從數字最大的開始。並且Stat巳fulset 在有實例不健康的情況下是不允許做縮容操作的。

StatefulSet 縮容任何時候只會操作 一個 pod 實例,所以有狀態應用的縮容不會很迅速。舉例來說, 一個分佈式存儲應用若同時下線多個節點 ,則可能導致其數據丟失 。 比如說一個數據項副本數設置爲 2 的數據存儲應用, 若 同時有兩個節點下線,一份數據記錄就會丟失,如果它正好保存在這兩個節點上 。 若縮容是線性的 ,則分佈式存儲應用就有時間把丟失的副本複製到其他節點 ,保證數據不會丟失。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章