新聞中心
前言

創(chuàng)新互聯(lián)公司于2013年成立,先為興縣等服務(wù)建站,興縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為興縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
K8S
K8S現(xiàn)在是一項(xiàng)必會的技能,它為軟件工程師提供了強(qiáng)大的容器編排能力,模糊了開發(fā)和運(yùn)維之間的邊界,讓我們開發(fā)、管理和維護(hù)一個大型的分布式系統(tǒng)和項(xiàng)目變得更加容易,并且每次面試多多少少都會問到,筆者也是被問到了很多次。本文就準(zhǔn)備用最短的篇幅來介紹下K8S的工作過程。
K8S架構(gòu)組成
Kubernetes最初源于谷歌內(nèi)部的Borg,提供了面向應(yīng)用的容器集群部署和管理系統(tǒng)。Kubernetes借鑒了Borg的設(shè)計(jì)理念,比如Pod、Service、Labels和單Pod單IP等。
K8S架構(gòu)圖
Kubernetes主要由以下幾個核心組件組成:
- etcd保存了整個集群的狀態(tài);
- apiserver提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API注冊和發(fā)現(xiàn)等機(jī)制;
- controller manager負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測、自動擴(kuò)展、滾動更新等;
- scheduler負(fù)責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機(jī)器上;
- kubelet負(fù)責(zé)維護(hù)容器的生命周期,同時也負(fù)責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理;
- Container runtime負(fù)責(zé)鏡像管理以及Pod和容器的真正運(yùn)行(CRI);
- kube-proxy負(fù)責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡;
除了核心組件,還有一些推薦的Add-ons:
- kube-dns負(fù)責(zé)為整個集群提供DNS服務(wù)
- Ingress Controller為服務(wù)提供外網(wǎng)入口
- Heapster提供資源監(jiān)控
- Dashboard提供GUI
- Federation提供跨可用區(qū)的集群
- Fluentd-elasticsearch提供集群日志采集、存儲與查詢
k8s各組件間工作流程
K8S工作過程
①運(yùn)維人員向kube-apiserver發(fā)出指令(我想干什么,我期望事情是什么狀態(tài))
(以下kube-apiserver簡稱apiserver、kube-controller-manager簡稱controller、kube-scheduler簡稱scheduler)
②api響應(yīng)命令,通過一系列認(rèn)證授權(quán),把pod數(shù)據(jù)存儲到etcd,創(chuàng)建deployment資源并初始化。(期望狀態(tài))
③controller通過list-watch機(jī)制,監(jiān)測發(fā)現(xiàn)新的deployment,將該資源加入到內(nèi)部工作隊(duì)列,發(fā)現(xiàn)該資源沒有關(guān)聯(lián)的pod和replicaset,啟用deployment controller創(chuàng)建replicaset資源,再啟用replicaset controller創(chuàng)建pod。
④所有controller被創(chuàng)建完成后.將deployment,replicaset,pod資源更新存儲到etcd。
⑤scheduler通過list-watch機(jī)制,監(jiān)測發(fā)現(xiàn)新的pod,經(jīng)過主機(jī)過濾、主機(jī)打分規(guī)則,將pod綁定(binding)到合適的主機(jī)。
⑥將綁定結(jié)果存儲到etcd。
⑦kubelet每隔 20s(可以自定義)向apiserver通過NodeName 獲取自身Node上所要運(yùn)行的pod清單.通過與自己的內(nèi)部緩存進(jìn)行比較,新增加pod。
⑧kubelet創(chuàng)建pod。
⑨kube-proxy為新創(chuàng)建的pod注冊動態(tài)DNS到CoreOS。給pod的service添加iptables/ipvs規(guī)則,用于服務(wù)發(fā)現(xiàn)和負(fù)載均衡。
⑩controller通過control loop(控制循環(huán))將當(dāng)前pod狀態(tài)與用戶所期望的狀態(tài)做對比,如果當(dāng)前狀態(tài)與用戶期望狀態(tài)不同,則controller會將pod修改為用戶期望狀態(tài),實(shí)在不行會將此pod刪掉,然后重新創(chuàng)建pod。
總結(jié)
[[348916]]
K8S
Kubernetes的架構(gòu)設(shè)計(jì),理清楚之后,其實(shí)還是很簡單的。面試的時候問到K8S原理,對于大部分人來說能答出這些,基本上就差不多了。Kubernetes深入的實(shí)現(xiàn)原理,還需要單獨(dú)分析,本文只是一個拋磚引玉,如果有錯誤,歡迎大家批評指正。大家一起努力進(jìn)步!
名稱欄目:面試問到了K8S原理,花5分鐘來總結(jié)下,以后再也不怕了
文章路徑:http://fisionsoft.com.cn/article/dppjige.html


咨詢
建站咨詢
