Kubernetes設計的4個原則
引言:
原則1. Kubernetes APIs
是宣告性的而非命令性的
使用者:提供一系列的指令來驅動系統達到制定狀態。
系統:執行指令
使用者:監控系統,根據系統狀態,提供進一步的指令
使用者:定義期望的狀態
系統:向著指定的狀態工作
下圖是一個宣告式API的例子:
1、使用者建立一個API物件
2、所用的元件並行工作來達到該狀態。
宣告式的API支援自動恢復。例如:
2、系統自主地把Pod移動到健康的節點A上
原則2. Kubernetes控制平面
是透明的,沒有隱藏的內部API
主節點:提供一系列的指令來驅動節點達到制定狀態。
節點:執行主節點發來的指令
主節點:監控每一個節點,根據節點狀態,提供進一步的指令
主節點:定義想要達到的狀態
節點:獨立工作以達到主節點定義的狀態
Scheduler透過API觀察到Pod A的定義,透過排程運算,決定要在Node B上建立Pod A,並透過API更新主節點上的Pod A的定義。
原則3. 滿足使用者的需求
應用程式必須被修改為知道K8s的存在,呼叫KubeAPI
應用程式可以從環境變數載入配置檔案或者密匙檔案,所以不需要修改
我們可以舉一個例子,是關於遠端儲存的。
如上圖所示,Pod可以直接引用一個遠端的儲存卷(GCE PD,AWS EBS,NFS等),kubernetes會自動使得該卷被用於Pod。但是這樣做的話,有一個問題,如果你要遷移到一個新的基礎架構上,那麼它就不工作了。於是這就引入了kubernetes設計的第四個原則:
原則4. 可移植的工作負載
持久卷(PersistentVolumn,PV)和持久卷宣告(PersistenVolumnClaim, PVC)就是這樣一個例子。
如上圖所示,透過PVC的抽象,使用者Pod並不直接引用GCE PD或者EBS,這樣就使得該Pod可以在不同的基礎架構中互相遷移,做到可移植。就像作業系統一樣,該設計使得系統應用和底層的硬體或者架構實現分離解耦。
總結
Kubernetes APIs 是宣告性的而非命令性的
Kubernetes控制平面是透明的,沒有隱藏的內部API
滿足使用者的需求
可移植的工作負載
物件要對自己負責。在設計物件的時候,物件應該儘可能的封裝內部的狀態,對自己負責,我們設計一輛可行駛的車。一種設計是兩個物件,driver和car,然後diver.run(car)。而更好的設計是 不需要driver,或者把dirver看成Car的一個屬性,這樣就是Car.run()。第二種設計更符合物件導向的設計原則。這正是宣告式API背後的原則,元件對自己負責
Kube API類似物件的介面,物件對修改封閉,對擴充套件開放。透過開放的API,使用者可以很容易的實現功能擴充套件,但是你無法修改已有的元件,你可以開發自定義的元件來替換已有的元件
可移植性的設計利用了類似物件導向的多型,同多定義抽象介面PVC,隱藏具體的實現細節。
參考:
(該分享的影片,已新增中英文字幕)
關於作者:陶剛,Splunk資深軟體工程師,架構師,畢業於北京郵電大學,現在在溫哥華負責Splunk機器學習雲平臺的開發,曾經就職於SAP,EMC,Lucent等企業,擁有豐富的企業應用軟體開發經驗,熟悉軟體開發的各種技術,平臺和開發過程,在商務智慧,機器學習,資料視覺化,資料採集,網路管理等領域都有涉及。
關於EAWorld:微服務,DevOps,資料治理,移動架構原創技術分享。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562043/viewspace-2672530/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微服務的4個設計原則和19個解決方案微服務
- 設計模式的七大原則(4) --里氏替換原則設計模式
- 小話設計模式原則之(4):開閉原則OCP設計模式
- 產品設計的 3 個原則
- 產品設計的八個原則
- 設計模式六大原則(4):介面隔離原則設計模式
- 物件導向設計原則,以及包的設計原則物件
- 設計十誡:產品設計的10個原則
- 設計模式的設計原則設計模式
- 優秀程式設計的18個原則程式設計
- 設計原則
- Google的設計原則Go
- 設計原則:開閉原則(OCP)
- 實時響應設計的幾個原則
- 設計原則 設計模式設計模式
- 設計模式 - 設計原則設計模式
- 【設計模式】設計原則設計模式
- 平面廣告創意設計4大原則!
- 微服務架構的4大設計原則和一個平臺實踐微服務架構
- 【設計原則】物件導向程式設計的六大原則物件程式設計
- 設計原則:介面隔離原則(ISP)
- 設計原則之【介面隔離原則】
- 設計原則-依賴反轉原則
- URI設計原則
- Hbase 設計原則
- 程式設計原則程式設計
- XP設計原則
- 安全設計原則
- JavaScript 的 API 設計原則JavaScriptAPI
- MySQL 索引的設計原則MySql索引
- 這個設計原則,你認同嗎?
- 我設計資料庫常用的幾個原則資料庫
- 導航設計的15個UX指導原則UX
- 谷歌大牛 Rob Pike 的 5 個程式設計原則谷歌程式設計
- 掌握4C原則,設計高效的系統架構架構
- 奈學開發者社群分享:Java - 設計模式的7個設計原則Java設計模式
- 每個程式設計師都必須遵守的程式設計原則程式設計師
- 設計原則之【依賴反轉原則】