一文讀懂 Kubernetes 與 Docker
兩個(gè)最具影響力的云計(jì)算開(kāi)源項(xiàng)目之間的異同。
Kubernetes vs. Docker 是一個(gè)在云計(jì)算行業(yè)被多次提及的話題。無(wú)論你來(lái)自非技術(shù)背景,需要快速介紹,還是需要做商業(yè)決策,我都希望以下幾點(diǎn)能一勞永逸地澄清這件事。
我們需要超越圍繞 Kubernetes 和 Docker 的炒作。這些詞的意思很重要,在它們之上運(yùn)行您的業(yè)務(wù)之前要掌握。
Kubernetes 和 Docker 之間的共生關(guān)系
問(wèn)題“Kubernetes vs. Docker?” 本身是相當(dāng)荒謬的,就像將蘋(píng)果比作橘子一樣。一個(gè)不是另一個(gè)的替代品。恰恰相反,Kubernetes 可以在沒(méi)有 Docker 的情況下運(yùn)行,而 Docker 可以在沒(méi)有 Kubernetes 的情況下運(yùn)行。但是 Kubernetes 可以(并且確實(shí))從 Docker 中受益匪淺,反之亦然。
Docker 是一個(gè)獨(dú)立的應(yīng)用程序,可以安裝在任何計(jì)算機(jī)上以運(yùn)行容器化應(yīng)用程序。容器化是一種在操作系統(tǒng)上運(yùn)行應(yīng)用程序的方法,以便應(yīng)用程序與系統(tǒng)的其余部分隔離。盡管可能有其他容器在同一系統(tǒng)上運(yùn)行,但您為應(yīng)用程序創(chuàng)建了一種錯(cuò)覺(jué),認(rèn)為它正在獲得自己的操作系統(tǒng)實(shí)例。Docker 使我們能夠在單個(gè)操作系統(tǒng)上運(yùn)行、創(chuàng)建和管理容器。
Kubernetes 將其增加到 11。如果您在一堆主機(jī)(不同的操作系統(tǒng))上安裝了 Docker,則可以利用 Kubernetes。這些節(jié)點(diǎn)或 Docker 主機(jī)可以是裸機(jī)服務(wù)器或虛擬機(jī)。然后,Kubernetes 可以讓您從單個(gè)命令行或儀表板跨所有這些節(jié)點(diǎn)自動(dòng)執(zhí)行容器配置、網(wǎng)絡(luò)、負(fù)載平衡、安全性和擴(kuò)展。由單個(gè) Kubernetes 實(shí)例管理的節(jié)點(diǎn)集合稱為 Kubernetes 集群。
現(xiàn)在,為什么首先需要有多個(gè)節(jié)點(diǎn)?其背后的兩個(gè)主要?jiǎng)訖C(jī)是:
1. 使基礎(chǔ)設(shè)施更加健壯——即使某些節(jié)點(diǎn)離線,您的應(yīng)用程序也將在線,即高可用性。
2. 使您的應(yīng)用程序更具可擴(kuò)展性——如果工作負(fù)載增加,只需生成更多容器和/或向 Kubernetes 集群添加更多節(jié)點(diǎn)。
Kubernetes 和 Docker 之間的差異
原則上,Kubernetes可以使用任何容器化技術(shù)。Kubernetes 可以集成的兩個(gè)最流行的選項(xiàng)是 rkt 和 Docker。然而,Docker贏得了最大的細(xì)分市場(chǎng),這導(dǎo)致在完善 Docker 和Kubernetes 之間的集成方面付出了很多努力,比任何其他容器化技術(shù)都多。
同樣,Docker背后的公司 Docker Inc. 也提供了自己的容器編排引擎,名為 Docker Swarm。但即使是他們也意識(shí)到 Kubernetes 已經(jīng)上升到甚至 Docker for Desktop(MacOS 和 Windows)都帶有自己的 Kubernetes 發(fā)行版。
如果有人對(duì)在基于 Docker 的產(chǎn)品中采用 Kubernetes 感到緊張,那么最后一點(diǎn)將消除所有疑慮。這兩個(gè)項(xiàng)目都全心全意地相互擁抱,并從這種共生關(guān)系中受益匪淺。
Kubernetes 和 Docker 之間的相似之處
這些項(xiàng)目不僅僅是技術(shù),它們是一個(gè)人的社區(qū),盡管存在差異,但由業(yè)內(nèi)一些最聰明的人組成。當(dāng)志同道合的人合作時(shí),他們會(huì)交換聰明的想法并相互學(xué)習(xí)最佳實(shí)踐。
這些是Kubernetes 和 Docker 共享的一些想法:
1. 他們對(duì)基于微服務(wù)的架構(gòu)的熱愛(ài)(稍后會(huì)詳細(xì)介紹)。
2. 他們對(duì)開(kāi)源社區(qū)的熱愛(ài)。兩者都是主要的開(kāi)源項(xiàng)目。
3. 它們主要是用 Go 編寫(xiě)的,因此可以將它們作為小型輕量級(jí)二進(jìn)制文件發(fā)送。
4. 他們使用人類可讀的 YAML 文件來(lái)指定應(yīng)用程序堆棧及其部署。
從理論上講,您可以在不了解另一個(gè)的情況下了解其中一個(gè)。但請(qǐng)記住,在實(shí)踐中,如果您從 Docker 在單機(jī)上運(yùn)行的簡(jiǎn)單案例開(kāi)始,然后逐漸了解 Kubernetes 如何發(fā)揮作用,您將受益更多。
什么是 Docker?
有兩種看待 Docker 的方式。第一種方法涉及將 Docker 容器視為真正的輕量級(jí)虛擬機(jī)。第二種方法是將 Docker 視為軟件打包和交付平臺(tái)。后一種方法被證明對(duì)人類開(kāi)發(fā)人員更有幫助,并導(dǎo)致該技術(shù)得到廣泛采用
Docker 容器概述:
傳統(tǒng)上,云服務(wù)提供商使用虛擬機(jī)將正在運(yùn)行的應(yīng)用程序相互隔離。管理程序或主機(jī)操作系統(tǒng)為許多客戶操作系統(tǒng)提供虛擬 CPU、內(nèi)存和其他資源。每個(gè)來(lái)賓操作系統(tǒng)都像在實(shí)際物理硬件上運(yùn)行一樣工作,理想情況下,它不知道在同一物理服務(wù)器上運(yùn)行的其他來(lái)賓操作系統(tǒng)。VMware 是最早普及這一概念的公司之一。
但是,這種虛擬化存在幾個(gè)問(wèn)題。首先,資源的供應(yīng)需要時(shí)間。每個(gè)虛擬磁盤(pán)映像都很大很笨重,準(zhǔn)備使用 VM 可能需要長(zhǎng)達(dá)一分鐘的時(shí)間! 其次,也是一個(gè)更重要的問(wèn)題,是系統(tǒng)資源的低效利用。操作系統(tǒng)內(nèi)核是控制狂,想要管理他們認(rèn)為可用的一切。
因此,當(dāng)客戶操作系統(tǒng)認(rèn)為它有 2GB 內(nèi)存可用時(shí),它會(huì)控制該內(nèi)存,即使在該操作系統(tǒng)上運(yùn)行的應(yīng)用程序只使用其中的一半。 另一方面,當(dāng)我們運(yùn)行容器化應(yīng)用程序時(shí),我們虛擬化操作系統(tǒng)(您的標(biāo)準(zhǔn)庫(kù)、包等)本身,而不是硬件。
現(xiàn)在,您不再為 VM 提供虛擬硬件,而是為應(yīng)用程序提供虛擬操作系統(tǒng)。如果需要,您可以運(yùn)行多個(gè)應(yīng)用程序并對(duì)其資源利用率施加限制,并且每個(gè)應(yīng)用程序都將在運(yùn)行時(shí)忽略與其一起運(yùn)行的數(shù)百個(gè)其他容器。
Docker——作為開(kāi)發(fā)者的工具:
開(kāi)發(fā)人員面臨的問(wèn)題之一是運(yùn)行應(yīng)用程序的生產(chǎn)服務(wù)器與開(kāi)發(fā)應(yīng)用程序的他們自己的開(kāi)發(fā)機(jī)器(通常是筆記本電腦和工作站)之間的差異。假設(shè)您在桌面上運(yùn)行 Windows 10,但您想為 Ubuntu 18.04 編寫(xiě)應(yīng)用程序。也許您正在使用 Python v3.6 來(lái)編寫(xiě)您的應(yīng)用程序,而 Ubuntu 服務(wù)器仍在運(yùn)行 3.4。
有太多的變量需要考慮,所以我們使用 Docker 來(lái)抽象出這種復(fù)雜性。Docker 可以安裝在任何操作系統(tǒng)上,甚至 Windows 和 Mac OS X 都得到很好的支持。因此,您可以將代碼打包到 Docker 映像中,使用 Docker 在本地運(yùn)行和測(cè)試它,以確保從該 Docker 映像創(chuàng)建的容器在生產(chǎn)中的行為方式相同。
注意:所有依賴項(xiàng),如編程語(yǔ)言版本、標(biāo)準(zhǔn)庫(kù)等,都包含在該映像中。
這種將Docker 鏡像視為軟件包的方式導(dǎo)致了以下流行語(yǔ)錄:
包管理器Apt 仍然在底層使用 tar,但用戶永遠(yuǎn)不必?fù)?dān)心它。同樣,在使用 Docker 時(shí),我們永遠(yuǎn)不必?fù)?dān)心包管理器,盡管它仍然存在。即使在 Node.js 技術(shù)之上進(jìn)行開(kāi)發(fā)時(shí),開(kāi)發(fā)人員也更喜歡在 Node 的官方 Docker 鏡像之上構(gòu)建他們的 Docker 鏡像。
所以,這是對(duì) Docker 是什么以及為什么即使他們沒(méi)有參與 DevOps 也可能想了解它的一個(gè)簡(jiǎn)要概述。現(xiàn)在讓我們繼續(xù) Kubernetes。
什么是 Kubernetes?
Kubernetes 采用了如上所述的容器化技術(shù),并將其變成了 11 個(gè)。它允許我們跨多個(gè)計(jì)算節(jié)點(diǎn)(這些可以是虛擬機(jī)或裸機(jī)服務(wù)器)運(yùn)行容器。一旦 Kubernetes 控制了一組節(jié)點(diǎn),容器就可以在任何給定時(shí)間根據(jù)我們的需要啟動(dòng)或拆除。
如果您訪問(wèn)他們的官方網(wǎng)站,Kubernetes 會(huì)非常清楚地說(shuō)明其目的:
到目前為止,我們僅將Kubernetes的簡(jiǎn)要概述表示為自動(dòng)化一堆容器創(chuàng)建。應(yīng)用程序需要有存儲(chǔ)空間,并且需要管理一些 DNS 記錄。您需要確保參與的計(jì)算節(jié)點(diǎn)彼此安全連接等等。擁有一組不同的節(jié)點(diǎn)而不是單個(gè)主機(jī)會(huì)帶來(lái)一系列完全不同的問(wèn)題。
Kubernetes 架構(gòu)的簡(jiǎn)要概述將幫助我們闡明它如何設(shè)法實(shí)現(xiàn)所有這些以及更多。
Kubernetes 架構(gòu) — 簡(jiǎn)要概述:
關(guān)于 Kubernetes 集群,您需要了解兩個(gè)基本概念。第一個(gè)是節(jié)點(diǎn)。這是 Kubernetes 管理的 VM 和/或裸機(jī)服務(wù)器的通用術(shù)語(yǔ)。第二個(gè)術(shù)語(yǔ)是 pod,它是 Kubernetes 中的基本部署單元。Pod 是需要共存的相關(guān) Docker 容器的集合。例如,您的 Web 服務(wù)器可能需要與 Redis 緩存服務(wù)器一起部署,以便您可以將它們兩者封裝到一個(gè) Pod 中。Kubernetes 并排部署它們。如果這對(duì)您來(lái)說(shuō)更簡(jiǎn)單,您可以完全想象一個(gè)由單個(gè)容器組成的 pod,那就沒(méi)問(wèn)題了。
回到節(jié)點(diǎn),有兩種類型的節(jié)點(diǎn)。一個(gè)是主節(jié)點(diǎn),其中安裝了 Kubernetes 的核心,它控制著應(yīng)用程序?qū)嶋H運(yùn)行的各個(gè)工作節(jié)點(diǎn)之間的 pod 調(diào)度。主節(jié)點(diǎn)的工作是確保維持集群的期望狀態(tài)。
下面是對(duì) Kubernetes 圖表的簡(jiǎn)要總結(jié),如上所示。
在 Kubernetes Master 上,我們有:
1. kube-controller-manager:負(fù)責(zé)考慮集群的當(dāng)前狀態(tài)(例如,X 個(gè)正在運(yùn)行的 Pod)并做出決定以實(shí)現(xiàn)所需的狀態(tài)(例如,有 Y 個(gè)活動(dòng)的 Pod)。它在 kube-apiserver 上偵聽(tīng)有關(guān)集群狀態(tài)的信息
2. kube-apiserver:這個(gè) API 服務(wù)器公開(kāi)了Kubernetes 的齒輪和杠桿。它由 WebUI 儀表板和命令行實(shí)用程序(如 kubeclt)使用。這些實(shí)用程序反過(guò)來(lái)被人類操作員用來(lái)與 Kubernetes 集群交互。
3. kube-scheduler:這決定了如何根據(jù)資源的可用性、運(yùn)營(yíng)商設(shè)置的策略等在集群中調(diào)度事件和作業(yè)。它也偵聽(tīng)kube-apiserver 以獲取有關(guān)集群狀態(tài)的信息。
4. etcd:這是 Kubernetes 主節(jié)點(diǎn)的“存儲(chǔ)堆棧”。它使用鍵值對(duì),用于保存策略、定義、秘密、系統(tǒng)狀態(tài)等
我們可以有多個(gè)主節(jié)點(diǎn),這樣即使一個(gè)主節(jié)點(diǎn)發(fā)生故障,Kubernetes 也能存活下來(lái)。
在工作節(jié)點(diǎn)上,我們有:
1. kubelet:這將有關(guān)節(jié)點(diǎn)健康狀況的信息中繼回主節(jié)點(diǎn),并執(zhí)行主節(jié)點(diǎn)給它的指令
2. kube-proxy:此網(wǎng)絡(luò)代理允許您的應(yīng)用程序的各種微服務(wù)在集群內(nèi)相互通信,并且如果您愿意,還可以將您的應(yīng)用程序公開(kāi)給世界其他地方。原則上,每個(gè) Pod 都可以通過(guò)此代理與其他每個(gè) Pod 通信。
3. Docker:這是拼圖的最后一塊。每個(gè)節(jié)點(diǎn)都有一個(gè) Docker 引擎來(lái)管理容器。
當(dāng)然,還有更多 Kubernetes,我鼓勵(lì)您探索所有這些。
Docker 和 Kubernetes 的全行業(yè)采用
到目前為止,我們討論的許多概念在紙面上聽(tīng)起來(lái)不錯(cuò),但它們是否經(jīng)濟(jì)?它們真的會(huì)幫助您的業(yè)務(wù)增長(zhǎng)、減少停機(jī)時(shí)間并節(jié)省人力和計(jì)算能力方面的資源嗎?
生產(chǎn)環(huán)境中的 Docker:
在采用 Docker 時(shí),答案很簡(jiǎn)單。特別是如果你為你的軟件采用基于微服務(wù)的架構(gòu),你絕對(duì)應(yīng)該為每個(gè)微服務(wù)使用 Docker 容器。
這項(xiàng)技術(shù)相當(dāng)成熟,幾乎沒(méi)有人可以反對(duì)它。請(qǐng)記住,僅僅容器化您的代碼不會(huì)讓您的代碼變得更好。如果您真的想使用容器化平臺(tái),請(qǐng)嘗試避免單體設(shè)計(jì)并使用微服務(wù)。
生產(chǎn)中的 Kubernetes:
不能因?yàn)樵谏a(chǎn)中對(duì) Kubernetes 的咆哮而受到指責(zé),在我個(gè)人看來(lái),其背后的原因有兩個(gè)方面。
首先,大多數(shù)組織在對(duì)分布式系統(tǒng)的基本概念沒(méi)有任何了解的情況下盲目跳槽。他們嘗試建立自己的Kubernetes 集群并使用它來(lái)托管簡(jiǎn)單的網(wǎng)站或小型可擴(kuò)展應(yīng)用程序。
其次,Kubernetes 正在快速發(fā)展,其他組織正在為其添加自己的特殊調(diào)味料,例如服務(wù)網(wǎng)格、網(wǎng)絡(luò)插件等。其中大部分是開(kāi)源的,因此對(duì)運(yùn)營(yíng)商很有吸引力。但是,在生產(chǎn)中運(yùn)行它們并不是我推薦的。跟上它們需要不斷維護(hù)集群并花費(fèi)更多的人力時(shí)間。
但是,組織可以使用云托管的 Kubernetes 平臺(tái)來(lái)運(yùn)行其應(yīng)用程序。AWS、Azure、Joyent 或 GCE 等公司提供的數(shù)據(jù)中心的全球可用性實(shí)際上可以幫助您充分利用 Kubernetes的分布式特性。而且,當(dāng)然,您不必?fù)?dān)心維護(hù)集群。
這是中小型組織經(jīng)常忽略的東西。如果您想在節(jié)點(diǎn)故障中幸存下來(lái)并獲得高可擴(kuò)展性,您不應(yīng)該在單個(gè) 1-U 機(jī)架甚至單個(gè)數(shù)據(jù)中心上運(yùn)行 Kubernetes。
那么,Kubernetes 在生產(chǎn)中嗎?是的,但對(duì)于大多數(shù)人來(lái)說(shuō),我會(huì)推薦云托管解決方案。
容器和云計(jì)算的新時(shí)代
Docker 并不是作為操作系統(tǒng)級(jí)別的虛擬化軟件進(jìn)行宣傳的,而是作為一種軟件打包和交付機(jī)制進(jìn)行營(yíng)銷(xiāo)的。Docker容器引起其競(jìng)爭(zhēng)對(duì)手關(guān)注的唯一原因是這種軟件交付方法。
多虧了 Dockerfiles,自動(dòng)化構(gòu)建變得容易多了。由于 docker-compose,復(fù)雜的多容器部署現(xiàn)在已經(jīng)標(biāo)準(zhǔn)化。通過(guò)提供完整的CI/CD 解決方案,包括構(gòu)建和測(cè)試 Docker 鏡像以及管理公共或私有 Docker 注冊(cè)表,軟件工程師將容器發(fā)揮到了邏輯極限。
Kubernetes 將容器從被困在一臺(tái)計(jì)算機(jī)上解放出來(lái),使云成為這項(xiàng)技術(shù)的一個(gè)更具吸引力的地方。慢慢地,但可以肯定的是,容器化將成為每個(gè)依賴于云的服務(wù)的規(guī)范,因此,盡早而不是以后采用這項(xiàng)技術(shù)非常重要。這樣做可以最大限度地減少遷移成本和相關(guān)風(fēng)險(xiǎn)。
分布式操作系統(tǒng)案例
既然我已經(jīng)對(duì)公司在沒(méi)有完全理解的情況下采用 Kubernetes 大發(fā)雷霆,請(qǐng)?jiān)试S我說(shuō)明為什么你應(yīng)該采用 Kubernetes。云計(jì)算已經(jīng)發(fā)展成為這個(gè)競(jìng)爭(zhēng)激烈的市場(chǎng),谷歌、微軟、亞馬遜和許多其他玩家相互競(jìng)爭(zhēng)。
這大大降低了在云中部署軟件的成本。Kubernetes 的最大優(yōu)點(diǎn)是它在很大程度上是開(kāi)源的,因此您可以了解正在發(fā)生的事情,而不會(huì)被細(xì)節(jié)所困擾。
這是 Azure 宣傳其Kubernetes 服務(wù):
僅僅知道它在表面上是如何工作的,就可以讓您對(duì)在分布式系統(tǒng)中運(yùn)行的軟件進(jìn)行推理。但是您不必?fù)?dān)心實(shí)際管理底層集群!
亞馬遜、谷歌和 DigitalOcean 正在提供類似的解決方案。即使是小型企業(yè)和個(gè)人開(kāi)發(fā)人員現(xiàn)在也可以在整個(gè)地球上擴(kuò)展他們的應(yīng)用程序。稍微了解它是如何實(shí)現(xiàn)的并沒(méi)有什么壞處,所以你至少應(yīng)該對(duì) Kubernetes 和 Docker 有一定的了解。
每次你想,“Kubernetes vs. Docker?” 反對(duì)者會(huì)回應(yīng)說(shuō) Docker 很酷,但 Kubernetes 有點(diǎn)極端。但是整個(gè)計(jì)算機(jī)科學(xué)都是關(guān)于極端自動(dòng)化的,Kubernetes將容器化模型帶到了它的邏輯極端!
更細(xì)微的差異——網(wǎng)絡(luò)
許多 Kubernetes 與Docker 的爭(zhēng)論都源于基礎(chǔ)知識(shí),例如存儲(chǔ)堆棧和網(wǎng)絡(luò)的實(shí)現(xiàn)。Docker 和 Kubernetes 都喜歡以不同的方式做事。
容器需要的不僅僅是 CPU 和一些內(nèi)存才能發(fā)揮作用。在 Kubernetes 和 Docker 主機(jī)等平臺(tái)上運(yùn)行應(yīng)用程序之間存在許多細(xì)微差別。這些差異太多了,無(wú)法在此簡(jiǎn)明扼要地提及,但總是引起我注意的是事物的網(wǎng)絡(luò)方面。
Kubernetes 指定每個(gè) pod 應(yīng)該能夠在給定的命名空間中與集群中的每個(gè)其他 pod 自由通信。而 Docker 有一個(gè)創(chuàng)建虛擬網(wǎng)絡(luò)拓?fù)涞母拍睿仨氈付M萜鬟B接到哪些網(wǎng)絡(luò)。像這樣的區(qū)別確實(shí)會(huì)讓嘗試試水的人望而卻步,但是當(dāng)您考慮 Kubernetes 與 Docker 的根本區(qū)別時(shí),它們至關(guān)重要:
對(duì)于這種困境,確實(shí)別無(wú)選擇,您只需要在學(xué)習(xí)曲線上保持耐心即可。漸漸地,更大的畫(huà)面對(duì)你的眼睛來(lái)說(shuō)會(huì)變得更清晰。
Docker 與 Kubernetes 的采用心態(tài)
使用 Docker,好處是相當(dāng)明顯的。如果您在 Docker 容器上發(fā)布您的應(yīng)用程序,那么它也可以在任何 Linux 發(fā)行版上運(yùn)行。即使基于 Illumos 的操作系統(tǒng)(根本不是 Linux)也支持 Docker,并且可以運(yùn)行 Docker 容器。
您的應(yīng)用程序?qū)嶋H上可以分解為多個(gè)微服務(wù),這樣每個(gè)微服務(wù)都可以打包為一個(gè) Docker 容器。通過(guò)定義明確的 API,可以輕松地向現(xiàn)有功能添加新功能。例如,如果您需要分析,只需啟動(dòng)一個(gè)可以與數(shù)據(jù)庫(kù)通信的 Hadoop 容器。
同樣,當(dāng)談到 Kubernetes 時(shí),用戶和云服務(wù)提供商實(shí)際上都可以通過(guò)采用它而大大受益。由于它基于容器化,與傳統(tǒng)虛擬機(jī)不同,云服務(wù)提供商可以有效地利用其資源獲得高密度的容器。這使他們能夠顯著降低價(jià)格。
另一方面,用戶可以在全球部署他們的應(yīng)用程序,減少延遲并改善用戶體驗(yàn)。
這種轉(zhuǎn)變的唯一例外是桌面應(yīng)用程序開(kāi)發(fā)人員。由于大多數(shù)桌面應(yīng)用程序可能會(huì)使用云進(jìn)行更新和/或備份,但它們主要設(shè)計(jì)為在單臺(tái)機(jī)器上運(yùn)行。
結(jié)論
容器是驚人的!它們使我們能夠以全新的數(shù)字化方式思考服務(wù)和系統(tǒng)。Docker 和 Kubernetes 都將繼續(xù)存在。他們不斷地改變以在未來(lái)將自己轉(zhuǎn)變?yōu)楦玫臇|西。讓您的公司參與到技術(shù)時(shí)代并實(shí)施您的基礎(chǔ)設(shè)施最需要的容器。
為以容器為中心的平臺(tái)設(shè)計(jì)更新的軟件不僅會(huì)使您的應(yīng)用程序更具可擴(kuò)展性,而且更能適應(yīng)未來(lái)的發(fā)展。堅(jiān)持使用舊的 VM 可能暫時(shí)有效,但幾年后,您最終將不得不承擔(dān)將所有內(nèi)容遷移到容器中的沉重成本,或者完全放棄您的項(xiàng)目。希望現(xiàn)在如果有人提出“Kubernetes vs Docker”的話題,你不會(huì)被行話沖昏頭腦。
原文鏈接:https://dzone.com/articles/kubernetes-vs-docker