k8s 各組件功能
1.1、kube-apiserver:
* 運行在master節(jié)點上
*?Kubernetes API?server提供了k8s各類資源對象的增刪改查及watch等HTTP?Rest接口,這些對象?包括pods、services、replicationcontrollers等,API Server對REST操作提供服務(wù),并為集群的共享狀態(tài)提供前端,所有其他組件都通過該前端進(jìn)行交互。
?*?端口默認(rèn)值為6443,可通過啟動參數(shù) "--secure-port"的值來修改默認(rèn)值
*?默認(rèn)IP地址為非本地(Non-Localhost)網(wǎng)絡(luò)端口,通過啟動參數(shù)“--bind-address”設(shè)置該值。
*?該端口用于接收客戶端、dashboard等外部HTTPS請求
*?用于基于Tocken文件或客戶端證書及HTTP?Base的認(rèn)證
*?用于基于策略的授權(quán)
1.2、kube-scheduler:
*?運行在master節(jié)點上
*?Kubernetes調(diào)度器是一個控制面進(jìn)程,負(fù)責(zé)將Pods指派到節(jié)點上
*?通過調(diào)度算法為待調(diào)度Pod列表的每個Pod從可用Node列表中選擇一個最適合的Node,并將信息寫入etcd中
*? node節(jié)點上的kubelet通過API?Server監(jiān)聽到kubernetes?Scheduler產(chǎn)生的Pod綁定信息,然后獲取對應(yīng)的Pod清單,下載Image,并啟動容器。
*? 策略:
? ? *?LeastRequestedPriority?優(yōu)先從備選節(jié)點列表中選擇資源消耗最小的節(jié)點(CPU+內(nèi)存)
? *??CalculateNodeLabelPriority?優(yōu)先選擇含有指定Label的節(jié)點
? ?*? BalancedResourceAllocation?優(yōu)先從備選節(jié)點列表中選擇各項資源使用率最均衡的節(jié)點
1.3、kube-controller-manager:
*?運行在master節(jié)點上
*?Controller?Manager還包括一些子控制器(副本控制器、節(jié)點控制器、命名空間控制器和服務(wù)賬號控制器等),控制器作為集群內(nèi)部的管理控制中心,負(fù)責(zé)集群內(nèi)的Node、Pod副本、服務(wù)端點(Endpoint)、命名空間(Namespace)、服務(wù)賬號(ServiceAccount)、資源定額(ResourceQuota)的管理,當(dāng)某個Node意外宕機(jī)時,Controller Manager會及時發(fā)現(xiàn)并執(zhí)行自動化修復(fù)流程,確保集群中的pod副本始終處于預(yù)期的工作狀態(tài)
*?controller-manager控制器每間隔5秒檢查一次節(jié)點的狀態(tài)
*?如果controller-manager控制器沒有收到自節(jié)點的心跳,則將該node節(jié)點標(biāo)記為不可達(dá)
*?controller-manager將在標(biāo)記為無法訪問之前等待40秒
*?如果該node節(jié)點被標(biāo)記為無法訪問后5分鐘還沒有恢復(fù),controller-manager會刪除當(dāng)前node節(jié)點的所有pod并在其它可用節(jié)點重建這些pod
*?pod高可用機(jī)制:
*?node?monitor?period:節(jié)點監(jiān)事周期 5s
*?node?monitor?grace?period:節(jié)點監(jiān)視器寬限期 40s
*?pod?eviction?timeout: pod驅(qū)逐超時時間 5m
1.4、kube-proxy:
*?Kubernetes?網(wǎng)絡(luò)代理運行在node上,它反映了node上Kubernetes API中定義的服務(wù),并可以通過一組后端進(jìn)行簡單的TCP、UDP和SCTP流轉(zhuǎn)發(fā)或者在一組后端進(jìn)行循環(huán)TCP、UDP、SCTP轉(zhuǎn)發(fā),用戶必須使用apiserver API創(chuàng)建一個服務(wù)來配資代理,其實就是kube-proxy通過在主機(jī)上維護(hù)網(wǎng)絡(luò)規(guī)則并執(zhí)行連接轉(zhuǎn)發(fā)來實現(xiàn)Kubernetes服務(wù)訪問
*?kube-proxy?運行在每個節(jié)點上,監(jiān)聽API?server中服務(wù)對象的變化,再通過管理IPtables或者IPVS規(guī)則?來實現(xiàn)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)
*?Kube-Proxy不同的版本可支持三種工作模式:
?*?UserSpace:k8s v1.1之前使用 ,?k8s 1.2及以后就已經(jīng)淘汰
?*?IPtables:k8s 1.1版本開始支持,1.2開始為默認(rèn)
?*?IPVS:k8s 1.9引入到1.11為正式版本,需要安裝ipvsadm、ipset工具包和加載ip_vs內(nèi)核模塊
*?IPVS相對IPtables效率會更高一些,使用IPVS模式需要在運行Kube-Proxy的節(jié)點上安裝ipvsadm、ipset工具包和加載ip_vs內(nèi)核模塊,當(dāng)Kube-Proxy以IPVS代理模式啟動時,Kube-Proxy將驗證節(jié)點上是否安裝了IPVS模塊,如果未安裝,則Kube-Proxy將回退到IPtables代理模式。
*?使用IPVS模式,Kube-proxy會監(jiān)視Kubernetes?Services對象和Endpoints,調(diào)用宿主機(jī)內(nèi)核Netlink接口以相應(yīng)地創(chuàng)建IPVS規(guī)則并定期與Kubernetes?Services對象Endpoints對象同步IPVS規(guī)則,以確保IPVS狀態(tài)與期望一致,訪問服務(wù)時,流量將被重定向到其中一個后端Pod,IPVS使用哈希表作為底層數(shù)據(jù)結(jié)構(gòu)并在內(nèi)核空間中工作,這意味著IPVS可以更快地重定向流量,并且在同步代理規(guī)則時具有更好的性能,此外,IPVS為負(fù)載均衡算法提供了更多選項,例如:rr(輪訓(xùn)調(diào)度)?lc(最小連接數(shù))dh(目標(biāo)哈希)?sh(源哈希)?sed(最短期望延遲)?nq(不排隊調(diào)度)等。
1.5、kubelet:
*?kubelet是運行在每個worker節(jié)點的代理組件,它會監(jiān)視已分配給節(jié)點的pod,具體功能如下:
*?向master匯報node節(jié)點的狀態(tài)信息
*?接受指令并在Pod中創(chuàng)建docker容器
*?準(zhǔn)備Pod所需的數(shù)據(jù)卷
*?返回pod的運行狀態(tài)
*?在node節(jié)點執(zhí)行容器健康檢查
1.6、kubectl:
*?是一個通過命令行對kubernetes集群進(jìn)行管理的客戶端工具
1.7、etcd
etcd是CoreOS公司開發(fā),目前是Kubernetes默認(rèn)使用的key-value數(shù)據(jù)存儲系統(tǒng),用于保存kubernetes的所有集群數(shù)據(jù),etcd支持分布式集群功能,生產(chǎn)數(shù)據(jù)使用時需要為etcd數(shù)據(jù)提供定期備份機(jī)制
etcd內(nèi)部采用raft協(xié)議作為一致性算法,etcd基于go語言實現(xiàn)
etcd具有下面這些屬性
完全復(fù)制?集群中的每個節(jié)點都可以使用完整的存檔
高可用性?etcd可用于避免硬件的單點故障或網(wǎng)絡(luò)問題
一致性:每次讀取都會返回跨多主機(jī)的最新寫入
簡單?包括一個定義良好?面向用戶的API(gRPC)
安全:實現(xiàn)了帶有可選的客戶端證書身份驗證的自動化TLS
快速:每秒10000次寫入的基準(zhǔn)速度
可靠:使用Raft算法實現(xiàn)了存儲的合理分布Etcd的工作原理
1.8、DNS
DNS負(fù)責(zé)為整個集群提供DNS服務(wù),從而實現(xiàn)服務(wù)之間的訪問
DNS組件歷史版本有skydns、kube-dns和coredns三個,k8s 1.3版本之前使用skydns,之后的版本到1.17之間的版本使用kube-dns,目前主要使用coredns,DNS組件用于解析k8s集群中service?name所對應(yīng)得到IP地址
1.9、Dashboard:
*?Dashboard是基于網(wǎng)頁的Kubernetes用戶界面,可以使用Dashboard獲取運行在集群中的應(yīng)用的概覽信息,也可以創(chuàng)建或者修改Kubernetes資源(如Deployment,Job,DaemonSet等等),也可以對Deployment實現(xiàn)彈性伸縮、發(fā)起滾動升級、重啟Pod或者使用向?qū)?chuàng)建新的應(yīng)用。