Kubernetes-整體概述和架構

1、Kubernetes是什么

Kubernetes是一個輕便的和可擴展的開源平臺裳扯,用于管理容器化應用和服務夺克。通過Kubernetes能夠進行應用的自動化部署和擴縮容。在Kubernetes中嚎朽,會將組成應用的容器組合成一個邏輯單元以更易管理和發(fā)現(xiàn)。Kubernetes積累了作為Google生產(chǎn)環(huán)境運行工作負載15年的經(jīng)驗柬帕,并吸收了來自于社區(qū)的最佳想法和實踐哟忍。Kubernetes經(jīng)過這幾年的快速發(fā)展,形成了一個大的生態(tài)環(huán)境陷寝,Google在2014年將Kubernetes作為開源項目锅很。Kubernetes的關鍵特性包括:

自動化裝箱:在不犧牲可用性的條件下,基于容器對資源的要求和約束自動部署容器凤跑。同時爆安,為了提高利用率和節(jié)省更多資源,將關鍵和最佳工作量結(jié)合在一起仔引。

自愈能力:當容器失敗時扔仓,會對容器進行重啟;當所部署的Node節(jié)點有問題時咖耘,會對容器進行重新部署和重新調(diào)度翘簇;當容器未通過監(jiān)控檢查時,會關閉此容器儿倒;直到容器正常運行時版保,才會對外提供服務。

水平擴容:通過簡單的命令夫否、用戶界面或基于CPU的使用情況彻犁,能夠?qū)眠M行擴容和縮容。

服務發(fā)現(xiàn)和負載均衡:開發(fā)者不需要使用額外的服務發(fā)現(xiàn)機制凰慈,就能夠基于Kubernetes進行服務發(fā)現(xiàn)和負載均衡汞幢。

自動發(fā)布和回滾:Kubernetes能夠程序化的發(fā)布應用和相關的配置。如果發(fā)布有問題溉瓶,Kubernetes將能夠回歸發(fā)生的變更急鳄。

保密和配置管理:在不需要重新構建鏡像的情況下谤民,可以部署和更新保密和應用配置。

存儲編排:自動掛接存儲系統(tǒng)疾宏,這些存儲系統(tǒng)可以來自于本地张足、公共云提供商(例如:GCP和AWS)、網(wǎng)絡存儲(例如:NFS坎藐、iSCSI为牍、Gluster、Ceph岩馍、Cinder和Floker等)碉咆。

2、Kubernetes的整體架構

Kubernetes屬于主從分布式架構蛀恩,主要由Master Node和Worker?Node組成疫铜,以及包括客戶端命令行工具kubectl和其它附加項。

Master Node:作為控制節(jié)點双谆,對集群進行調(diào)度管理壳咕;Master Node由API Server、Scheduler顽馋、Cluster?State Store和Controller-Manger Server所組成谓厘;

Worker?Node:作為真正的工作節(jié)點,運行業(yè)務應用的容器寸谜;Worker Node包含kubelet竟稳、kube proxy和Container Runtime;

kubectl:用于通過命令行與API Server進行交互熊痴,而對Kubernetes進行操作他爸,實現(xiàn)在集群中進行各種資源的增刪改查等操作;

Add-on:是對Kubernetes核心功能的擴展愁拭,例如增加網(wǎng)絡和網(wǎng)絡策略等能力讲逛。

Kubernetes主要由以下幾個核心組件組成:

etcd保存了整個集群的狀態(tài);

apiserver提供了資源操作的唯一入口岭埠,并提供認證盏混、授權、訪問控制惜论、API注冊和發(fā)現(xiàn)等機制许赃;

controller manager負責維護集群的狀態(tài),比如故障檢測馆类、自動擴展混聊、滾動更新等;

scheduler負責資源的調(diào)度乾巧,按照預定的調(diào)度策略將Pod調(diào)度到相應的機器上句喜;

kubelet負責維護容器的生命周期预愤,同時也負責Volume(CVI)和網(wǎng)絡(CNI)的管理;

Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI)咳胃;

kube-proxy負責為Service提供cluster內(nèi)部的服務發(fā)現(xiàn)和負載均衡植康;

除了核心組件,還有一些推薦的Add-ons:

kube-dns負責為整個集群提供DNS服務

Ingress Controller為服務提供外網(wǎng)入口

Heapster提供資源監(jiān)控

Dashboard提供GUI

Federation提供跨可用區(qū)的集群

Fluentd-elasticsearch提供集群日志采集展懈、存儲與查詢

2 Master Node(主節(jié)點)

2.1 API Server(API服務器)

API Server主要用來處理REST的操作销睁,確保它們生效,并執(zhí)行相關業(yè)務邏輯存崖,以及更新etcd(或者其他存儲)中的相關對象冻记。API Server是所有REST命令的入口,它的相關結(jié)果狀態(tài)將被保存在etcd(或其他存儲)中来惧。API Server的基本功能包括:

REST語義冗栗,監(jiān)控,持久化和一致性保證供搀,API 版本控制贞瞒,放棄和生效

內(nèi)置準入控制語義,同步準入控制鉤子趁曼,以及異步資源初始化

API注冊和發(fā)現(xiàn)

另外,API Server也作為集群的網(wǎng)關棕洋。默認情況挡闰,客戶端通過API Server對集群進行訪問,客戶端需要通過認證掰盘,并使用API Server作為訪問Node和Pod(以及service)的堡壘和代理/通道摄悯。

2.2 Cluster state store(集群狀態(tài)存儲)

Kubernetes默認使用etcd作為集群整體存儲,當然也可以使用其它的技術愧捕。etcd是一個簡單的奢驯、分布式的、一致的key-value存儲次绘,主要被用來共享配置和服務發(fā)現(xiàn)瘪阁。etcd提供了一個CRUD操作的REST API,以及提供了作為注冊的接口邮偎,以監(jiān)控指定的Node管跺。集群的所有狀態(tài)都存儲在etcd實例中,并具有監(jiān)控的能力禾进,因此當etcd中的信息發(fā)生變化時豁跑,就能夠快速的通知集群中相關的組件。

2.3 Controller-Manager Server(控制管理服務器)

Controller-Manager Serve用于執(zhí)行大部分的集群層次的功能泻云,它既執(zhí)行生命周期功能(例如:命名空間創(chuàng)建和生命周期艇拍、事件垃圾收集狐蜕、已終止垃圾收集、級聯(lián)刪除垃圾收集卸夕、node垃圾收集)层释,也執(zhí)行API業(yè)務邏輯(例如:pod的彈性擴容)〗慷撸控制管理提供自愈能力湃累、擴容、應用生命周期管理碍讨、服務發(fā)現(xiàn)治力、路由、服務綁定和提供勃黍。Kubernetes默認提供Replication Controller宵统、Node Controller、Namespace Controller覆获、Service Controller马澈、Endpoints Controller、Persistent Controller弄息、DaemonSet Controller等控制器痊班。

2.4 Scheduler(調(diào)度器)

scheduler組件為容器自動選擇運行的主機。依據(jù)請求資源的可用性摹量,服務請求的質(zhì)量等約束條件涤伐,scheduler監(jiān)控未綁定的pod,并將其綁定至特定的node節(jié)點缨称。Kubernetes也支持用戶自己提供的調(diào)度器凝果,Scheduler負責根據(jù)調(diào)度策略自動將Pod部署到合適Node中,調(diào)度策略分為預選策略和優(yōu)選策略睦尽,Pod的整個調(diào)度過程分為兩步:

1)預選Node:遍歷集群中所有的Node器净,按照具體的預選策略篩選出符合要求的Node列表。如沒有Node符合預選策略規(guī)則当凡,該Pod就會被掛起山害,直到集群中出現(xiàn)符合要求的Node。

2)優(yōu)選Node:預選Node列表的基礎上沿量,按照優(yōu)選策略為待選的Node進行打分和排序粗恢,從中獲取最優(yōu)Node。

3欧瘪、Worker Node(從節(jié)點)

3.1 Kubelet

Kubelet是Kubernetes中最主要的控制器眷射,它是Pod和Node API的主要實現(xiàn)者,Kubelet負責驅(qū)動容器執(zhí)行層。在Kubernetes中妖碉,應用容器彼此是隔離的涌庭,并且與運行其的主機也是隔離的,這是對應用進行獨立解耦管理的關鍵點欧宜。

在Kubernets中坐榆,Pod作為基本的執(zhí)行單元,它可以擁有多個容器和存儲數(shù)據(jù)卷冗茸,能夠方便在每個容器中打包一個單一的應用席镀,從而解耦了應用構建時和部署時的所關心的事項,已經(jīng)能夠方便在物理機/虛擬機之間進行遷移夏漱。API準入控制可以拒絕或者Pod豪诲,或者為Pod添加額外的調(diào)度約束,但是Kubelet才是Pod是否能夠運行在特定Node上的最終裁決者挂绰,而不是scheduler或者DaemonSet屎篱。kubelet默認情況使用cAdvisor進行資源監(jiān)控。負責管理Pod葵蒂、容器交播、鏡像、數(shù)據(jù)卷等践付,實現(xiàn)集群對節(jié)點的管理秦士,并將容器的運行狀態(tài)匯報給Kubernetes API Server。

3.2 Container Runtime(容器運行時)

每一個Node都會運行一個Container Runtime永高,其負責下載鏡像和運行容器伍宦。Kubernetes本身并不停容器運行時環(huán)境,但提供了接口乏梁,可以插入所選擇的容器運行時環(huán)境。kubelet使用Unix socket之上的gRPC框架與容器運行時進行通信关贵,kubelet作為客戶端遇骑,而CRI shim作為服務器。

protocol buffers API提供兩個gRPC服務揖曾,ImageService和RuntimeService落萎。ImageService提供拉取、查看炭剪、和移除鏡像的RPC练链。RuntimeSerivce則提供管理Pods和容器生命周期管理的RPC,以及與容器進行交互(exec/attach/port-forward)奴拦。容器運行時能夠同時管理鏡像和容器(例如:Docker和Rkt)媒鼓,并且可以通過同一個套接字提供這兩種服務。在Kubelet中,這個套接字通過–container-runtime-endpoint–image-service-endpoint字段進行設置绿鸣。Kubernetes CRI支持的容器運行時包括docker疚沐、rkt、cri-o潮模、frankti亮蛔、kata-containers和clear-containers等。

3.3 kube proxy

基于一種公共訪問策略(例如:負載均衡)擎厢,服務提供了一種訪問一群pod的途徑究流。此方式通過創(chuàng)建一個虛擬的IP來實現(xiàn),客戶端能夠訪問此IP动遭,并能夠?qū)⒎胀该鞯拇碇罰od芬探。每一個Node都會運行一個kube-proxy,kube proxy通過iptables規(guī)則引導訪問至服務IP沽损,并將重定向至正確的后端應用灯节,通過這種方式kube-proxy提供了一個高可用的負載均衡解決方案。服務發(fā)現(xiàn)主要通過DNS實現(xiàn)绵估。

在Kubernetes中炎疆,kube proxy負責為Pod創(chuàng)建代理服務;引到訪問至服務国裳;并實現(xiàn)服務到Pod的路由和轉(zhuǎn)發(fā)形入,以及通過應用的負載均衡。

3缝左、kubectl

kubectl是Kubernetes集群的命令行接口亿遂。運行kubectl命令的語法如下所示:

$ kubectl?[command]?[TYPE]?[NAME]?[flags]

這里的command,TYPE渺杉、NAME和flags為:

comand:指定要對資源執(zhí)行的操作蛇数,例如create、get是越、describe和delete

TYPE:指定資源類型耳舅,資源類型是大小學敏感的,開發(fā)者能夠以單數(shù)倚评、復數(shù)和縮略的形式浦徊。例如:

$ kubectlgetpod pod1

$ kubectlgetpods pod1

$ kubectlgetpo pod1

NAME:指定資源的名稱,名稱也大小寫敏感的天梧。如果省略名稱盔性,則會顯示所有的資源,例如:

$kubectlgetpods

flags:指定可選的參數(shù)呢岗。例如冕香,可以使用-s或者–server參數(shù)指定Kubernetes API server的地址和端口蛹尝。

另外,可以通過運行kubectl help命令獲取更多的信息暂筝。

4 附加項和其他依賴

在Kunbernetes中可以以附加項的方式擴展Kubernetes的功能箩言,目前主要有網(wǎng)絡、服務發(fā)現(xiàn)和可視化這三大類的附加項焕襟,下面是可用的一些附加項:

4.4.1 網(wǎng)絡和網(wǎng)絡策略

ACI?通過與Cisco ACI集成的容器網(wǎng)絡和網(wǎng)絡安全陨收。

Calico?是一個安全的3層網(wǎng)絡和網(wǎng)絡策略提供者。

Canal?聯(lián)合Fannel和Calico鸵赖,通過網(wǎng)絡和網(wǎng)絡側(cè)务漩。

Cilium?是一個3層網(wǎng)絡和網(wǎng)絡側(cè)插件,它能夠透明的加強HTTP/API/L7 策略它褪。其即支持路由饵骨,也支持overlay/encapsultion模式。

Flannel?是一個overlay的網(wǎng)絡提供者茫打。

4.4.2 服務發(fā)現(xiàn)

CoreDNS?是一個靈活的居触,可擴展的DNS服務器,它能夠作為Pod集群內(nèi)的DNS進行安裝老赤。

Ingress 提供基于Http協(xié)議的路由轉(zhuǎn)發(fā)機制轮洋。

4.4.3 可視化&控制

Dashboard?是Kubernetes的web用戶界面。

分層架構

Kubernetes設計理念和功能其實就是一個類似Linux的分層架構抬旺,如下圖所示

核心層:Kubernetes最核心的功能弊予,對外提供API構建高層的應用,對內(nèi)提供插件式應用執(zhí)行環(huán)境

應用層:部署(無狀態(tài)應用开财、有狀態(tài)應用汉柒、批處理任務、集群應用等)和路由(服務發(fā)現(xiàn)责鳍、DNS解析等)

管理層:系統(tǒng)度量(如基礎設施碾褂、容器和網(wǎng)絡的度量),自動化(如自動擴展历葛、動態(tài)Provision等)以及策略管理(RBAC正塌、Quota、PSP啃洋、NetworkPolicy等)

接口層:kubectl命令行工具、客戶端SDK以及集群聯(lián)邦

生態(tài)系統(tǒng):在接口層之上的龐大容器集群管理調(diào)度的生態(tài)系統(tǒng)屎鳍,可以劃分為兩個范疇

Kubernetes外部:日志宏娄、監(jiān)控、配置管理逮壁、CI孵坚、CD、Workflow、FaaS卖宠、OTS應用巍杈、ChatOps等

Kubernetes內(nèi)部:CRI、CNI扛伍、CVI筷畦、鏡像倉庫、Cloud Provider刺洒、集群自身的配置和管理等

參考資料

《kubenetes Design and Architecture》地址:https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/architecture.md

《Overview of kubectl》地址:https://kubernetes.io/docs/reference/kubectl/overview/

《Installing Add-ons》地址:https://kubernetes.io/docs/concepts/cluster-administration/addons/

《Introducing Container Runtime Interface (CRI) in Kubernetes》地址:https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/

《Alternative Container Runtimes in Kubernetes》地址:https://www.infoq.com/news/2017/04/alternative-kubernetes-runtimes

《Kubernetes CRI and Minikube》地址:https://sreeninet.wordpress.com/2017/02/11/kubernetes-cri-and-minikube/

《CRI: the Container Runtime Interface》地址:https://github.com/kubernetes/community/blob/master/contributors/devel/container-runtime-interface.md

《Frakti》地址:https://github.com/kubernetes/frakti

《docker鳖宾、oci、runc以及kubernetes梳理》地址:https://www.cnblogs.com/xuxinkun/p/8036832.html

《Kubernetes Containerd集成進入GA階段》地址:https://www.sohu.com/a/233247128_198222

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逆航,一起剝皮案震驚了整個濱河市鼎文,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌因俐,老刑警劉巖拇惋,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抹剩,居然都是意外死亡撑帖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門吧兔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磷仰,“玉大人,你說我怎么就攤上這事境蔼≡钇剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵箍土,是天一觀的道長逢享。 經(jīng)常有香客問我,道長吴藻,這世上最難降的妖魔是什么瞒爬? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮沟堡,結(jié)果婚禮上侧但,老公的妹妹穿的比我還像新娘。我一直安慰自己航罗,他們只是感情好禀横,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粥血,像睡著了一般柏锄。 火紅的嫁衣襯著肌膚如雪酿箭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天趾娃,我揣著相機與錄音缭嫡,去河邊找鬼。 笑死抬闷,一個胖子當著我的面吹牛妇蛀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饶氏,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讥耗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疹启?” 一聲冷哼從身側(cè)響起古程,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喊崖,沒想到半個月后挣磨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡荤懂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年茁裙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片节仿。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晤锥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出廊宪,到底是詐尸還是另有隱情矾瘾,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布箭启,位于F島的核電站壕翩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏傅寡。R本人自食惡果不足惜放妈,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荐操。 院中可真熱鬧芜抒,春花似錦、人聲如沸托启。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驾中。三九已至唉堪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肩民,已是汗流浹背唠亚。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留持痰,地道東北人灶搜。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像工窍,于是被迫代替她去往敵國和親割卖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容