本篇內(nèi)容介紹了“Kubernetes設(shè)計的原則是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
引言:
今天我要帶給大家的是2018年底,在西雅圖舉辦的Kubecon的一場分享,來自谷歌K8s團隊的工程師Saad Ali分享的《Kubernetes設(shè)計原則》。這場會議雖然已經(jīng)過去一年多了,但是我覺得本會議的內(nèi)容非常值得學(xué)習(xí),我們大都知道K8s是如何工作的,但是本文帶我們了解k8s背后的設(shè)計原則,以及為什么要這樣設(shè)計。對于跨云和本地環(huán)境在分布式系統(tǒng)上管理和部署工作負載,Kubernetes很快變得不可或缺。雖然現(xiàn)在大多數(shù)人都熟悉如何使用Kubernetes,但很少有人知道其背后的“為什么”?為什么Kubernetes API看起來是這樣的?為什么Kubernetes組件僅通過Kubernetes API相互交互?當(dāng)您可以輕松地直接從pod引用卷時,為什么會有PersistentVolumeClaim對象?為了回答這些問題并幫助您對Kubernetes進行更深入的了解,本講座將揭示支撐Kubernetes設(shè)計的原理。原則1. Kubernetes APIs
是聲明性的而非命令性的
我們從最簡單的一個例子開始,要如何在一臺節(jié)點上啟動需要運行的任務(wù)。用戶:提供一系列的指令來驅(qū)動系統(tǒng)達到制定狀態(tài)。
系統(tǒng):執(zhí)行指令
用戶:監(jiān)控系統(tǒng),根據(jù)系統(tǒng)狀態(tài),提供進一步的指令
用戶:定義期望的狀態(tài)
系統(tǒng):向著指定的狀態(tài)工作
下圖是一個聲明式API的例子:
1、用戶創(chuàng)建一個API對象
2、所用的組件并行工作來達到該狀態(tài)。
聲明式的API支持自動恢復(fù)。例如:
1、節(jié)點B掛了2、系統(tǒng)自主地把Pod移動到健康的節(jié)點A上
原則2. Kubernetes控制平面
是透明的,沒有隱藏的內(nèi)部API
之前:主節(jié)點:提供一系列的指令來驅(qū)動節(jié)點達到制定狀態(tài)。
節(jié)點:執(zhí)行主節(jié)點發(fā)來的指令
主節(jié)點:監(jiān)控每一個節(jié)點,根據(jù)節(jié)點狀態(tài),提供進一步的指令
主節(jié)點:定義想要達到的狀態(tài)
節(jié)點:獨立工作以達到主節(jié)點定義的狀態(tài)
Scheduler通過API觀察到Pod A的定義,通過調(diào)度運算,決定要在Node B上創(chuàng)建Pod A,并通過API更新主節(jié)點上的Pod A的定義。
原則3. 滿足用戶的需求
之前:應(yīng)用程序必須被修改為知道K8s的存在,調(diào)用KubeAPI
應(yīng)用程序可以從環(huán)境變量加載配置文件或者密匙文件,所以不需要修改
我們可以舉一個例子,是關(guān)于遠程存儲的。
如上圖所示,Pod可以直接引用一個遠程的存儲卷(GCE PD,AWS EBS,NFS等),kubernetes會自動使得該卷被用于Pod。但是這樣做的話,有一個問題,如果你要遷移到一個新的基礎(chǔ)架構(gòu)上,那么它就不工作了。于是這就引入了kubernetes設(shè)計的第四個原則:
可移植的工作負載 ( Workload portability )原則4. 可移植的工作負載
持久卷(PersistentVolumn,PV)和持久卷聲明(PersistenVolumnClaim, PVC)就是這樣一個例子。
如上圖所示,通過PVC的抽象,用戶Pod并不直接引用GCE PD或者EBS,這樣就使得該Pod可以在不同的基礎(chǔ)架構(gòu)中互相遷移,做到可移植。就像操作系統(tǒng)一樣,該設(shè)計使得系統(tǒng)應(yīng)用和底層的硬件或者架構(gòu)實現(xiàn)分離解耦。
總結(jié)
本文總結(jié)了Kubecon 2018的一場由谷歌高級軟件工程師、kubernete開發(fā)人員Saad Ali分享的《Kubernetes設(shè)計原則》。其中的四個設(shè)計原則分別是:Kubernetes APIs 是聲明性的而非命令性的
Kubernetes控制平面是透明的,沒有隱藏的內(nèi)部API
滿足用戶的需求
可移植的工作負載
對象要對自己負責(zé)。在設(shè)計對象的時候,對象應(yīng)該盡可能的封裝內(nèi)部的狀態(tài),對自己負責(zé),我們設(shè)計一輛可行駛的車。一種設(shè)計是兩個對象,driver和car,然后diver.run(car)。而更好的設(shè)計是 不需要driver,或者把dirver看成Car的一個屬性,這樣就是Car.run()。第二種設(shè)計更符合面向?qū)ο蟮脑O(shè)計原則。這正是聲明式API背后的原則,組件對自己負責(zé)
Kube API類似對象的接口,對象對修改封閉,對擴展開放。通過開放的API,用戶可以很容易的實現(xiàn)功能擴展,但是你無法修改已有的組件,你可以開發(fā)自定義的組件來替換已有的組件
可移植性的設(shè)計利用了類似面向?qū)ο蟮亩鄳B(tài),同多定義抽象接口PVC,隱藏具體的實現(xiàn)細節(jié)。
“Kubernetes設(shè)計的原則是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
當(dāng)前名稱:Kubernetes設(shè)計的原則是什么-創(chuàng)新互聯(lián)
標題來源:http://jinyejixie.com/article14/ddside.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、外貿(mào)建站、App開發(fā)、服務(wù)器托管、商城網(wǎng)站、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容