新聞中心
Kubernetes 與 docker:差異解釋
作者:科技狠活與軟件技術(shù) 2022-12-30 11:12:36
云計(jì)算
云原生 了解 Docker 和 Kubernetes 容器解決方案,并發(fā)現(xiàn) Kubernetes 和 Docker 之間的差異,以選擇最適合您需求的解決方案。

了解 Docker 和 Kubernetes 容器解決方案,并發(fā)現(xiàn) Kubernetes 和 Docker 之間的差異,以選擇最適合您需求的解決方案。
Kubernetes 與 Docker:差異解釋
容器化已經(jīng)存在了幾十年,但近年來在應(yīng)用程序開發(fā)和現(xiàn)代化方面越來越多地被采用。本文涵蓋兩種容器解決方案及其用途:
Docker,即容器引擎解決方案,它的容器編排解決方案Docker Compose,以及Docker Swarm,這是一個(gè)集群-容器編排解決方案。
Kubernetes 是另一種集群容器解決方案,將其與 Docker Swarm 進(jìn)行比較,以幫助您選擇最符合您要求的解決方案。
什么是容器化?
容器化是應(yīng)用程序級(jí)別的一種虛擬化形式。它旨在將應(yīng)用程序及其所有依賴項(xiàng)、運(yùn)行時(shí)、庫和配置文件打包在一個(gè)獨(dú)立的可執(zhí)行包中,稱為容器。操作系統(tǒng)(OS)不包含在容器中,這使得它與虛擬機(jī)(VM)不同,虛擬機(jī)(VM)在硬件級(jí)別虛擬化并包含操作系統(tǒng)。
雖然虛擬化背后的概念是在多個(gè)虛擬機(jī)之間共享物理資源,但容器在多個(gè)容器之間共享一個(gè)操作系統(tǒng)的內(nèi)核。與虛擬機(jī)不同,容器是輕量級(jí)的,因?yàn)樗鼈儾话僮飨到y(tǒng)。這就是容器需要幾秒鐘才能啟動(dòng)的原因。此外,容器可以輕松部署在不同的操作系統(tǒng)(Windows、Linux、macOS)和不同的環(huán)境(云、VM、物理服務(wù)器)上,而無需進(jìn)行任何更改。
2013 年,Docker Inc. 引入了 Docker,試圖標(biāo)準(zhǔn)化容器以在不同平臺(tái)上廣泛使用。一年后,谷歌推出了 Kubernetes 作為管理容器主機(jī)集群的解決方案。這兩個(gè)解決方案的定義將顯示Kubernetes 和 Docker 之間的區(qū)別。
什么是Docker ?
Docker 是一個(gè)開源平臺(tái),用于在標(biāo)準(zhǔn)容器中打包和運(yùn)行應(yīng)用程序,這些容器可以以相同的行為跨不同的平臺(tái)運(yùn)行。使用 Docker,容器化應(yīng)用程序與主機(jī)隔離,這提供了將應(yīng)用程序交付到運(yùn)行任何操作系統(tǒng)的任何平臺(tái)的靈活性。此外,Docker 引擎管理容器并允許它們?cè)谕恢鳈C(jī)上同時(shí)運(yùn)行。
由于客戶端-服務(wù)器架構(gòu),Docker 由客戶端和服務(wù)器端組件(Docker 客戶端和 Docker 守護(hù)進(jìn)程)組成??蛻舳撕褪刈o(hù)進(jìn)程 (Dockerd) 可以在同一系統(tǒng)上運(yùn)行,或者您可以將客戶端連接到遠(yuǎn)程守護(hù)進(jìn)程。除了管理其他 Docker 對(duì)象(容器、網(wǎng)絡(luò)、卷、圖像等)之外,守護(hù)進(jìn)程還處理客戶端發(fā)送的 API 請(qǐng)求。
Docker Desktop 是 Docker 客戶端和守護(hù)進(jìn)程的安裝程序,包括其他組件,如 Docker Compose、Docker CLI(命令行界面)等。它可以安裝在不同的平臺(tái)上:Windows、Linux 和 macOS。
開發(fā)人員可以將應(yīng)用程序設(shè)計(jì)為在同一主機(jī)上的多個(gè)容器上運(yùn)行,這就產(chǎn)生了同時(shí)管理多個(gè)容器的需要。為此,Docker Inc. 推出了 Docker Compose。Docker vs Docker Compose 可以概括為:Docker 可以管理一個(gè)容器,而 Compose 可以管理一臺(tái)主機(jī)上的多個(gè)容器。
Docker compose
在同一主機(jī)上管理多容器化應(yīng)用程序是一項(xiàng)復(fù)雜且耗時(shí)的任務(wù)。Docker Compose 是用于單個(gè)主機(jī)的編排工具,它使用 Compose 文件格式管理在一個(gè)主機(jī)上定義的多容器化應(yīng)用程序。
Docker Compose 通過創(chuàng)建一個(gè)定義所有容器的 YAML 配置文件,允許同時(shí)運(yùn)行多個(gè)容器。Compose 允許您將應(yīng)用程序拆分到多個(gè)容器中,而不是將其構(gòu)建在一個(gè)容器中。您可以將應(yīng)用程序拆分為稱為微服務(wù)的子服務(wù),并在容器中運(yùn)行每個(gè)微服務(wù)。然后,您可以通過 Compose 運(yùn)行一條命令來啟動(dòng)所有容器。
Docker swarm
開發(fā)人員可以將應(yīng)用程序設(shè)計(jì)為在不同主機(jī)上的多個(gè)容器上運(yùn)行,這就需要為跨不同主機(jī)的容器集群提供編排解決方案。為此,Docker Inc. 推出了 Docker Swarm。
Docker Swarm 或 Swarm 模式下的 Docker 是一個(gè) Docker 引擎集群,可以在安裝 Docker 后啟用。Swarm 允許在不同主機(jī)上管理多個(gè)容器,不像 Compose 只允許在同一主機(jī)上管理多個(gè)容器。
什么是 Kubernetes?
Kubernetes (K8s) 是一種編排工具,用于管理一個(gè)或多個(gè)主機(jī)上的容器。K8s 將主機(jī)集群,無論它們是在本地、云端還是在混合環(huán)境中,并且可以與 Docker 和其他容器平臺(tái)集成。谷歌最初開發(fā)并引入了 Kubernetes 來自動(dòng)化容器的部署和管理。K8s 提供了多種功能來支持彈性,例如容器容錯(cuò)、跨主機(jī)負(fù)載平衡以及自動(dòng)創(chuàng)建和刪除容器。
Kubernetes 管理一個(gè)由一臺(tái)或多臺(tái)主機(jī)組成的集群,這些主機(jī)要么是主節(jié)點(diǎn),要么是工作節(jié)點(diǎn)。主節(jié)點(diǎn)包含 Kubernetes 的控制面板組件,而工作節(jié)點(diǎn)包含非控制面板組件(Kubelet 和 Kube-proxy)。建議至少擁有一個(gè)由四臺(tái)主機(jī)組成的集群:至少一個(gè)主節(jié)點(diǎn)和三個(gè)工作節(jié)點(diǎn)來運(yùn)行您的測(cè)試。
控制面板組件(主節(jié)點(diǎn))
主節(jié)點(diǎn)可以跨越多個(gè)節(jié)點(diǎn),但只能在一臺(tái)計(jì)算機(jī)上運(yùn)行。建議您避免在主節(jié)點(diǎn)上創(chuàng)建應(yīng)用程序容器。master 負(fù)責(zé)管理集群。它響應(yīng)集群事件,做出集群決策,使用容器調(diào)度操作,啟動(dòng)一個(gè)新的 Pod(同一主機(jī)上的一組容器,是 Kubernetes 中的最小單元),運(yùn)行控制循環(huán)等。
Apiserver 是控制面板前端,它向其他 Kubernetes 組件公開 API。它處理其他組件的訪問和身份驗(yàn)證。
Etcd 是一個(gè)存儲(chǔ)所有集群鍵/值數(shù)據(jù)的數(shù)據(jù)庫。每個(gè)主節(jié)點(diǎn)都應(yīng)該有一份 etcd 以確保高可用性。
Kube scheduler 負(fù)責(zé)為新創(chuàng)建的 Pod 分配一個(gè)節(jié)點(diǎn)。
Kube 控制管理器是一組控制器進(jìn)程,它們?cè)趩蝹€(gè)進(jìn)程中運(yùn)行以降低復(fù)雜性。控制器進(jìn)程是一個(gè)控制循環(huán),它通過 apiserver 監(jiān)視集群的共享狀態(tài)。當(dāng)集群的狀態(tài)發(fā)生變化時(shí),它會(huì)采取措施將其更改回所需的狀態(tài)??刂乒芾砥鞅O(jiān)控節(jié)點(diǎn)、作業(yè)、服務(wù)帳戶、令牌等的狀態(tài)。
云控制器管理器是一個(gè)可選組件,它允許集群與云提供商的 API 進(jìn)行通信。它將與云交互的組件與與內(nèi)部集群交互的組件分開。
節(jié)點(diǎn)組件(工作節(jié)點(diǎn))
工作節(jié)點(diǎn)是非主節(jié)點(diǎn)。有兩個(gè)節(jié)點(diǎn)組件:kubelet 和 kube-proxy。除了像 Docker 這樣的容器運(yùn)行時(shí)軟件之外,它們還應(yīng)該在每個(gè)工作節(jié)點(diǎn)上運(yùn)行。
Kubelet 是運(yùn)行在工作節(jié)點(diǎn)上的代理,以確保每個(gè)容器都運(yùn)行在一個(gè) Pod 中。它管理由 Kubernetes 創(chuàng)建的容器,以確保它們?cè)诮】禒顟B(tài)下運(yùn)行。
Kube-proxy 是運(yùn)行在每個(gè)工作節(jié)點(diǎn)上的網(wǎng)絡(luò)代理,是 Kubernetes 網(wǎng)絡(luò)服務(wù)的一部分。它允許 Pod 與集群或外部網(wǎng)絡(luò)之間的通信。
其他組件
服務(wù)是在給定時(shí)間一起工作的一組邏輯 Pod。與 Pod 不同,服務(wù)的 IP 地址是固定的。這修復(fù)了刪除 Pod 時(shí)產(chǎn)生的問題,以便其他 Pod 或?qū)ο罂梢愿臑榕c該服務(wù)通信。一個(gè)服務(wù)的一組 Pod 是通過為服務(wù)分配一個(gè)策略來根據(jù)標(biāo)簽過濾 Pod 來選擇的。
標(biāo)簽是一對(duì)鍵/值屬性,可以分配給 Pod、服務(wù)或其他對(duì)象。標(biāo)簽允許根據(jù)公共屬性查詢對(duì)象并將任務(wù)分配給選擇。每個(gè)對(duì)象可以有一個(gè)或多個(gè)標(biāo)簽。一個(gè)鍵只能在一個(gè)對(duì)象中定義一次。
Kubernetes 與 Docker Swarm:哪個(gè)更好?
Kubernetes 和 Docker 是不同范圍的解決方案,可以相互補(bǔ)充以形成強(qiáng)大的組合。因此,Docker 與 Kubernetes 并不是一個(gè)正確的比較。Docker 允許開發(fā)人員將應(yīng)用程序打包在隔離的容器中。開發(fā)人員可以將這些容器部署到其他機(jī)器上,而不必?fù)?dān)心與操作系統(tǒng)的兼容性問題。
開發(fā)者可以使用 Docker Compose 來管理一臺(tái)主機(jī)上的容器。但是 Docker Compose 與 Kubernetes 也不是一個(gè)準(zhǔn)確的比較,因?yàn)榻鉀Q方案適用于不同的范圍。Compose 的范圍僅限于一臺(tái)主機(jī),而 Kubernetes 的范圍是針對(duì)一組主機(jī)。
當(dāng)容器和主機(jī)數(shù)量變多時(shí),開發(fā)者可以使用 Docker Swarm 或 Kubernetes 編排 Docker 容器,并在集群中進(jìn)行管理。Kubernetes 和 Docker Swarm 都是集群設(shè)置中的容器編排解決方案。
Kubernetes 在大型環(huán)境中比 Swarm 使用更廣泛,因?yàn)樗峁└呖捎眯浴⒇?fù)載平衡、調(diào)度和監(jiān)控,以提供永遠(yuǎn)在線、可靠和健壯的解決方案。
以下幾點(diǎn)將突出顯示使 K8s 成為值得考慮的更健壯解決方案的差異。
安裝
Swarm 已經(jīng)包含在 Docker 引擎中。使用某些 Docker CLI(命令行界面)標(biāo)準(zhǔn)命令,可以輕松啟用 Swarm。
不過,Kubernetes 部署更為復(fù)雜,因?yàn)槟枰獙W(xué)習(xí)新的非標(biāo)準(zhǔn)命令才能安裝和使用它。此外,您還需要學(xué)習(xí)使用 Kubernetes 中使用的特定部署工具。集群節(jié)點(diǎn)應(yīng)該在 Kubernetes 中手動(dòng)配置,比如定義 master、controller、scheduler 等。
注意:Kubernetes 安裝的復(fù)雜性可以通過使用 Kubernetes 即服務(wù) (KaaS) 來克服。各大云平臺(tái)都提供Kaas;其中包括谷歌云平臺(tái) (GCP) 的一部分谷歌 Kubernetes 引擎 (GKE) 和亞馬遜彈性 Kubernetes 服務(wù) (EKS)。
可擴(kuò)展性
兩種解決方案都支持可擴(kuò)展性。但是,使用 Swarm 更容易實(shí)現(xiàn)可擴(kuò)展性,而使用 Kubernetes 則更靈活。
Swarm 使用簡(jiǎn)單的 Docker API 以更簡(jiǎn)單、更快速的方式按需擴(kuò)展容器和服務(wù)。
另一方面,Kubernetes 支持自動(dòng)縮放,這使得可伸縮性更加靈活。但由于它使用統(tǒng)一的 API,可擴(kuò)展性更加復(fù)雜。
負(fù)載均衡
Swarm 具有內(nèi)置的負(fù)載平衡功能,并使用內(nèi)部網(wǎng)絡(luò)自動(dòng)執(zhí)行。對(duì)集群的所有請(qǐng)求都在主機(jī)之間進(jìn)行負(fù)載平衡。Swarm 使用 DNS 來負(fù)載平衡對(duì)服務(wù)名稱的請(qǐng)求。無需在 Swarm 中手動(dòng)配置此功能。
應(yīng)手動(dòng)配置 Kubernetes 以支持負(fù)載平衡。您應(yīng)該在 Pod 中定義負(fù)載均衡策略。因此 Pod 應(yīng)該被定義為服務(wù)。Kubernetes 使用 Ingress 進(jìn)行負(fù)載均衡,這是一個(gè)允許從外部網(wǎng)絡(luò)訪問 Kubernetes 服務(wù)的對(duì)象。
高可用性
這兩種解決方案本身都支持高可用性功能。
swarm 管理器監(jiān)視集群的狀態(tài)并采取措施修復(fù)實(shí)際狀態(tài)中的任何更改以滿足所需狀態(tài)。每當(dāng)工作節(jié)點(diǎn)崩潰時(shí),群管理器就會(huì)在另一個(gè)正在運(yùn)行的節(jié)點(diǎn)上重新創(chuàng)建容器。
Kubernetes 還會(huì)自動(dòng)檢測(cè)故障節(jié)點(diǎn)并無縫故障轉(zhuǎn)移到新節(jié)點(diǎn)。
監(jiān)控
Swarm 沒有內(nèi)置的監(jiān)控和日志記錄工具。為此,它需要第三方工具,例如 Reimann 或 Elasticsearch,以及 Kibana (ELK)。
Kubernetes 內(nèi)置了 ELK 監(jiān)控工具,可以原生監(jiān)控集群狀態(tài)。此外,還支持一些監(jiān)控工具來監(jiān)控其他對(duì)象,如節(jié)點(diǎn)、容器、Pod 等。
結(jié)論
Docker 是一個(gè)容器化平臺(tái),用于在容器中獨(dú)立于操作系統(tǒng)構(gòu)建和部署應(yīng)用程序。它可以在 Windows、Linux 或 macOS 上使用 Docker Desktop 安裝,并包括其他解決方案,如 Compose 和 Swarm。當(dāng)在同一主機(jī)上創(chuàng)建多個(gè)容器時(shí),管理它們會(huì)變得更加復(fù)雜。在這種情況下,可以使用 Docker Compose 輕松管理同一主機(jī)上一個(gè)應(yīng)用程序的多個(gè)容器。
在大型環(huán)境中,多個(gè)節(jié)點(diǎn)的集群成為確保高可用性和其他高級(jí)功能的需要。這就需要像 Docker Swarm 和 Kubernetes 這樣的容器編排解決方案。對(duì)比這兩個(gè)平臺(tái)的特性,可以看出兩者都支持可擴(kuò)展性、高可用性和負(fù)載均衡。但是,Swarm 更易于安裝和使用,而 Kubernetes 支持自動(dòng)擴(kuò)展和內(nèi)置監(jiān)控工具。這解釋了為什么大多數(shù)大型組織將 Kubernetes 與 Docker 用于主要分布在數(shù)百個(gè)容器中的應(yīng)用程序。
當(dāng)前標(biāo)題:Kubernetes與Docker:差異解釋
分享路徑:http://m.5511xx.com/article/dpiidpc.html


咨詢
建站咨詢
