kubernetes 核心服務

1、部署ETCD (主節(jié)點)

kubernetes需要存儲很多東西,像它本身的節(jié)點信息,組件信息,還有通過kubernetes運行的pod,deployment,service等等。都需要持久化。etcd就是它的數(shù)據(jù)中心。生產(chǎn)環(huán)境中為了保證數(shù)據(jù)中心的高可用和數(shù)據(jù)的一致性,一般會部署最少三個節(jié)點。

(1)、api server是和etcd通信的唯一組件。所有其他組件通過api server間接的讀取,寫入數(shù)據(jù)到etcd(增強樂觀鎖機制,保證集群狀態(tài)的一致性,減少出錯可能;把實際存儲從其他組件剝離,替換容易)

(2)、通過etcdctl命令查看存儲的資源可以發(fā)現(xiàn):所有資源都是以JSON格式存儲到etcd中的。可以想象成把資源以json格式存儲到文件系統(tǒng)中。

(3)、確保集群一致性:一致性算法:要求集群大部分節(jié)點(一半以上)參與才能進入到下一狀態(tài):三個節(jié)點的etcd集群,必須同時有兩個存活才能參與到下一狀態(tài)。

2、部署 APIServer(主節(jié)點)

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

- 提供集群管理的REST API接口,包括認證授權(我們現(xiàn)在沒有用到)數(shù)據(jù)校驗以及集群狀態(tài)變更等

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

- 生產(chǎn)環(huán)境為了保證apiserver的高可用一般會部署2+個節(jié)點,在上層做一個lb做負載均衡,比如haproxy

如果apiserver服務掛掉,可能會導致某個服務無法訪問

(1)、kubernetes系統(tǒng)組件之間只能通過api server進行通信,他們之間不會直接通信。

(2)、以RESTflAPI的形式提供了查詢、修改集群狀態(tài)的CRUD(Create、Read、 Update、 Delete)接口。 它將狀態(tài)存儲到etcd中。

(3)、 API服務器的客戶端之 一就是命令行工具kubectl。

(4)、api server客戶端處理步驟:通過授權插件授權客戶端(kubectl)、通過準入控制插件驗證 AND/OR 修改資源請求(準入控制插件包括: AlwaysPullImages、ServiceAccount、NamespaceLifecycle、ResourceQuota等)、驗證資源以及持久化存儲

(5)、api server如何通知客戶端資源變更:

?? ??? ?當你創(chuàng)建一個ReplicaSet資源時,它不會去創(chuàng)建pod, 同時它不會去管理服務的端點。那是控制器管理器的工作。

?? ??? ?API 服務器甚至也沒有告訴這些控制器去做什么。它做的就是,啟動這些控制器,以及其他一些組件來監(jiān)控己部署資源的變更。

?? ??? ?客戶端通過創(chuàng)建到 API 服務器的 HTTP 連接來監(jiān)聽變更。通過此連接,客戶端會接收到監(jiān)聽對象的 一 系列變更通知。

3、部署ControllerManager(主節(jié)點)

Controller Manager由kube-controller-manager和cloud-controller-manager組成,是Kubernetes的大腦,它通過apiserver監(jiān)控整個集群的狀態(tài),并確保集群處于預期的工作狀態(tài)。

(1)、kube-controller-manager由一系列的控制器組成,像Replication Controller、Node Controller、Deployment Controller、ReplicaSet DaemonSet Job?Controller、StatefulSet?Controller、Service?Controller、Endpoint?Controller、Namespace?Controller、PersistentVolume?Controller等。

(2)、controller-manager、scheduler和apiserver 三者的功能緊密相關,一般運行在同一個機器上,我們可以把它們當做一個整體來看,所以保證了apiserver的高可用即是保證了三個模塊的高可用。也可以同時啟動多個controller-manager進程,但只有一個會被選舉為leader提供服務。

(3)、 控制器執(zhí)行一個 “ 調和 “ 循環(huán), 將實際狀態(tài)調整為期望狀態(tài)(在資源 spec 部分定義), 然后將新的實際狀態(tài)寫入資源的 status 部分。

(4)、不同控制器之間不會直接通信, 它們甚至不知道其他控制器的存在。 每個控制器都連接到 API 服務器, 通過監(jiān)聽機制, 請求訂閱該控制器負責的一系列資源的變更。

(5)、 控制器不會直接運行 pod,而是將 pod 定義到發(fā)布 API server?,讓 Kubelet 創(chuàng)建容器并運行 。

4、部署Scheduler(主節(jié)點)

kube-scheduler只負責分配調度Pod到集群內的節(jié)點上,它監(jiān)聽kube-apiserver,查詢還未分配Node的Pod,然后根據(jù)調度策略為這些Pod分配節(jié)點。我們前面講到的kubernetes的各種調度策略就是它實現(xiàn)的。

(1)、過濾所有節(jié)點,找出能分配給pod的可用節(jié)點列表。

(2)、對可用節(jié)點按照優(yōu)先級進行排序,找出最優(yōu)節(jié)點。

(3)、如果多個節(jié)點有最高的優(yōu)先級分數(shù),那么則循環(huán)分配,確保平均分配給pod。

5、配置kubectl命令(任意master節(jié)點)

kubectl是Kubernetes的命令行工具,是Kubernetes用戶和管理員必備的管理工具。

kubectl提供了大量的子命令,方便管理Kubernetes集群中的各種功能。

使用kubectl的第一步是配置Kubernetes集群以及認證方式,包括:

- cluster信息:api-server地址

- 用戶信息:用戶名、密碼或密鑰

- Context:cluster、用戶信息以及Namespace的組合

6、配置kubelet(工作節(jié)點)

每個工作節(jié)點上都運行一個kubelet服務進程,默認監(jiān)聽10250端口,接收并執(zhí)行master發(fā)來的指令,管理Pod及Pod中的容器。每個kubelet進程會在API Server上注冊節(jié)點自身信息,定期向master節(jié)點匯報節(jié)點的資源使用情況,并通過cAdvisor監(jiān)控節(jié)點和容器的資源。

(1)、創(chuàng)建Node資源并向api server注冊該節(jié)點。

(2)、持續(xù)監(jiān)控api server是否把該節(jié)點分配給pod,然后啟動pod容器。(具體實現(xiàn)方式是告知配置好的容器運行時docker來從特定的容器鏡像運行容器)

(3)、kubelet隨后會持續(xù)監(jiān)控運行的容器,并向api server報告他們的狀態(tài)、事件和資源消耗。

(4)、kubelet也是容器存活探針的組件,當探針報錯時會重啟容器。

(5)、當pod從api server刪除時,kubelet會刪除容器,并通知api server pod已經(jīng)被停止。

7、為集群增加service功能 – kube-proxy(工作節(jié)點)

每臺工作節(jié)點上都應該運行一個kube-proxy服務,它監(jiān)聽API server中service和endpoint的變化情況,并通過iptables等來為服務配置負載均衡,是讓我們的服務在集群外可以被訪問到的重要方式。

(1)、 確保客戶端可以通過Kubemetes API 連接到你定義的服務。kube-proxy 確保對服務 IP 和端口的連接最終能到達支持服務(或者其他,非 pod 服務終端)的某個 pod 處。

更多內容請關注我的知乎賬號:https://www.zhihu.com/people/dengjiabo/activities

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容