k8s--組件篇

轉自https://blog.csdn.net/hty46565/article/details/78813169

API Server

kubernetes API Server通過kube-apiserver進程提供服務,該進程運行在master節(jié)點上。API Server是kubernetes的核心組件,是各個組件通信的通道。

1.集群管理的API入口

資源對象如Deployment、Service、ReplicationController、ConfigMap等,都是通過API Server進行操作。而通過API Server,我們就可以往etcd(存儲著集群的各種數(shù)據)中寫入數(shù)據。


image.png

2.資源分配控制的入口

Kubernetes可以從各個層級對資源進行分配控制。如容器的CPU使用量、命名空間的資源數(shù)量等。這也是通過APIServer進行配置的。這些資源分配情況寫在etcd中。

3.提供完備的集群安全機制

Controller Manager

Replication Controller

副本控制器用于保證Deployment或者RC中副本的數(shù)量。

Node Controller

通過API Server監(jiān)控etcd中存儲的關于節(jié)點的各類信息,這些信息是kubelet定時推給API Server的,由API Server寫入etcd。其中記錄的節(jié)點信息包括:節(jié)點監(jiān)控狀況、節(jié)點資源、節(jié)點名稱、節(jié)點地址信息、操作系統(tǒng)版本、docker版本、kubelet版本等。監(jiān)控到節(jié)點信息若有異常,則會對節(jié)點進行某種操作,如節(jié)點狀態(tài)變?yōu)楣收蠣顟B(tài),則刪除節(jié)點以及跟該節(jié)點相關的POD等資源的信息。


image.png

ResourceQuota Controller

將期望的資源配合信息通過API Server寫入etcd中,然后ResourceQuota Controller會定時地統(tǒng)計這些信息,在系統(tǒng)請求資源的時候將讀取這些統(tǒng)計信息,如果不合法就不會給分配該資源,創(chuàng)建行為將報錯。

Namespace Controller

用戶可以通過API Server創(chuàng)建新的命名空間并保存到etcd中。命名空間控制器會定時通過APIServer讀取這些命名空間信息并做對應的對于命名空間的一些操作。

Endpoints Controller

負責生成和維護所有的Endpoints對象的控制器。Endpoints表示了一個Service對應的所有Pod副本的訪問地址。一個Service可能對應了多個Endpoints,那么,在創(chuàng)建一個新的Service時Endpoints Controller就會生成對應的Endpoints。在service被刪除時,Endpoints Controller就會刪除對應的Endpoints。

Scheduler

kubernetes的調度器,用于監(jiān)聽APIServer,當需要創(chuàng)建新的Pod時,Scheduler負責選擇該Pod與哪個Node進行綁定。將此綁定信息通過APIServer寫到etcd中。
若此時與Node A進行綁定,那么A上的kubelet就會從APIServer上監(jiān)聽到此事件,那么kubelet就會做相應的創(chuàng)建工作。
此調度涉及到三個對象,待調度的Pod,可用的Node,調度算法。簡單說,就是使用某種調度算法為待調度的Pod找到合適的運行次Pod的Node。


image.png

Kubelet

每個Node節(jié)點上都會有一個kubelet負責Master下發(fā)到該節(jié)點的具體任務,管理該節(jié)點上的Pod和容器。而且會在創(chuàng)建之初向APIServer注冊自身的信息,定時匯報節(jié)點的信息。它不?通過cAdvisor監(jiān)控容器和節(jié)點資源。

節(jié)點管理

Kubelet在創(chuàng)建之初就會向APIServer做自注冊,然后會定時報告節(jié)點的信息給APIServer寫入etcd中。默認周期為10秒鐘。

Pod管理

kubelet通過監(jiān)聽APIServer,如果發(fā)現(xiàn)對Pod有什么操作,它就會做出相應的動作。例如發(fā)現(xiàn)有Pod與本Node進行了綁定,那么kubelet將會創(chuàng)建響應的pod且調用Docker Client下載image并運行容器。

容器健康檢查

有三種方式對容器做健康檢查:
1.在容器內部運行一個命令,如果該命令的退出狀態(tài)碼為0,則表明容器健康。
2.TCP檢查。
3.HTTP檢查。

cAdvisor資源監(jiān)控

Kubelet通過cAdvisor對該節(jié)點的各類資源進行監(jiān)控。如果集群需要這些監(jiān)控到的資源信息,可以安裝一個組件Heapster。

Heapster會進行集群級別的監(jiān)控,它會通過Kubelet獲取到所有節(jié)點的各種資源信息,然后通過帶著關聯(lián)標簽的Pod分組這些信息。

如果再配合InfluxDB與Grafana,那么就成為一個完整的集群監(jiān)控系統(tǒng)了。

Kube-proxy

負責接收并轉發(fā)請求。Kube-proxy的核心功能是將到Service的訪問請求轉發(fā)到后臺的某個具體的Pod。

無論是通過ClusterIP+Port的方式還是NodeIP+NodePort的方式訪問Service,最終都會被節(jié)點的Iptables規(guī)則重定向到Kube-proxy監(jiān)聽服務代理端口,該代理端口實際上就是SocketServer在本地隨機打開的一個端口,SocketServer是Kube-proxy為每一個服務都會創(chuàng)建的“服務代理對象”的一部分。

當Kube-proxy監(jiān)聽到Service的訪問請求后,它會找到最適合的Endpoints,然后將請求轉發(fā)過去。具體的路由選擇依據Round Robin算法及Service的Session會話保持這兩個特性。

Etcd

Etcd一種k-v存儲倉庫,可用于服務發(fā)現(xiàn)程序。在Kubernetes中就是用Etcd來存儲各種k-v對象的。

所以我也認為Etcd是Kubernetes的一個重要組件。當我們無論是創(chuàng)建Deployment也好,還是創(chuàng)建Service也好,各種資源對象信息都是寫在Etcd中了。

各個組件是通過API Server進行交流的,然而數(shù)據的來源是Etcd。所以維持Etcd的高可用是至關重要的。如果Etcd壞了,任何程序也無法正常運行了。

總結

Kubernetes的這些組件各自分別有著重要的功能。它們之間協(xié)同工作,共同保證了Kubernetes對于容器化應用的自動管理。

其中API Server起著橋梁的作用,各個組件都要通過它進行交互。Controller Manager像是集群的大管家,管理著許多事務。Scheduler就像是一個調度亭,負責Pod的調度工作。

Kubelet則在每個節(jié)點上都有,像是一個執(zhí)行者,真正創(chuàng)建、修改、銷毀Pod的工作都是由它來具體執(zhí)行。Kube-proxy像是負載均衡器,在外界需要對Pod進行訪問時它作為代理進行路由工作,將具體的訪問分給某一具體的Pod實例。

Etcd則是Kubernetes的數(shù)據中心,用來存儲Kubernetes創(chuàng)建的各類資源對象信息。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容