【Kubernetes系列】第1篇 架構(gòu)及組件介紹

1.?Kubernetes簡介

Kubernetes是谷歌開源的容器集群管理系統(tǒng)鲁驶,是Google多年大規(guī)模容器管理技術Borg的開源版本臊泰,主要功能包括:

- 基于容器的應用部署缔御、維護和滾動升級

- 負載均衡和服務發(fā)現(xiàn)

- 跨機器和跨地區(qū)的集群調(diào)度

- 自動伸縮

- 無狀態(tài)服務和有狀態(tài)服務?

- 廣泛的Volume支持?

- 插件機制保證擴展性

Kubernetes發(fā)展非常迅速惜颇,已經(jīng)成為容器編排領域的領導者皆刺。

2.?Kubernetes 架構(gòu)及組件介紹

2.1 kubernetes 架構(gòu)

Kubernetes架構(gòu)如圖所示:

Kubernetes主要由以下幾個核心組件構(gòu)成:

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

- apiserver 提供了資源操作的唯一入口凌摄,并提供認證羡蛾、授權(quán)、訪問控制锨亏、API注冊和發(fā)現(xiàn)等機制痴怨;

- controller manager 負責維護集群的狀態(tài),比如故障檢測器予、自動擴展浪藻、滾動更新等;

- scheduler 負責資源的調(diào)度乾翔,按照預定的調(diào)度策略將實例(Pod)調(diào)度到相應的主機上爱葵;

- kubelet 負責維護容器的生命周期,同時也負責存儲卷和網(wǎng)絡的管理反浓;

- container runtime 負責鏡像管理以及容器的真正執(zhí)行萌丈,在我們系統(tǒng)中指的是Docker

- kube-proxy 負責為應用提供集群內(nèi)部的服務發(fā)現(xiàn)和負載均衡


推薦的插件

- helm - kubernetes包管理工具

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

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

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

-?Dashboard 提供GUI

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

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

2.2 Kubernetes組件介紹

2.2.1 etcd

etcd是基于Raft一致性算法開發(fā)的分布式key-value存儲雷则,可用于服務發(fā)現(xiàn)辆雾、共享配置以及一致性保障(如數(shù)據(jù)庫選主、分布式鎖等)

etcd主要功能:

-?基本的key-value存儲

-?監(jiān)聽機制

-?key的過期及續(xù)約機制月劈,用于監(jiān)控和服務發(fā)現(xiàn)

-?原子CAS和CAD乾颁,用于分布式鎖和leader選舉

Etcd基于RAFT的一致性

leader節(jié)點選舉方法

-?初始啟動時,節(jié)點處于follower狀態(tài)并被設定一個election timeout艺栈,如果在這一時間周期內(nèi)沒有收到來自leader的心跳檢測英岭,節(jié)點將發(fā)起選舉,將自己切換為candidate(候選人)節(jié)點之后湿右,向集群中的其他follow節(jié)點發(fā)送請求诅妹,詢問其是否選舉自己為leader

-?當收到來自集群中過半數(shù)節(jié)點的接受投票后,節(jié)點即成為leader毅人,開始接收保存client的數(shù)據(jù)并向其他的follower節(jié)點同步日志吭狡。如果沒有達成一致,則candidate節(jié)點隨機選擇一個等待時間(150ms ~ 300ms)再次發(fā)起投票丈莺,得到集群中半數(shù)以上的follower接受的candidate將成為leader

-?leader節(jié)點依靠定時向follower節(jié)點發(fā)送心跳檢測來保持其地位

-?任何時候如果其他follower在election timeout期間沒有收到來自leader的心跳檢測划煮,同樣會將自己的狀態(tài)切換為candidate并發(fā)起選舉。每成功選舉一次缔俄,新leader的步進數(shù)(Term)都會比之前l(fā)eader的步進數(shù)加1

失效處理

-?leader失效:其他沒有收到心跳檢測的節(jié)點將發(fā)起新的選舉弛秋,當leader恢復后由于步進數(shù)小自動成為follower(日志會被新leader的日志覆蓋)

-?follower節(jié)點不可用:follower節(jié)點不可用的情況相對比較容易解決器躏。因為集群中的日志內(nèi)容始終是從leader節(jié)點同步,只要這一節(jié)點再次加入集群時重新從leader節(jié)點處復制日志即可

-?多個候選人(candidate):沖突后candidate將隨機選擇一個等待時間(150ms ~ 300ms)再次發(fā)起投票蟹略,得到集群中半數(shù)以上的follower接受的candidate將成為leader

講到這里可能有同學發(fā)現(xiàn)Etcd和Zookeeper登失、Consul等一致性協(xié)議實現(xiàn)框架有些類似,的確這些中間件是比較類似的挖炬,關于其中的異同點揽浙,大家可以自行查閱資料。

2.2.2 kube-apiserver

kube-apiserver是Kubernetes最重要的核心組件之一意敛,主要提供了如下功能:

-?提供集群管理的REST API接口馅巷,包括認證授權(quán)、數(shù)據(jù)校驗以及集群狀態(tài)變更等

-?提供同其他模塊之間的數(shù)據(jù)交互(其他模塊通過API Server查詢或修改數(shù)據(jù)草姻,只有API Server才直接操作etcd)

2.2.3 kube-scheduler

kube-scheduler負責分配調(diào)度Pod到集群內(nèi)的節(jié)點上钓猬,它監(jiān)聽kube-apiserver,查詢還未分配Node的Pod碴倾,然后根據(jù)調(diào)度策略為這些Pod分配節(jié)點

通過以下三種方式可以指定Pod只運行在特定的Node節(jié)點上

-?nodeSelector:只調(diào)度到匹配指定label的Node上?

-?nodeAffinity:功能更豐富的Node選擇器逗噩,比如支持集合操作?

-?podAffinity:調(diào)度到滿足條件的Pod所在的Node上

2.2.4 kube-controller-manager

kube-controller-manager是Kubernetes的大腦掉丽,通過kube-apiserver監(jiān)控整個集群的狀態(tài)跌榔,并確保集群處于預期的工作狀態(tài),它由一系列的控制器組成捶障,這些控制器主要包括三組:

1. 必須啟動的控制器

-?eploymentController

-?DaemonSetController

-?NamesapceController

-?ReplicationController

-?RelicaSet

-?JobController

...

2. 默認啟動的控制器

-?NodeController

-?ServiceController

-?PVBinderController

...

3. 默認禁止的可選控制器

-?BootstrapSignerController

-?TokenCleanerController

2.2.5 Kubelet

每個Node節(jié)點上都運行一個kubelet守護進程僧须,默認監(jiān)聽10250端口,接收并執(zhí)行master發(fā)來的指令项炼,管理Pod及Pod中的容器担平。每個kubelet進程會在API Server上注冊節(jié)點自身信息,定期向master節(jié)點匯報節(jié)點的資源使用情況

節(jié)點管理?

主要是節(jié)點自注冊和節(jié)點狀態(tài)更新:

- Kubelet可以通過設置啟動參數(shù) --register-node 來確定是否向API Server注冊自己;?

-?如果Kubelet沒有選擇自注冊模式锭部,則需要用戶自己配置Node資源信息暂论,同時需要在Kubelet上配置集群中API Server的信息;

-?Kubelet在啟動時通過API Server注冊節(jié)點信息,并定時向API Server發(fā)送節(jié)點狀態(tài)消息拌禾,API Server在接收到新消息后取胎,將信息寫入etcd

容器健康檢查

Pod通過兩類探針檢查容器的健康狀態(tài)

-?LivenessProbe 存活探針:通過該探針判斷容器是否健康,告訴Kubelet一個容器什么時候處于不健康的狀態(tài)湃窍。如果LivenessProbe探針探測到容器不健康闻蛀,則kubelet將刪除該容器,并根據(jù)容器的重啟策略做相應的處理您市。如果一個容器不包含LivenessProbe探針觉痛,那么kubelet認為該容器的LivenessProbe探針返回的值永遠是“Success”。

-?ReadinessProbe 就緒探針:用于判斷容器是否啟動完成且準備接收請求茵休。如果 ReadinessProbe 探針探測到失敗薪棒,則Pod的狀態(tài)將被修改手蝎。Endpoint Controller將從Service的Endpoint中刪除包含該容器所在Pod的IP地址的Endpoint條目。

以下是Pod的啟動流程:

2.2.6 kube-proxy

每臺機器上都運行一個kube-proxy服務盗尸,它監(jiān)聽API Server中service和Pod的變化情況柑船,并通過userspace、iptables泼各、ipvs等proxier來為服務配置負載均衡

代理模式(proxy-mode)提供如下三種類型:

1)userspace

最早的負載均衡方案鞍时,它在用戶空間監(jiān)聽一個端口,所有請求通過 iptables 轉(zhuǎn)發(fā)到這個端口扣蜻,然后在其內(nèi)部負載均衡到實際的 Pod懂缕。service的請求會先從用戶空間進入內(nèi)核iptables,然后再回到用戶空間(kube-proxy)铆遭,由kube-proxy完成后端Endpoints的選擇和代理工作膘螟,這樣流量從用戶空間進出內(nèi)核帶來的性能損耗是不可接受的,所以產(chǎn)生了iptables的代理模式?

2)iptables:

iptables mode完全使用iptables來完成請求過濾和轉(zhuǎn)發(fā)芳肌。但是如果集群中存在大量的Service/Endpoint灵再,那么Node上的iptables rules將會非常龐大,添加或者刪除iptables規(guī)則會引起較大的延遲亿笤。

3) ipvs:

為了解決存在大量iptables規(guī)則時的網(wǎng)絡延遲的問題翎迁,Kubernetes引入了ipvs的模式,(ipvs是LVS - Linux Virtual Server 的重要組成部分净薛,最早是由中國的章文嵩博士推出的一個開源項目汪榔,提供軟件負載均衡的解決方案),下面是ipvs模式的原理圖:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肃拜,一起剝皮案震驚了整個濱河市痴腌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌燃领,老刑警劉巖士聪,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猛蔽,居然都是意外死亡剥悟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門枢舶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懦胞,“玉大人,你說我怎么就攤上這事凉泄□镂荆” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵后众,是天一觀的道長胀糜。 經(jīng)常有香客問我颅拦,道長,這世上最難降的妖魔是什么教藻? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任距帅,我火速辦了婚禮,結(jié)果婚禮上括堤,老公的妹妹穿的比我還像新娘碌秸。我一直安慰自己,他們只是感情好悄窃,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布讥电。 她就那樣靜靜地躺著,像睡著了一般轧抗。 火紅的嫁衣襯著肌膚如雪恩敌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天横媚,我揣著相機與錄音纠炮,去河邊找鬼。 笑死灯蝴,一個胖子當著我的面吹牛恢口,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绽乔,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼弧蝇,長吁一口氣:“原來是場噩夢啊……” “哼碳褒!你這毒婦竟也來了折砸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤沙峻,失蹤者是張志新(化名)和其女友劉穎睦授,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摔寨,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡去枷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了是复。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片删顶。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淑廊,靈堂內(nèi)的尸體忽然破棺而出逗余,到底是詐尸還是另有隱情,我是刑警寧澤季惩,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布录粱,位于F島的核電站腻格,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏啥繁。R本人自食惡果不足惜菜职,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旗闽。 院中可真熱鬧酬核,春花似錦、人聲如沸适室。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亭病。三九已至鹅很,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罪帖,已是汗流浹背促煮。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留整袁,地道東北人菠齿。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像坐昙,于是被迫代替她去往敵國和親绳匀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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