數(shù)字化轉(zhuǎn)型之 Kubernetes

英文鏈接:https://en.wikipedia.org/wiki/Kubernetes

Kubernetes(通常寫(xiě)成“k8s”)是最開(kāi)始由google設(shè)計(jì)開(kāi)發(fā)最后貢獻(xiàn)給Cloud Native Computing

Foundation的開(kāi)源容器集群管理項(xiàng)目芦岂。它的設(shè)計(jì)目標(biāo)是在主機(jī)集群之間提供一個(gè)能夠自動(dòng)化部署至扰、可拓展、應(yīng)用容器可運(yùn)營(yíng)的平臺(tái)。Kubernetes通常結(jié)合docker容器工具工作工禾,并且整合多個(gè)運(yùn)行著docker容器的主機(jī)集群。

歷史

Kubernetes( 來(lái)自希臘語(yǔ)κυβερν?τη?:更扁,意思為 “操舵員” 或者 “飛行員”)由Joe Beda, Brendan Burns 和Craig McLuckie建立翰铡,并在2014年被google公司首次對(duì)外公布。它的發(fā)展和設(shè)計(jì)受到google的Borg系統(tǒng)的嚴(yán)重影響妨退。Kubernetes項(xiàng)目的許多主要貢獻(xiàn)者來(lái)自Borg項(xiàng)目妇萄。在Google內(nèi)部Kubernetes最開(kāi)始的名字叫Serven of Nine,引用了電影“星際迷航”中通常被認(rèn)為“更加友好”的“博格人”這個(gè)角色咬荷。由于google律師的反對(duì)冠句,它的名字被重命名為Kubernetes。從Kubernetes的logo上面那車(chē)輪上的七個(gè)幅條就能在一定程度上推斷出Kubernets最開(kāi)始的名字是什么幸乒。

2015年七月21日Kubernetes發(fā)布了v1.0版本懦底。隨著Kubernetes v1.0版本的發(fā)布,Google和Linux基金會(huì)合作成立Cloud

Native Computing Foundation(CNCF)并提議使Kubernetes成為種子技術(shù)罕扎。

Kubernetes還被RedHat使用于OpenShift產(chǎn)品聚唐。

設(shè)計(jì)

Kubernetes定義了一套堆積木,這些堆積木統(tǒng)一提供部署腔召、維護(hù)和擴(kuò)展應(yīng)用的機(jī)制杆查。構(gòu)成Kubernetes的這些組件讓Kubernetes變得一個(gè)松耦合可延伸的,因此它能滿足各種不同的工作負(fù)載臀蛛。Kubernetes的延展性在很大程度上是由Kubernetes的API提供的亲桦,這些API被運(yùn)行在Kubernetes的內(nèi)部組件、延伸組件和容器使用掺栅。

Pods(豆莢)

Kubernetes中的基本調(diào)度單位叫“pod”烙肺。它增加了更高層的抽象來(lái)容納各種組件。一個(gè)pod由一個(gè)或者多個(gè)容器組成氧卧,這些容器能夠部署在同一臺(tái)物理主機(jī)上面桃笙,并能夠共享資源。Kubernetes中集群內(nèi)部的每一個(gè)pod被指定了唯一的IP地址沙绝,用戶程序可以通過(guò)相應(yīng)的端口號(hào)無(wú)沖突地連接各個(gè)pod搏明。pod能夠定義一個(gè)卷(volume),比如一個(gè)本地磁盤(pán)目錄或者一個(gè)網(wǎng)絡(luò)磁盤(pán)闪檬,然后把它暴露給pod中的容器星著。用戶可以通過(guò)Kubernetes API手動(dòng)管理pod,或者把管理工作交給一個(gè)管理器粗悯。

標(biāo)簽和選擇器

Kubernetes可以讓客戶端(用戶或者內(nèi)部組件)把被稱(chēng)之為標(biāo)簽的鍵值對(duì)依附在系統(tǒng)的任何API對(duì)象上虚循,比如pods和“nodes”。相應(yīng)地,”標(biāo)簽選擇器”是針對(duì)標(biāo)簽的查詢横缔,這些標(biāo)簽用于解決匹配對(duì)象問(wèn)題铺遂。

標(biāo)簽和選擇器是Kubernetes中的主要分組機(jī)制,用來(lái)決定哪個(gè)操作應(yīng)用于哪個(gè)組件茎刚。

比如襟锐,如果一個(gè)應(yīng)用的pod有一個(gè)系統(tǒng)標(biāo)簽為:tier (“front-end“, “back-end“,) 和 release_track (“canary“, “production“), 然后所有 “back-end” 和”canary“節(jié)點(diǎn) 上的操作都可以使用如下所示的標(biāo)簽選擇器:

tier=back-end AND release_track=canary

控制器

一個(gè)控制器是一個(gè)調(diào)節(jié)回路膛锭,通過(guò)管理一系列pod來(lái)驅(qū)動(dòng)實(shí)際的集群狀態(tài)變成所需的集群狀態(tài)粮坞。一種控制器叫”復(fù)制控制器“,通過(guò)運(yùn)行指定數(shù)目的跨集群的pod副本來(lái)進(jìn)行復(fù)制和擴(kuò)展操作初狰。如果底層的節(jié)點(diǎn)失敗了莫杈,它還能處理和創(chuàng)建用于替換的pod。其他的控制器是核心Kubernetes系統(tǒng)的一部分奢入,包括一個(gè)運(yùn)行在所有機(jī)器(或者所有機(jī)器的一些子集)但恰好一個(gè)pod上的”DaemonSet“控制器姓迅,以及一個(gè)運(yùn)行pod直到結(jié)束的”Job“控制器(比如,作為批作業(yè)的一部分)俊马。控制器所管理的那一系列pod由定義在控制器里的部分標(biāo)簽選擇器決定肩杈。

服務(wù)

一個(gè)Kubernetes服務(wù)是一系列工作在一起的pod柴我,比如多層應(yīng)用中其中的一層。這一系列pod構(gòu)成了由標(biāo)簽選擇器所定義的一個(gè)服務(wù)扩然。Kubernetes提供了服務(wù)發(fā)現(xiàn)和請(qǐng)求路由的功能艘儒。請(qǐng)求路由是通過(guò)分配固定IP地址和DNS名字給服務(wù)。默認(rèn)的夫偶,一個(gè)服務(wù)會(huì)在一個(gè)集群內(nèi)暴露(比如界睁,后臺(tái)的pod會(huì)被分到一個(gè)服務(wù)中,來(lái)自前端的pods負(fù)載平衡他們之間的請(qǐng)求)兵拢,但是翻斟,它也可以在一個(gè)集群外暴露(比如,為客戶端訪問(wèn)前端的pod)说铃。

架構(gòu)



Kubernetes采用了主從架構(gòu)访惜。Kubernetes的組件可以被分為那些管理單個(gè)節(jié)點(diǎn)和那些控制平面(control plane)的部分。

Kubernetes控制平面(plane)

Kubernetes的master主要是在不同系統(tǒng)之間負(fù)責(zé)管理工作負(fù)載和指導(dǎo)通信的控制單元腻扇。Kubernetes的控制平面由不同的組件組成债热,它們自己的進(jìn)程可以運(yùn)行在一個(gè)單獨(dú)的master節(jié)點(diǎn)上,或者運(yùn)行在由多個(gè)master所支持的高可用集群中幼苛。Kubernetes控制平面的不同組件如下所示:

etcd

etcd 是一個(gè)由CoreOS開(kāi)發(fā)的輕量級(jí)的窒篱、分布式的key-value數(shù)據(jù)存儲(chǔ)器。它能夠可靠地存儲(chǔ)集群的配置數(shù)據(jù)和展現(xiàn)整個(gè)集群在某一時(shí)間點(diǎn)的狀態(tài)。其他的組件監(jiān)視著這個(gè)存儲(chǔ)器的變化情況以便更新所需的狀態(tài)墙杯。

API server

API Server是一個(gè)關(guān)鍵組件配并,它在HTTP協(xié)議上使用JSON為Kubernetes對(duì)內(nèi)外提供kubernetes

API服務(wù)。API server處理和驗(yàn)證REST請(qǐng)求和更新etcd中API對(duì)象的狀態(tài)霍转,因此荐绝,這使得客戶端能夠在各個(gè)worker節(jié)點(diǎn)上配置工作負(fù)載和容器。

Scheduler

Scheduler是一個(gè)可插拔的組件避消,它能夠根據(jù)資源的可用性決定一個(gè)還沒(méi)被調(diào)度的pod應(yīng)該運(yùn)行在哪個(gè)節(jié)點(diǎn)上面低滩。Scheduler追蹤每個(gè)節(jié)點(diǎn)的資源使用情況,確保將調(diào)度的資源不超出剩下可用的資源岩喷。為了達(dá)到這個(gè)目的恕沫,scheduler必須知道可用資源的情況和在各個(gè)服務(wù)器上已經(jīng)分配的資源情況。

Controller manager

controller manager是核心Kubernetes控制器(比如DaemonSet控制器纱意、復(fù)制控制器)所運(yùn)行的進(jìn)程婶溯。這些控制器跟API服務(wù)器通信來(lái)創(chuàng)建、更新和刪除它們所管理的資源(pod偷霉、service端點(diǎn)等等)

Kubernetes node

節(jié)點(diǎn)(Node)(也叫worker或者minion)是部署著容器的單個(gè)機(jī)器(或者虛擬機(jī))迄委。集群中的每一個(gè)節(jié)點(diǎn)必須運(yùn)行著容器運(yùn)行時(shí)(runtime)(比如Docker)以及下面所提到的組件,用來(lái)和master通信以便讓這些容器進(jìn)行網(wǎng)絡(luò)配置

Kubelet

Kubelet負(fù)責(zé)每個(gè)節(jié)點(diǎn)的運(yùn)行狀態(tài)类少,也就是說(shuō)確保節(jié)點(diǎn)中的所有容器正常運(yùn)行叙身。它會(huì)按照控制平面(plane)的指示啟動(dòng)、停止和維護(hù)容器(組織成pods)硫狞。

Kubelet監(jiān)視一個(gè)pod的狀態(tài)信轿,如果沒(méi)有看到想要的狀態(tài),那么這個(gè)pod會(huì)被重新部署到同一個(gè)節(jié)點(diǎn)上残吩。節(jié)點(diǎn)的狀態(tài)依賴(lài)于每幾秒所發(fā)送給master的心跳信息财忽。當(dāng)master偵測(cè)到一個(gè)節(jié)點(diǎn)失敗了,復(fù)制控制(Replication Controller)就會(huì)知道這個(gè)狀態(tài)改變了泣侮,然后會(huì)在另一個(gè)正常的節(jié)點(diǎn)上啟動(dòng)相應(yīng)的pod即彪。

Kube-proxy

kube-proxy是網(wǎng)絡(luò)代理和負(fù)載均衡的實(shí)現(xiàn)。它和其他的網(wǎng)絡(luò)操作提供了服務(wù)抽象旁瘫。它負(fù)責(zé)根據(jù)ip地址和端口號(hào)來(lái)路由外部請(qǐng)求到相應(yīng)的容器祖凫。

cAdvisor

cAdvisor是監(jiān)聽(tīng)和收集資源使用情況和性能指標(biāo)(比如每個(gè)節(jié)點(diǎn)中容器的CPU、內(nèi)存和網(wǎng)絡(luò)使用情況)的代理者酬凳。

引用:

“First GitHub commit for Kubernetes”.github.com. 2014-06-07.

Jump up^ “GitHub Releases page”.github.com. 2016-10-16.

Jump up^ “What is Kubernetes”.Kubernetes. Retrieved 28 August 2015.

Jump up^ “Google Made Its Secret Blueprint

? ? Public to Boost Its Cloud”. Retrieved 2016-06-27.

Jump up^ “Google Open Sources Its Secret Weapon in Cloud

? ? Computing”.Wired.? ? Retrieved 24 September 2015.

Jump up^ Abhishek Verma; Luis Pedrosa; Madhukar R.

? ? Korupolu; David Oppenheimer; Eric Tune; John Wilkes (April 21–24, 2015). “Large-scale cluster management at

? ? Google with Borg”.Proceedings

? ? of the European Conference on Computer Systems (EuroSys).

Jump up^ “Borg, Omega, and Kubernetes - ACM Queue”.queue.acm.org. Retrieved 2016-06-27.

Jump up^ “Early Stage Startup Heptio Aims to

? ? Make Kubernetes Friendly”. Retrieved 2016-12-06.

Jump up^ “As Kubernetes Hits 1.0, Google

? ? Donates Technology To Newly Formed Cloud Native Computing Foundation”.TechCrunch. Retrieved 24 September 2015.

Jump up^ “Cloud

? ? Native Computing Foundation”.

^ Jump up to:*a* *b* *c* *d* *e* *f* *g* *h* *i* “An Introduction to Kubernetes”.DigitalOcean. Retrieved 24 September? ? 2015.

^ Jump up to:*a* *b* Langemak, Jon (2015-02-11). “Kubernetes 101 – Networking”.Das Blinken Lichten. Retrieved? ? 2015-11-02.

Jump up^ Strachan, James (2015-05-21). “Kubernetes for Developers”.Medium (publishing platform). Retrieved? ? 2015-11-02.

Jump up^ Surana, Ramit (2015-09-16). “Containerizing Docker on Kubernetes”.LinkedIn. Retrieved 2015-11-02.

^ Jump up to:*a* *b* “Intro: Docker and Kubernetes training

? ? - Day 2”. Red Hat. 2015-10-20. Retrieved 2015-11-02.

^ Jump up to:*a* *b* “Overview of a Replication Controller”.Documentation.CoreOS. Retrieved 2015-11-02.

Jump up^ Sanders, Jake (2015-10-02). “Kubernetes: Exciting Experimental

? ? Features”.Livewyer.? ? Retrieved 2015-11-02.

Jump up^ Langemak, Jon (2015-02-15). “Kubernetes 101 – External Access Into

? ? The Cluster”.Das

? ? Blinken Lichten. Retrieved 2015-11-02.

Jump up^ Mahajan, Rakesh (August 30, 2016). “Getting started with Kubernetes”. TO THE NEW. Retrieved September 2, 2016.

^ Jump up to:*a* *b* *c* “Kubernetes Infrastructure”.OpenShift Community Documentation.? ? OpenShift. Retrieved 24 September 2015.

^ Jump up to:*a* *b* Marhubi, Kamal (2015-09-26). “Kubernetes from the ground up: API

? ? server”.? ? kamalmarhubi.com. Retrieved 2015-11-02.

Jump up^ Marhubi, Kamal (2015-08-27). [“What ..] is a Kubelet?”. kamalmarhubi.com. Retrieved 2015-11-02.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惠况,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宁仔,更是在濱河造成了極大的恐慌稠屠,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異权埠,居然都是意外死亡榨了,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)攘蔽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)龙屉,“玉大人,你說(shuō)我怎么就攤上這事满俗∽叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵唆垃,是天一觀的道長(zhǎng)五芝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辕万,這世上最難降的妖魔是什么枢步? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮渐尿,結(jié)果婚禮上醉途,老公的妹妹穿的比我還像新娘。我一直安慰自己砖茸,他們只是感情好结蟋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著渔彰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪推正。 梳的紋絲不亂的頭發(fā)上恍涂,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音植榕,去河邊找鬼再沧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尊残,可吹牛的內(nèi)容都是我干的炒瘸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寝衫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顷扩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起慰毅,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤隘截,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體婶芭,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡东臀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了犀农。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惰赋。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖呵哨,靈堂內(nèi)的尸體忽然破棺而出赁濒,到底是詐尸還是另有隱情,我是刑警寧澤仇穗,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布流部,位于F島的核電站,受9級(jí)特大地震影響纹坐,放射性物質(zhì)發(fā)生泄漏枝冀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一耘子、第九天 我趴在偏房一處隱蔽的房頂上張望果漾。 院中可真熱鬧,春花似錦谷誓、人聲如沸绒障。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)户辱。三九已至,卻和暖如春糙臼,著一層夾襖步出監(jiān)牢的瞬間庐镐,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工变逃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留必逆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓揽乱,卻偏偏與公主長(zhǎng)得像名眉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凰棉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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