k8s 節點包含的組件及功能


k8s節點包含的組件及功能

1、kubernetes master與node節點的各組件及功能

k8s集群主要包含:k8s-master、k8s-node、etcd等,如下圖:

 

 

1.1 k8s master組件

k8s master主要有kube-apiserver、kube-controller-manager、kube-scheduler組成。

1.1.1 kube-apiserver

◆ kube-apiserver:

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/

Kubernetes API Server提供了k8s各類資源對象的增刪改查及watch等HTTP Rest接口,這些對象包括pods、services、replicationcontrollers等,API Server為REST操作提供服務,並為集群的共享狀態提供前端,所有其他組件都通過該前端進行交互。

◆ RESTful API

是REST風格的網絡接口,REST描述的是在網絡中client和server的一種交互形式。

◆ REST

是一種軟件架構風格,或者說是一種規格,其強調HTTP應當以資源為中心,並且規范了URI的風格,規范了HTTP請求操作(GET/PUT/POST/DELETE/HEAD/OPTIONS)的使用,具有對應的語義。

https://github.com/Arachni/arachni/wiki/REST-API

1.1.2 kube-scheduler

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/

◆ Kubernetes調度器是一個控制面進程,負責將Pods指派到節點上。

◆ 通過調度算法為待調度Pod列表的每個pod從可用Node列表中選擇一個最適合的Node,並將信息寫入etcd中。

◆ node節點上的kubelet通過API Server監聽到Kubernetes Scheduler產生的Pod綁定信息,然后獲取對應的Pod清單,下載Image,並啟動容器。

◆ 策略:

1)先排除不符合條件的節點;2)在剩余的可用選出一個最符合條件的節點。

★ LeastRequestedPriority

   優先從備選節點列表中選擇資源消耗最小的節點(CPU+內存)

★ CalculateNodeLabelPriority

   優先選擇還有指定Label的節點

★ BalancedResourceAllocation

   優先從備選節點列表中選擇各項資源使用率最均衡的節點。

1.1.3 kube-controller-manager

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/

◆ kube-controller-manager:Controller Manager還包括一些子控制器(副本控制器、節點控制器、命名空間控制器和服務賬號控制器等),控制器作為集群內部的管理控制中心,負責集群內的node、pod副本、服務端點(Endpoint)、命名空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQuota)的管理,當某個node意外宕機時,Controller Manager會及時發現並執行自動化修復流程,確保集群中的Pod副本始終處於預期的工作狀態。

◆ controller-manager控制器每間隔5秒檢查一次節點的狀態;

◆ 如果controller-manager控制器沒有收到自節點的心跳,則將該node節點被標記為不可達;

◆ controller-manager將在標記為無法訪問之前等待40秒;

◆ 如果該node節點被標記為無法訪問后5分鍾還沒有恢復,controller-manager會刪除當前node節點的所有pod並在其它可用節點重建這些pod。

pod高可用機制:

node monitor period:節點監視周期,5s;

node monitor grace period:節點監視器寬限期,40s;

pod eviction timeout:pod驅逐超時時間,5m;

1.2 k8s node節點

1.2.1 kube-proxy

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/

◆ kube-proxy:kubernetes網絡代理運行在node上,它反映了node上Kubernetes API中定義的服務,並可以通過一組后端進行簡單的TCP、UDP和SCTP流轉發或者在一組后端進行循環TCP、UDP和SCTP轉發,用戶必須使用apiserver API創建一個服務來配置代理,其實就是kube-proxy通過在主機上維護網絡規則並執行連續轉發來實現Kubernetes服務訪問。

◆ kube-proxy運行在每個節點上,監聽API Server中服務對象的變化,再通過管理Iptables或者IPVS規則,來實現網絡的轉發。

◆ kube-proxy不同的版本可支持三種工作模式:

   ★ UserSpace:k8s v1.1之前使用,k8s 1.2及以后就已經淘汰;

   ★ iptables:k8s 1.1版本開始支持,1.2開始為默認;

   ★ IPVS:k8s 1.9引入到1.11為正式版本,需要安裝ipvsadm、ipset工具包和加載ip_vs內核模塊;

1.2.2 kubelet

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/

kubelet是運行在每個worker節點的代理組件,它會監視已分配給節點的pod,具體功能如下:

◆ 向master匯報node節點的狀態信息;

◆ 接受指令並在Pod中創建docker容器;

◆ 准備Pod所需的數據卷;

◆ 返回Pod的運行狀態;

◆ 向node節點執行容器健康檢查;

1.3 kubectl

kubectl:https://kubernetes.io/zh/docs/reference/kubectl/kubectl/

◆ kubectl是一個通過命令行對Kubernetes集群進行管理的客戶端工具。

2、kubernetes pod調度流程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM