Kubernetes原理浅析
傳統(tǒng)部署時(shí)代:?早期,組織在物理服務(wù)器上運(yùn)行應(yīng)用程序。無法為物理服務(wù)器中的應(yīng)用程序定義資源邊界,這會(huì)導(dǎo)致資源分配問題。例如,如果在物理服務(wù)器上運(yùn)行多個(gè)應(yīng)用程序,則可能會(huì)出現(xiàn)一個(gè)應(yīng)用程序占用大部分資源的情況,結(jié)果可能導(dǎo)致其他應(yīng)用程序的性能下降。一種解決方案是在不同的物理服務(wù)器上運(yùn)行每個(gè)應(yīng)用程序,但是由于資源利用不足而無法擴(kuò)展,并且組織維護(hù)許多物理服務(wù)器的成本很高。
虛擬化部署時(shí)代:?作為解決方案,引入了虛擬化功能,它允許您在單個(gè)物理服務(wù)器的 CPU 上運(yùn)行多個(gè)虛擬機(jī)(VM)。虛擬化功能允許應(yīng)用程序在 VM 之間隔離,并提供安全級(jí)別,因?yàn)橐粋€(gè)應(yīng)用程序的信息不能被另一應(yīng)用程序自由地訪問。
因?yàn)樘摂M化可以輕松地添加或更新應(yīng)用程序、降低硬件成本等等,所以虛擬化可以更好地利用物理服務(wù)器中的資源,并可以實(shí)現(xiàn)更好的可伸縮性。
每個(gè) VM 是一臺(tái)完整的計(jì)算機(jī),在虛擬化硬件之上運(yùn)行所有組件,包括其自己的操作系統(tǒng)。
容器部署時(shí)代:?容器類似于 VM,但是它們具有輕量級(jí)的隔離屬性,可以在應(yīng)用程序之間共享操作系統(tǒng)(OS)。因此,容器被認(rèn)為是輕量級(jí)的。容器與 VM 類似,具有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等。由于它們與基礎(chǔ)架構(gòu)分離,因此可以跨云和 OS 分發(fā)進(jìn)行移植。
容器當(dāng)下大家比較熟知的是docker,而Kubernetes可以看作docker的管理工具。
為什么需要Kubernetes?
真正的生產(chǎn)型應(yīng)用會(huì)涉及多個(gè)容器。這些容器必須跨多個(gè)服務(wù)器主機(jī)進(jìn)行部署。容器安全性需要多層部署,因此可能會(huì)比較復(fù)雜。但 Kubernetes 有助于解決這一問題。簡單來說,就是Kubernetes 可以幫助開發(fā)者構(gòu)建跨多個(gè)容器的應(yīng)用服務(wù)、跨集群調(diào)度、擴(kuò)展這些容器,并長期持續(xù)管理這些容器的健康狀況。
專業(yè)術(shù)語:
主機(jī)(Master):?用于控制 Kubernetes 節(jié)點(diǎn)的計(jì)算機(jī)。所有任務(wù)分配都來自于此。
API SERVER:用戶不論用命令行還是圖形界面,請(qǐng)求都發(fā)送至api server,內(nèi)部系統(tǒng)與外部用戶也通過相同的api通信
etcd:存儲(chǔ)集群的配置和狀態(tài),主節(jié)點(diǎn)通過etcd查詢節(jié)點(diǎn),容器與容器的狀態(tài)參數(shù)
Controllers:從api server獲取到所需狀態(tài),控制節(jié)點(diǎn)的當(dāng)前狀態(tài),有差異就解決
Scheduler:監(jiān)聽來自api的新請(qǐng)求,對(duì)節(jié)點(diǎn)進(jìn)行排名,把pod部署到合適的節(jié)點(diǎn),不合適就先掛著不部署
?
節(jié)點(diǎn)(Node):負(fù)責(zé)執(zhí)行請(qǐng)求和所分配任務(wù)的計(jì)算機(jī)。由 Kubernetes 主機(jī)負(fù)責(zé)對(duì)節(jié)點(diǎn)進(jìn)行控制。
?
容器集(Pod):被部署在單個(gè)節(jié)點(diǎn)上的,且包含一個(gè)或多個(gè)容器的容器組。同一容器集中的所有容器共享同一個(gè) IP 地址、IPC、主機(jī)名稱及其它資源。容器集會(huì)將網(wǎng)絡(luò)和存儲(chǔ)從底層容器中抽象出來。這樣,您就能更加輕松地在集群中移動(dòng)容器。
Kubelet:運(yùn)行在節(jié)點(diǎn)上的服務(wù),1.監(jiān)視來自api的任務(wù),執(zhí)行任務(wù),并向主節(jié)點(diǎn)報(bào)告。2.監(jiān)視pod,pod有問題會(huì)向控制程序報(bào)告,控制程序會(huì)改變分配策略。
Container Runtime:容器運(yùn)行時(shí)從鏡像庫拉取鏡像。
kube-proxy:讓每個(gè)節(jié)點(diǎn)獲得他的IP地址,實(shí)現(xiàn)負(fù)載均衡。
復(fù)制控制器(Replication controller):用于控制應(yīng)在集群某處運(yùn)行的完全相同的容器集副本數(shù)量。
?
當(dāng)pod有問題時(shí),kubernetes會(huì)創(chuàng)造一個(gè)和原來一樣的pod,但是IP不一樣。service用來解決這個(gè)問題。
服務(wù)(Service):將工作內(nèi)容與容器集分離。Kubernetes 服務(wù)代理會(huì)自動(dòng)將服務(wù)請(qǐng)求分發(fā)到正確的容器集——無論這個(gè)容器集會(huì)移到集群中的哪個(gè)位置,甚至可以被替換掉。
?
Kubernetes 工作的簡單流程:
主機(jī)(master)接收開發(fā)者的命令,自動(dòng)選擇從屬節(jié)點(diǎn)(node)進(jìn)行分發(fā),之后它將在該節(jié)點(diǎn)分配資源,并指派容器集來完成任務(wù)請(qǐng)求。
當(dāng)?kubernetes 將容器集調(diào)度到一個(gè)節(jié)點(diǎn)上時(shí),該節(jié)點(diǎn)上的 kubelet 會(huì)發(fā)送指令讓 docker 啟動(dòng)指定的容器。kubelet 隨后會(huì)不斷從 docker 收集這些容器的狀態(tài),并將這些信息匯集至主機(jī)。
總結(jié)
以上是生活随笔為你收集整理的Kubernetes原理浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode--289. 生命游戏
- 下一篇: 牛客网--称砝码