使用Kubernetes的四個(gè)理由
大多數(shù)現(xiàn)代軟件開發(fā)人員可以證明,容器為我們提供了更大的靈活性,可以在物理和虛擬基礎(chǔ)架構(gòu)上運(yùn)行云原生應(yīng)用程序。容器將組成應(yīng)用程序的服務(wù)打包,并使其可在不同的計(jì)算環(huán)境中移植,以供開發(fā)/測試和生產(chǎn)使用。使用容器,可以輕松地快速擴(kuò)展應(yīng)用程序?qū)嵗赃m應(yīng)需求的高峰。而且由于容器利用了主機(jī)OS的資源,因此它們的重量比虛擬機(jī)輕得多。這意味著容器可以高效利用基礎(chǔ)服務(wù)器基礎(chǔ)架構(gòu)。到目前為止,一切都很好。
但是,盡管容器運(yùn)行時(shí)API非常適合于管理單個(gè)容器,但在管理可能包含分布在多個(gè)主機(jī)上的數(shù)百個(gè)容器的應(yīng)用程序時(shí),它們?nèi)匀贿h(yuǎn)遠(yuǎn)不足。需要管理容器并將其連接到外部,以執(zhí)行諸如調(diào)度,負(fù)載平衡和分發(fā)之類的任務(wù),這就是諸如Kubernetes這樣的容器編排工具所獨(dú)有的地方。
Kubernetes是一個(gè)用于部署,擴(kuò)展和管理容器化應(yīng)用程序的開源系統(tǒng),可處理將容器調(diào)度到計(jì)算集群上的工作,并管理工作量以確保它們按用戶預(yù)期的方式運(yùn)行。Kubernetes并沒有在事后再加上操作,而是通過設(shè)計(jì)將軟件開發(fā)和操作結(jié)合在一起。通過使用聲明性的,與基礎(chǔ)結(jié)構(gòu)無關(guān)的構(gòu)造來描述應(yīng)用程序的組成方式,它們?nèi)绾谓换ヒ约叭绾喂芾硭鼈?,Kubernetes使得現(xiàn)代軟件系統(tǒng)的可操作性得到了大幅度的提高。Kubernetes是由Google根據(jù)自己在生產(chǎn)中運(yùn)行容器的經(jīng)驗(yàn)而構(gòu)建的,它的成功很大程度上歸功于Google的參與。Google擁有地球上一些最有才華的軟件開發(fā)人員,并且按規(guī)模運(yùn)行著一些最大的軟件服務(wù)。這種結(jié)合確保了Kubernetes將成為堅(jiān)如磐石的平臺(tái),幾乎可以滿足任何組織的擴(kuò)展需求。
本文解釋了Kubernetes為什么如此重要以及為什么它標(biāo)志著Devops團(tuán)隊(duì)向前邁出了重要的一步。
當(dāng)今的基礎(chǔ)架構(gòu)框架
如今,開發(fā)人員被要求編寫在多個(gè)操作環(huán)境中運(yùn)行的應(yīng)用程序,包括專用的本地服務(wù)器,虛擬化的私有云以及諸如AWS和Azure的公共云。傳統(tǒng)上,支持它們的應(yīng)用程序和工具與底層基礎(chǔ)結(jié)構(gòu)緊密聯(lián)系在一起,因此盡管具有潛在優(yōu)勢,但使用其他部署模型的成本很高。這意味著應(yīng)用程序在多個(gè)方面都依賴于特定環(huán)境,包括與特定網(wǎng)絡(luò)體系結(jié)構(gòu)有關(guān)的性能問題;遵守特定于云提供商的架構(gòu),例如專有的編排技術(shù);以及對特定后端存儲(chǔ)系統(tǒng)的依賴性。PaaS試圖解決這些問題,但通常以在編程語言和應(yīng)用程序框架等領(lǐng)域提出嚴(yán)格要求為代價(jià)。因此,PaaS對許多開發(fā)團(tuán)隊(duì)來說都是禁區(qū)。Kubernetes通過為容器提供核心功能而沒有施加限制,從而消除了基礎(chǔ)架構(gòu)鎖定。它通過結(jié)合Kubernetes平臺(tái)內(nèi)的功能(包括Pod和Services)來實(shí)現(xiàn)此目的。
通過模塊化改善管理
容器允許將應(yīng)用程序分解為較小的部分,并且可以將關(guān)注點(diǎn)清楚地分開。為單個(gè)容器映像提供的抽象層使我們可以從根本上重新考慮分布式應(yīng)用程序的構(gòu)建方式。這種模塊化的方法可以使規(guī)模較小,專注程度更高的團(tuán)隊(duì)加快開發(fā)速度,每個(gè)團(tuán)隊(duì)分別負(fù)責(zé)特定的容器。它還使我們能夠隔離依賴關(guān)系,并廣泛使用經(jīng)過調(diào)整的較小組件。但是,僅靠容器是無法實(shí)現(xiàn)的;它需要一個(gè)用于集成和編排這些模塊化部件的系統(tǒng)。Kubernetes在某種程度上使用Pod來實(shí)現(xiàn)這一目標(biāo)-Pod通常是作為單個(gè)應(yīng)用程序控制的一組容器。容器共享資源,例如文件系統(tǒng),內(nèi)核名稱空間和IP地址。通過允許以這種方式并置容器,Kubernetes消除了將太多功能塞入單個(gè)容器映像的誘惑。Kubernetes中的服務(wù)概念用于將執(zhí)行類似功能的Pod集合組合在一起。可以輕松配置服務(wù)以實(shí)現(xiàn)可發(fā)現(xiàn)性,可觀察性,水平擴(kuò)展和負(fù)載平衡。
大規(guī)模部署和更新軟件
Devops作為一種加快構(gòu)建,測試和發(fā)布軟件過程的方法而出現(xiàn)。其必然結(jié)果是將重點(diǎn)從管理基礎(chǔ)結(jié)構(gòu)轉(zhuǎn)移到管理軟件的大規(guī)模部署和更新方式。大多數(shù)基礎(chǔ)架構(gòu)框架都不支持該模型,但是Kubernetes可以部分支持Kubernetes Controller。借助控制器,可以輕松使用基礎(chǔ)架構(gòu)來管理應(yīng)用程序生命周期。部署控制器簡化了許多復(fù)雜的管理任務(wù)。例如:
1. 可擴(kuò)展性:可以首次在Pod中以橫向擴(kuò)展方式部署軟件,并且可以隨時(shí)擴(kuò)展或橫向擴(kuò)展部署。
2. 可見性:使用狀態(tài)查詢功能來識(shí)別完成,進(jìn)行中和失敗的部署。
3. 節(jié)省時(shí)間:隨時(shí)暫停部署,再之后再恢復(fù)。
4. 版本控制:如果當(dāng)前版本不穩(wěn)定,則使用較新版本的應(yīng)用程序映像更新已部署的Pod,并回滾到較早的部署。
在其他可能性中,Kubernetes簡化了一些特定的部署操作,這些操作對于現(xiàn)代應(yīng)用程序的開發(fā)人員特別有價(jià)值。其中包括:
1. 水平自動(dòng)伸縮:Kubernetes自動(dòng)縮放器會(huì)根據(jù)指定資源的使用(在定義的限制內(nèi))自動(dòng)確定部署的Pod數(shù)量。
2. 滾動(dòng)更新:Kubernetes部署的更新在部署的Pod中以“滾動(dòng)方式”編排。在對可能不可用的Pod數(shù)量和可能臨時(shí)存在的備用Pod數(shù)量進(jìn)行可選的預(yù)定義限制時(shí),精心策劃了這些滾動(dòng)更新。
3. 金絲雀部署:部署新版本的部署時(shí),一種有用的模式是先在生產(chǎn)環(huán)境中與先前版本并行測試新部署,并擴(kuò)大新部署,同時(shí)縮減先前部署。
與傳統(tǒng)的包羅萬象的PaaS產(chǎn)品不同,Kubernetes為支持的應(yīng)用程序類型提供了廣泛的自由度。它不會(huì)規(guī)定應(yīng)用程序框架(例如Wildfly),限制受支持的語言運(yùn)行時(shí)(Java,Python,Ruby),僅迎合12個(gè)因素的應(yīng)用程序,也不會(huì)區(qū)分“應(yīng)用程序”與“服務(wù)”。Kubernetes支持各種各樣的工作負(fù)載,包括無狀態(tài),有狀態(tài)和數(shù)據(jù)處理工作負(fù)載。如果應(yīng)用程序可以在容器中運(yùn)行,那么它應(yīng)該在Kubernetes上運(yùn)行良好。
為云原生應(yīng)用奠定基礎(chǔ)
鑒于對容器的興趣不足為奇,因此出現(xiàn)了其他管理和編排工具。受歡迎的替代方案包括帶有Marathon的Apache Mesos,Docker Swarm,AWS EC2容器服務(wù)(ECS)和HashiCorp的Nomad。每個(gè)都有其優(yōu)點(diǎn)。Docker Swarm與Docker運(yùn)行時(shí)緊密捆綁在一起,因此用戶可以輕松地從Docker過渡到Swarm;Mesos與Marathon并不僅限于容器,還可以部署任何類型的應(yīng)用程序。當(dāng)前的AWS用戶更易于訪問AWS ECS。但是,Kubernetes集群可以在EC2上運(yùn)行,并與Amazon Elastic Block Storage,Elastic Load Balancing,Auto Scaling Groups等服務(wù)集成。這些框架在特性和功能上開始相互復(fù)制,但是由于其架構(gòu),創(chuàng)新和周圍的大型開源社區(qū),Kubernetes仍然非常受歡迎。Kubernetes對于開發(fā)人員來說是一個(gè)突破,因?yàn)樗箞F(tuán)隊(duì)能夠跟上現(xiàn)代軟件開發(fā)的需求。在沒有Kubernetes的情況下,團(tuán)隊(duì)經(jīng)常被迫編寫自己的軟件部署,擴(kuò)展和更新工作流程的腳本。一些組織雇用大型團(tuán)隊(duì)來單獨(dú)處理這些任務(wù)。Kubernetes允許我們從容器中獲得最大的效用,并構(gòu)建可在任何地方運(yùn)行的云原生應(yīng)用程序,而不受云特定需求的影響。顯然,這是我們一直在等待的應(yīng)用程序開發(fā)和運(yùn)營的有效模型。
原文鏈接:https://www.infoworld.com/article/3173266/4-reasons-you-should-use-kubernetes.html