當(dāng)Docker 成為流行趨勢(shì)之后,Kubernetes獲得快速發(fā)展,成為最常用的容器編排工具。那么問(wèn)題來(lái)了,Kubernetes為什么重要?什么是Kubernetes?什么時(shí)候使用?如何使用?本文將按照各個(gè)要點(diǎn),逐一總結(jié)!
1、Kubernetes為什么重要?
在Kubernetes沒(méi)出現(xiàn)以前,我們都認(rèn)為容器是云管理平臺(tái)應(yīng)用部署的最佳工具。容器為軟件開(kāi)發(fā)和運(yùn)維提供了新視角,通過(guò)使用容器,軟件開(kāi)發(fā)人員可以很容易地將應(yīng)用打包,它既可以把應(yīng)用程序拆分為分布式組件,也可以整體移植一個(gè)應(yīng)用,而不像傳統(tǒng)的虛擬機(jī)那樣需要安裝復(fù)雜的插件。
當(dāng)整個(gè)世界開(kāi)始走向分布式架構(gòu),當(dāng)企業(yè)變得更加依賴網(wǎng)絡(luò)、依賴計(jì)算,當(dāng)單塊應(yīng)用開(kāi)始遷移到微服務(wù),我們的用戶更希望通過(guò)微服務(wù)單獨(dú)擴(kuò)展關(guān)鍵功能,并能夠處理數(shù)百萬(wàn)客戶業(yè)務(wù)。因此,Docker容器、Mesos和AWS ECS等工具出現(xiàn)在企業(yè)應(yīng)用名錄中,這些工具為用戶創(chuàng)建和部署微服務(wù)提供了更好的一致性、可移植性和更簡(jiǎn)單的操作方式。
但是,一旦企業(yè)應(yīng)用變得更成熟和復(fù)雜,就需要在多臺(tái)機(jī)器上運(yùn)行多個(gè)容器。用戶需要確定匹配多少個(gè)容器,容器的存儲(chǔ)方式、存儲(chǔ)數(shù)據(jù)量、性能需求等,如果這些工作全部用人工來(lái)統(tǒng)計(jì),那簡(jiǎn)直是噩夢(mèng)。
為解決容器的編排需求,Kubernetes應(yīng)運(yùn)而生!
2、什么是Kubernetes?
當(dāng)容器管理成為Docker時(shí)代最重要的需求,谷歌做出了大膽決定,開(kāi)放內(nèi)部項(xiàng)目Borg。為了進(jìn)一步增強(qiáng)容器管理功能,谷歌又開(kāi)發(fā)了Kubernetes。這是一個(gè)開(kāi)源項(xiàng)目,可自動(dòng)化、大規(guī)模部署和管理容器應(yīng)用過(guò)程。
于是,2014年年中,Kubernetes正式誕生,并在很短的時(shí)間內(nèi)成長(zhǎng)為開(kāi)源社區(qū),受到來(lái)自谷歌、Red Hat和許多其他公司工程師的熱捧。
kubernetes,簡(jiǎn)稱K8s,是用8代替8個(gè)字符“ubernete”而成的縮寫(xiě)。簡(jiǎn)單理解,kubernetes是一個(gè)開(kāi)源的容器管理系統(tǒng),用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用。Kubernetes的目標(biāo)是,讓部署容器化的應(yīng)用變得簡(jiǎn)單和高效,Kubernetes提供了應(yīng)用部署,規(guī)劃,更新和維護(hù)的一種新機(jī)制。
kubernetes的一些功能包括:管理容器集群、提供部署應(yīng)用的工具、根據(jù)需要擴(kuò)展應(yīng)用、對(duì)現(xiàn)有容器應(yīng)用的更改進(jìn)行管理、能優(yōu)化容器下的底層硬件的使用。另外,kubernetes還能管理跨機(jī)器的容器,解決Docker跨機(jī)器容器之間的通訊問(wèn)題。
實(shí)際上,Kubernetes提供了比基礎(chǔ)框架更多的內(nèi)容,用戶可以選擇不同的應(yīng)用框架、語(yǔ)言、監(jiān)視工具和日志管理的類型等。雖然kubernetes不能完全當(dāng)作服務(wù)平臺(tái),但絕對(duì)是一個(gè)很完整的PaaS。
3、Kubernetes具體應(yīng)用場(chǎng)景是怎樣的?
創(chuàng)新互聯(lián)公司是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷、企業(yè)網(wǎng)站建設(shè),賣友情鏈接,廣告投放為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計(jì)到用戶體驗(yàn)提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
Kubernetes的工作原理
KubernetesMaster:提供集群管理控制中心,是最主要的控制單元,管理各系統(tǒng)之間的工作負(fù)載和通信。Master組件可以在集群中任何節(jié)點(diǎn)上運(yùn)行。但是為了簡(jiǎn)單起見(jiàn),通常在一臺(tái)VM/機(jī)器上啟動(dòng)所有Master組件,并且不會(huì)在此VM/機(jī)器上運(yùn)行用戶容器。
Etcd:一個(gè)開(kāi)源的用于配置共享和服務(wù)發(fā)現(xiàn)的高性能的鍵值存儲(chǔ)系統(tǒng),由CoreOS團(tuán)隊(duì)開(kāi)發(fā),也是CoreOS的核心組件。Kubernetes使用“Etcd”存儲(chǔ)集群的配置數(shù)據(jù),對(duì)集群內(nèi)部組建進(jìn)行協(xié)調(diào)。
API- server: 是接收和修改REST請(qǐng)求的中央控制系統(tǒng),用作控制集群的前端。此外,這是唯一與Etcd集群通信的東西,確保數(shù)據(jù)存儲(chǔ)在Etcd中。
scheduler:是關(guān)鍵角色,它決定了任務(wù)何時(shí)被調(diào)度運(yùn)行,也決定一次任務(wù)運(yùn)行中,哪些節(jié)點(diǎn)可以被執(zhí)行。被判定執(zhí)行的節(jié)點(diǎn)會(huì)被scheduler通過(guò)MQ或FaaS發(fā)送給worker執(zhí)行。不同業(yè)務(wù)的任務(wù)有獨(dú)立的scheduler負(fù)責(zé)調(diào)度,發(fā)送任務(wù)到指定的Worker上。
Controller:是一個(gè)控制器,在后臺(tái)運(yùn)行許多不同的控制器進(jìn)程,用以控制集群的共享狀態(tài),并執(zhí)行例行任務(wù)。當(dāng)服務(wù)發(fā)生任何更改時(shí),控制器會(huì)發(fā)現(xiàn)更改,并開(kāi)始以新的狀態(tài)工作。
Worker Node:也被稱為Kubernetes或Minion節(jié)點(diǎn),它包含管理容器之間的網(wǎng)絡(luò)(如Docker)和主節(jié)點(diǎn)之間的通信信息,并按照計(jì)劃將資源分配給容器
Kubelet: Kubelet確保節(jié)點(diǎn)中的所有容器都在運(yùn)行,并處于健康狀態(tài)。Kubelet負(fù)責(zé)pod的創(chuàng)建,以及是不是想要的狀態(tài)。如果Node失敗,Controller會(huì)觀察到這個(gè)變化,并在另一個(gè)健康的pod上啟動(dòng)pod。
Container:是微服務(wù)的最低級(jí)別,放置在pod中,需要外部IP地址才能查看外部進(jìn)程。
Kube Proxy:充當(dāng)網(wǎng)絡(luò)代理和負(fù)載均衡器。此外,它將請(qǐng)求轉(zhuǎn)發(fā)到集群中的隔離網(wǎng)絡(luò)中,主要負(fù)責(zé)為Pod對(duì)象提供代理。
cAdvisor:充當(dāng)助理,負(fù)責(zé)監(jiān)視和收集關(guān)于每個(gè)節(jié)點(diǎn)上的資源使用和性能指標(biāo)的數(shù)據(jù)。
Kubernetes的優(yōu)點(diǎn):
1)部署簡(jiǎn)單,更具開(kāi)放性
Kubernetes可以在一個(gè)或多個(gè)云環(huán)境、虛擬機(jī)或裸機(jī)上運(yùn)行容器,這意味著它可以部署在任何基礎(chǔ)設(shè)施上。此外,它兼容多個(gè)平臺(tái),使得多云策略高度靈活和可用。
2)更強(qiáng)大的工作負(fù)載能力和可伸縮性
Kubernetes為應(yīng)用擴(kuò)展提供了幾個(gè)大的特性,比如:水平擴(kuò)展、自動(dòng)縮放、手動(dòng)縮放、可復(fù)制控制器創(chuàng)建的Pods等。另外,Kubernetes還提供了更強(qiáng)大的高可用性、健康檢查、流量控制和負(fù)載均衡器、自動(dòng)轉(zhuǎn)出和回滾等。
總結(jié)來(lái)看,Kubernetes為開(kāi)發(fā)云應(yīng)用奠定了更堅(jiān)實(shí)的基礎(chǔ),Kubernetes和其他管理編配工具一樣,如Marathon的Apache Mesos、Docker Swarm和AWS EC2等,提供了很棒的特性,但其他工具的份量都比Kubernetes小。