2020-05-21【Kubernetes核心組件】

突然想到了龍卷風(fēng)

今日雞湯

我所向往的自律,是每天能夠高效地完成工作,然后有充足的時(shí)間去享受生活,而不是完美而嚴(yán)苛的時(shí)間表。因?yàn)?,自律本身并不誘人,自律背后的自由才誘人。

今天來看看Kubernetes的核心組件——API Server、

Kubernetes API Server

它的核心功能是提供Kubernetes各類資源對(duì)象的增刪改查及Watch等HTTP Rest接口,成為集群內(nèi)各個(gè)功能模塊之間數(shù)據(jù)交互和通信的中心樞紐。

Kubernetes API Server是如何運(yùn)行的?

通過運(yùn)行在master上的Kube-apiserver進(jìn)程提供服務(wù)。我們可以通過kubectl命令與它交互。

如何保障Kubernetes API Server的安全性?

采用HTTPS安全傳輸通道與CA簽名數(shù)字證書強(qiáng)制雙向認(rèn)證。

如何保障Kubernetes API Server的高性能?

  1. 擁有大量高性能的底層代碼。在源碼中使用協(xié)程+隊(duì)列這種輕量級(jí)的高性能并發(fā)代碼,使單進(jìn)程的API Server具備多核處理能力。
  2. 普通List接口結(jié)合異步Watch接口。
  3. 高性能的etcd數(shù)據(jù)庫。

Kubernetes API Server的架構(gòu)是什么?

API Server從上到下有四層:

  • API 層:以REST方式提供各種API接口
  • 訪問控制層:Authentication+Authorization+Admission Control
  • 注冊(cè)表層:Kubernetes所有的資源都在注冊(cè)表中
  • etcd數(shù)據(jù)庫:持久化存儲(chǔ)Kubernetes對(duì)象的KV數(shù)據(jù)庫

Kubernetes API Server與其他模塊通信的典型場景?

  • 與kubelet進(jìn)程通信:每個(gè)Node上的kubelet每隔一個(gè)時(shí)間周期,就會(huì)調(diào)用一次API Server的REST接口報(bào)告自身狀態(tài),API Server收到這些信息后將節(jié)點(diǎn)信息更新到etcd中。
  • 與kube-controller-manager交互:kube-controller-manager中的 Node Controller通過API Server提供的Watch接口實(shí)時(shí)監(jiān)控Node信息并處理。
  • 與kube-schedule交互:Scheduler通過API Server的Watch接口監(jiān)聽到新建Pod副本的信息后,會(huì)執(zhí)行Pod調(diào)度邏輯。

Controller Manager

Kubernetes各個(gè)模塊的管理者,管理8種Controller。

Replication Controller的作用是什么?

副本控制器是為了確保在任何時(shí)候集群某個(gè)RC關(guān)聯(lián)的Pod數(shù)量都保持預(yù)設(shè)值。
1) 重新調(diào)度:確保在當(dāng)前cluster有且僅有N個(gè)Pod實(shí)例。
2)彈性伸縮:調(diào)整RC的spec.replicas實(shí)現(xiàn)系統(tǒng)的擴(kuò)容和縮容。
3)滾動(dòng)升級(jí):改變RC的Pod模板實(shí)現(xiàn)系統(tǒng)的滾動(dòng)升級(jí)。

Node Controller的作用是什么?

Node Controller 通過API Server實(shí)時(shí)獲取Node相關(guān)信息,實(shí)現(xiàn)管理和監(jiān)控集群中各個(gè)Node。

ResourceQuota Controller的作用是什么?

確保指定的資源對(duì)象在任何時(shí)候都不會(huì)超量占用系統(tǒng)物理資源,包括三個(gè)層次:
1) 容器級(jí)別:對(duì)CPU和Memory限制;
2)Pod級(jí)別:對(duì)Pod內(nèi)所有容器的可用資源限制;
3)Namespace級(jí)別:為同一個(gè)Namespace級(jí)別的資源限制;

Namespace Controller的作用是什么?

定時(shí)通過API Server讀取存儲(chǔ)在etcd的namespace信息。

Endpoints Controller和Service Controller的作用是什么?

Endpoints Controller負(fù)責(zé)生成和維護(hù)所有Endpoints對(duì)象,監(jiān)聽Service和對(duì)應(yīng)的Pod副本的變化,當(dāng)Service被刪除、新建、更改時(shí),刪除、新建、更改和該Service同名的Endpoints對(duì)象。

Service Controller 監(jiān)聽Service的變化。

Scheduler

Kubernetes Scheduler負(fù)責(zé)接收Controller Manager創(chuàng)建的新的Pod,將待調(diào)度的Pod按照特定調(diào)度算法和調(diào)度策略綁定到集群中某個(gè)合適的Node上,并將綁定信息寫在etcd中。

kubelet

每個(gè)節(jié)點(diǎn)都會(huì)啟動(dòng)一個(gè)kubelet服務(wù)進(jìn)程,用于處理Master下發(fā)到本節(jié)點(diǎn)的任務(wù),管理Pod及Pod中的容器。它會(huì)在API Server上注冊(cè)節(jié)點(diǎn)自身的信息,定期向Master匯報(bào)節(jié)點(diǎn)情況。

kube-proxy

在Kubernetes每個(gè)Node都會(huì)運(yùn)行一個(gè)kube-proxy服務(wù)進(jìn)程,用于將到某個(gè)Service的訪問請(qǐng)求轉(zhuǎn)發(fā)到后端多個(gè)Pod實(shí)例上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容