Kubernetes vs.Docker:了解容器和編排
人們需要了解Docker和Kubernetes如何改變應(yīng)用程序開(kāi)發(fā),以及這些關(guān)鍵容器技術(shù)如何融合在一起。
如果了解軟件開(kāi)發(fā)的新趨勢(shì),那么人們總會(huì)聽(tīng)到這兩個(gè)術(shù)語(yǔ):Docker和Kubernetes,它們實(shí)質(zhì)上是容器和編排的代稱。
Docker容器幫助簡(jiǎn)化了通過(guò)開(kāi)發(fā)和測(cè)試以及進(jìn)入生產(chǎn)環(huán)境的應(yīng)用程序遷移過(guò)程,而Docker和Kubernetes都幫助重新構(gòu)建了應(yīng)用程序的構(gòu)建和部署方式,也就是作為微服務(wù)集合而不是單一堆棧的方式。
Docker和Kubernetes為什么如此重要?它們?nèi)绾胃淖冘浖_(kāi)發(fā)?以及它們各自在過(guò)程中扮演什么角色?以下對(duì)這些問(wèn)題進(jìn)行解答。
Docker和容器
容器是在Linux、Windows和其他現(xiàn)代操作系統(tǒng)中,允許軟件在獨(dú)立于系統(tǒng)其他部分的小型環(huán)境中運(yùn)行。容器被比喻為虛擬機(jī),但它們不是虛擬機(jī),容器更精簡(jiǎn),啟動(dòng)和停止更快,并且更加靈活和可遷移。由于容器可以在幾秒鐘內(nèi)運(yùn)行或擴(kuò)展,因此它們使在諸如云平臺(tái)之類的彈性環(huán)境中運(yùn)行應(yīng)用程序變得更加容易。
Linux和其他操作系統(tǒng)多年來(lái)一直支持容器化應(yīng)用程序,但使用容器并不完全是用戶友好的。無(wú)論是開(kāi)源的還是商業(yè)化的Docker,它都使容器成為一種用戶友好和開(kāi)發(fā)者友好的商品。Docker為容器提供了一組通用的工具,因此用戶可以將應(yīng)用程序打包到容器映像中,以便在自己的組織或其他地方輕松部署和重用。
簡(jiǎn)而言之,Docker可以輕松創(chuàng)建容器映像,對(duì)其進(jìn)行版本控制、共享、移動(dòng)它們,以及將它們作為運(yùn)行中的容器部署到與Docker兼容的主機(jī)中。
什么時(shí)候使用Docker和容器?
Docker和容器最適合用戶處理必須具有以下一項(xiàng)或多個(gè)特性的工作負(fù)載:
- 彈性可擴(kuò)展。用戶如果不知道需要運(yùn)行多少個(gè)應(yīng)用實(shí)例才能滿足需求??梢酝ㄟ^(guò)部署更少或更多容器實(shí)例來(lái)擴(kuò)展容器化應(yīng)用或服務(wù)以滿足需求。
- 隔離。用戶如果不希望這個(gè)應(yīng)用程序干擾其他應(yīng)用程序。也許將同時(shí)運(yùn)行多個(gè)版本的應(yīng)用程序,以滿足不同版本的API。或者用戶想保持底層系統(tǒng)的清潔。
- 可遷移性。用戶需要在各種環(huán)境中運(yùn)行該應(yīng)用程序,并且要求每個(gè)設(shè)置都具有可復(fù)制性。容器使用戶可以打包應(yīng)用程序的整個(gè)運(yùn)行時(shí)環(huán)境,從而使該應(yīng)用程序易于部署與Docker兼容主機(jī)的任何位置,其中包括開(kāi)發(fā)人員桌面、QA測(cè)試機(jī)、本地裸機(jī)或遠(yuǎn)程云。
Kubernetes和容器編排
容器的設(shè)計(jì)主要是為了使進(jìn)程或應(yīng)用程序與底層系統(tǒng)彼此隔離。創(chuàng)建和部署單個(gè)容器很容易。但是,如果用戶要將多個(gè)容器(例如,數(shù)據(jù)庫(kù)、Web前端、計(jì)算后端)組裝到可以作為一個(gè)整體進(jìn)行管理的大型應(yīng)用程序中,而不必?fù)?dān)心部署、連接、管理,并分別擴(kuò)展每個(gè)容器?用戶需要一種方法把所有的部分編成一個(gè)功能完整的整體。
這就是Kubernetes要做的工作。如果說(shuō)容器是郵輪上的乘客,那么Kubernetes就是郵輪的主管。
Kubernetes基于谷歌公司創(chuàng)建的項(xiàng)目,提供了一種自動(dòng)化跨多個(gè)主機(jī)部署和管理多容器應(yīng)用程序的方法,而無(wú)需直接管理每個(gè)容器。開(kāi)發(fā)人員描述了應(yīng)用程序跨多個(gè)容器的布局,其中包括每個(gè)容器如何使用網(wǎng)絡(luò)和存儲(chǔ)等詳細(xì)信息。Kubernetes在運(yùn)行時(shí)處理其余的部分,它還處理諸如機(jī)密和應(yīng)用程序配置之類的瑣碎細(xì)節(jié)的管理。
Kubernetes需要一定的專業(yè)知識(shí)才能很好地使用,盡管它比過(guò)去更像是一個(gè)交鑰匙解決方案。易用性方面的某些進(jìn)步歸因于常見(jiàn)應(yīng)用的簡(jiǎn)便配方(Helm圖表);部分原因是由知名廠商(Red Hat、Canonical、Docker)發(fā)布的大量Kubernetes發(fā)行版,這些發(fā)行版與流行的應(yīng)用程序堆棧和開(kāi)發(fā)框架緊密結(jié)合。
什么時(shí)候使用Kubernetes和容器?
為少數(shù)用戶提供服務(wù)的簡(jiǎn)單容器化應(yīng)用通常不需要編排,更不用說(shuō)Kubernetes了。但是,如果應(yīng)用程序擁有的功能級(jí)別或用戶數(shù)量超過(guò)微不足道的水平,則很難不重新開(kāi)發(fā)編排系統(tǒng)所提供的功能。這是確定何時(shí)采用容器的一些經(jīng)驗(yàn)法則。
- 如果應(yīng)用程序很復(fù)雜。任何涉及兩個(gè)以上容器的應(yīng)用程序都可以滿足要求。也就是說(shuō),僅通過(guò)少量的解決方案(例如Docker群模式)而不是Kubernetes可以精心安排僅服務(wù)于少量用戶的適度應(yīng)用。
- 如果應(yīng)用程序?qū)U(kuò)展性和彈性有很高的要求。Kubernetes和其他協(xié)調(diào)器使用戶可以通過(guò)描述系統(tǒng)的期望狀態(tài),而不是人工編程對(duì)變化的條件的反應(yīng)來(lái)平衡負(fù)載,并運(yùn)行容器以聲明式地滿足需求。
- 如果想充分利用現(xiàn)代持續(xù)集成 (CI)/持續(xù)交付(CD)技術(shù)。編排系統(tǒng)支持部署或升級(jí)的應(yīng)用程序的部署模式。
也許會(huì)有一天,Docker和Kubernetes甚至?xí)桓押玫某橄笏〈?,并讓位于更?yōu)雅的方式來(lái)創(chuàng)建和管理容器。但是到目前為止,Docker和Kubernetes對(duì)于了解和理解容器和編排至關(guān)重要。