Kubernetes面向初學(xué)者的架構(gòu)介紹
要開始使用Kubernetes?看看這個關(guān)于Kubernetes架構(gòu)基礎(chǔ)知識的快速入門指南,以及一開始就應(yīng)該知道的關(guān)鍵內(nèi)容
Kubernetes作為一個強大的平臺,特別是對于云原生應(yīng)用來說,其聲譽當之無愧。它提供了一系列豐富、靈活的功能。這種聲譽也包括了一個學(xué)習(xí)曲線,對于初學(xué)者來說,尤其是當你試圖用開源平臺走自己的路時,學(xué)習(xí)曲線可能會很陡峭。
Aqua security的聯(lián)合創(chuàng)始人兼首席技術(shù)官Amir Jerbi表示:“Kubernetes的初始設(shè)置看似簡單,但要根據(jù)你的需求、規(guī)模和安全性正確配置卻相當復(fù)雜。”“作為一個開源項目,它故意松散地結(jié)合在一起,有一些令人困惑的選項。”
這些選項確實是編排工具強大功能的一部分:你擁有唾手可得的強大功能,而且數(shù)量很多。從長遠來看,Kubernetes可以簡化DevOps團隊管理容器化工作負載的負擔(dān)。如果沒有業(yè)務(wù)流程平臺,容器和微服務(wù)可能會產(chǎn)生大量的操作開銷。但在短期內(nèi),這可能會讓人感到難以承受。
Kubernetes架構(gòu)。從哪里開始
"Kasten公司的工程負責(zé)人Tom Manville說:"Kubernetes提供了一組非常豐富的抽象集,有效地說是軟件基元,可以自動實現(xiàn)計算、存儲、網(wǎng)絡(luò)和其他基礎(chǔ)架構(gòu)服務(wù)的功能",“在很多方面,開發(fā)人員在這些領(lǐng)域的思考較少,但他們需要學(xué)習(xí)Kubernetes如何定義和自動化這些功能,以便他們適當?shù)卣{(diào)用這些功能。”
“如今,Kubernetes中沒有一種抽象可以使基礎(chǔ)系統(tǒng)更容易理解。它們只會使它們更易于使用。” Red Hat OpenShift首席技術(shù)營銷經(jīng)理Chris Short說。你和你的團隊應(yīng)該準備好從錯誤、筆記中學(xué)習(xí)。
如果你剛剛開始,那么一定要了解Kubernetes架構(gòu)的基礎(chǔ)知識,并了解你需要做出的一些選擇。熟悉Kubernetes的老手們可能會覺得這很簡單,但有成千上萬的IT專家仍然是這個平臺的新手。這是一個關(guān)于Kubernetes架構(gòu)的基礎(chǔ)知識的快速入門,以及其他一些一開始就需要知道的關(guān)鍵內(nèi)容。
“在提供這些功能時,Kubernetes具有使用人員需要學(xué)習(xí)的不同架構(gòu)組件– Kubernetes的控制面板以及在每個節(jié)點上運行的控制平面,” Manville說。“他們(還)需要了解如何保護包括API服務(wù)器在內(nèi)的主組件,因為要處理許多關(guān)鍵功能。”
讓我們利用來自Manville等人的更多專家見識為這種理解奠定基礎(chǔ)。
Kubernetes基礎(chǔ)知識:節(jié)點(Nodes)和集群(Clusters)
Kubernetes本質(zhì)上具有客戶端-服務(wù)器體系結(jié)構(gòu)–只是該術(shù)語可能與你熟悉的其他系統(tǒng)有些不同。這里的一個關(guān)鍵概念是一個節(jié)點:每個Kubernetes集群都包含一個主節(jié)點和至少一個工作節(jié)點。(一個群集通常將包含多個工作程序節(jié)點。)
主節(jié)點本質(zhì)上是操作的大腦:它控制著你想要的狀態(tài),一切都從中得到。工作節(jié)點是運行實際應(yīng)用程序和工作負載的物理機或虛擬機。
“Kubernetes有兩個目標:成為集群管理員和資源管理員,”開發(fā)人員Ravi Lachhman解釋說。Kubernetes使用的是一個從主節(jié)點到工作節(jié)點的模型,這意味著工作節(jié)點是可伸縮和可使用的。Kubernetes架構(gòu)可以針對不同的工作負載使用不同的工作節(jié)點大小,因此資源管理器部分將在你的集群中找到一個合適的位置來執(zhí)行工作。”
主節(jié)點包含三個關(guān)鍵組件:Kubernetes API服務(wù)器,調(diào)度器和控制器管理器。完整的Kubernetes控制面板還包括etcd和kubectl。后者是Kubernetes的用于管理集群的命令行界面。從本質(zhì)上講,就是告訴主節(jié)點要做什么的方式。
同時,工作程序節(jié)點包括kubelet,kube-proxy和你運行的容器。Kubernetes官方文檔提供了一個有用的圖表(圖一),顯示了主節(jié)點和工作節(jié)點之間的關(guān)系,包括每個組件。
圖一:Kubernetes主節(jié)點和工作節(jié)點之間的關(guān)系
這是每個集群的基本設(shè)置:一個主節(jié)點和至少一個(可能是多個)工作節(jié)點或工作機,它們可以是虛擬的也可以是物理的。
現(xiàn)在讓我們談?wù)勂脚_和安全選擇:
評估重要的平臺和安全選擇
考慮到這一點,你需要做出一些關(guān)鍵的設(shè)計選擇。一個基本的問題是:你是在Kubernetes中為每個應(yīng)用程序運行一個單獨的集群,還是在同一個集群中管理多個應(yīng)用程序?兩者都是可能的;來自Aqua Security的Jerbi指出,這是關(guān)鍵的架構(gòu)考慮因素之一,通常它會帶來一些優(yōu)點和缺點。
Jerbi說:“多租戶模型稍微復(fù)雜一點,通常使用K8s命名空間在應(yīng)用程序之間創(chuàng)建管理隔離,但是在資源利用方面更加有效。” “另一方面,如果你的應(yīng)用程序本身是大型的,并且沒有太多共同之處,那么設(shè)置單獨的集群會更容易,尤其是對于初學(xué)者而言。”
Jerbi還補充道:如果你正在使用商業(yè)或托管的Kubernetes服務(wù),則后者尤為正確,并且還可以使你更好地針對特定應(yīng)用調(diào)整資源和安全需求。、
來自Kasten的Manville指出,即使你選擇運行在開源Kubernetes項目之上的商業(yè)平臺來減少日常管理工作,你仍然有必要了解底層系統(tǒng)。并且采用這種方法并不能使他們擺脫對Kubernetes及其功能的了解。“
安全是另一個你需要做出重要決定的領(lǐng)域。
Manville說:“對于Kubernetes來說,安全本身就是一個有趣的學(xué)習(xí)曲線。這個平臺支持很多本地控件,但它們在默認情況下不一定是安全啟用的,而且不容易上手。“
隨著速度和規(guī)模的增長,請記住Kubernetes是“可擴展的”和“可插拔的”。這又回到了選擇的問題上: 它不是一種千篇一律的工具。
“當我剛開始時,花了一段時間才意識到Kubernetes的可插拔性是很高的,” Harness的Lachhman說。“如果你不同意Kubernetes平臺內(nèi)部的意見或?qū)嵤瑒t可以替換大多數(shù)項目。例如,不喜歡Kubernetes如何處理Ingress?你可以換出其他提供商,例如Istio或Traefik。”
比較點:Kubernetes與云計算
Manville為抽象地思考Kubernetes提供了一個有趣的參考點:云本身。簡而言之:既相似又不同。
Manville說:“就云的異同而言,它提供了一個有趣的比較。” “ Kubernetes在提供抽象和原語以編程方式配置基礎(chǔ)結(jié)構(gòu)功能方面就像云一樣,但是Kubernetes與云的不同之處在于,它不僅限于基礎(chǔ)結(jié)構(gòu),還具有可擴展的工作負載對象/資源模型-這些是標準化對象,例如Deployments和Pod 同時也指定了應(yīng)用程序之間的接口方式。”
這是令人眼花繚亂的選擇菜單的另一層。從大的方面來看,這是一件好事,包括提高安全性,但一開始可能令人畏懼。
“這種差異使開發(fā)人員對工作負載功能具有非常明確的規(guī)定,從而可以對重要的控件和安全策略進行檢測,” Manville說。“開發(fā)人員可以使用這些功能在生命周期的早期確保更大的工作負載安全性,但他們還需要意識到保護環(huán)境所需的配置并不總是很明顯。”