一文了解docker與k8s

其實(shí) Docker 和 k8s 并非直接的競爭對手兩者相互依存。 Docker 是一個(gè)容器化平臺,而 k8s 是 Docker 等容器平臺的協(xié)調器。


1、容器化時(shí)代

(1)虛擬化技術(shù)已經(jīng)走過(guò)是三個(gè)時(shí)代,沒(méi)有容器化技術(shù)的研究就不會(huì )有Docker技術(shù)的誕生。

92db4a74263963299a4cfaca8bcd00fc_ec11626762a64152bba452d4d17701ae


1)物理機時(shí)代: 多個(gè)應用程序排在一臺機器上。

c5dfe5312c15371dfcb0e95ba83670f8_64326dc4c6964844becc353b1b8b423b


2)虛擬機時(shí)代:一臺物理機器安裝多個(gè)虛擬機(VM),一個(gè)虛擬機跑多個(gè)程序。

510d4ee48c84c07d804318aa9fa75af7_40c55805701241328c0186b7786983e8


3)容器化時(shí)代:一臺物理機器安裝多個(gè)容器實(shí)例(Container),一個(gè)容器跑多個(gè)程序。

9fb3c6ac08c3b76fe8c3051bcd540736_ef123f35bd664eef87ea27e4e1024eeb


(2)容器化解決了什么問(wèn)題?


用一段話(huà)描述:


測試人員:你這個(gè)功能有問(wèn)題。


開(kāi)發(fā)人員:我本地是好的呀!


開(kāi)發(fā)人員編寫(xiě)代碼,在自己本地環(huán)境測試完成后,將代碼部署到測試或生產(chǎn)環(huán)境中經(jīng)常會(huì )遇到各種各樣的問(wèn)題。明明本地完美運行的代碼為什么部署后出現很多 bug,原因有很多:不同的操作系統、不同的依賴(lài)庫等??偨Y一句話(huà):因為本地環(huán)境和遠程環(huán)境不一致。


容器化技術(shù)正好解決了這一關(guān)鍵問(wèn)題,它將軟件程序和運行的基礎環(huán)境分開(kāi)。開(kāi)發(fā)人員編碼完成后將程序打包到一個(gè)容器鏡像中,鏡像中詳細列出了所依賴(lài)的環(huán)境,在不同的容器中運行標準化的鏡像,從根本上解決了環(huán)境不一致的問(wèn)題。


注:容器的概念已經(jīng)出現不短的時(shí)間。但直到 2013 年開(kāi)源項目 Docker 的出現才極大推廣了容器這項技術(shù),并推動(dòng)了軟件開(kāi)發(fā)中容器化和微服務(wù)的趨勢,這種趨勢后來(lái)被稱(chēng)為云原生開(kāi)發(fā)。


2、容器化技術(shù)解決的核心問(wèn)題

可移植性:不依賴(lài)具體的操作系統或云平臺,比如在阿里云或騰訊云直接隨意遷移。

占地?。喝萜髦恍枰鋺贸绦蛞约八枰\行的所有容器和庫的依賴(lài)清單,不需要將所有的依賴(lài)庫都打包在一起。

共享 bin 和 lib:不同的容器可以共享 bin 和 lib,進(jìn)一步節省了空間。

 


3、docker的出現

2010 年一位年輕小伙子在美國舊金山成立了一家名叫【dotCloud】的公司, 開(kāi)發(fā)了 Docker 的核心技術(shù),從此開(kāi)啟了容器技術(shù)的時(shí)代。后面 dotCloud 公司將自己的容器技術(shù)進(jìn)行了簡(jiǎn)化和標準化,取名為 Docker,就是大家熟悉的鯨魚(yú) logo。


2013 年 dotCloud 公司宣布將 Docker 開(kāi)源,隨著(zhù)越來(lái)越多的工程師發(fā)現了它的優(yōu)點(diǎn), Docker 的人氣迅速攀升,成為當時(shí)最火爆的開(kāi)源技術(shù)之一。


當前有 30% 以上的企業(yè)在其 AWS 環(huán)境中使用 Docker,并且這個(gè)數字還在繼續增長(cháng)。


此時(shí)的 Docker,已經(jīng)成為行業(yè)里人氣最火爆的開(kāi)源技術(shù),沒(méi)有之一。甚至像 Google、微軟、Amazon、VMware 這樣的巨頭,都對它青睞有加,表示將全力支持。


Docker 火了之后,dotCloud 公司干脆把公司名字也改成了 Docker Inc. 。


Docker 和容器技術(shù)為什么會(huì )這么火爆?說(shuō)白了,就是因為它 “輕”。在容器技術(shù)之前,業(yè)界的網(wǎng)紅是虛擬機。虛擬機技術(shù)的代表,是 VMWare 和 OpenStack 。


相信很多人都用過(guò)虛擬機。虛擬機,就是在你的操作系統里面,裝一個(gè)軟件,然后通過(guò)這個(gè)軟件,再模擬一臺甚至多臺“子電腦”出來(lái)。

371e2014ac7e56eb76895ff2578a53af_da382a1532c54b80a3b4237e9193359c

在 “子電腦” 里,你可以和正常電腦一樣運行程序,例如登錄 QQ。如果你愿意,你可以變出好幾個(gè) “子電腦”,里面都登錄上 QQ?!白与娔X” 和 “子電腦” 之間,是相互隔離的,互不影響。


虛擬機屬于虛擬化技術(shù)。而 Docker 這樣的容器技術(shù),也是虛擬化技術(shù),屬于輕量級的虛擬化。


虛擬機雖然可以隔離出很多 “子電腦”,但占用空間更大,啟動(dòng)更慢,虛擬機軟件可能還要花錢(qián)(例如:VMWare)。


而容器技術(shù)恰好沒(méi)有這些缺點(diǎn)。它不需要虛擬出整個(gè)操作系統,只需要虛擬一個(gè)小規模的環(huán)境(類(lèi)似 “沙箱”)。Docker 可以輕松創(chuàng )建容器和基于容器的應用程序,最初是為 Linux 構建的,現在也可以在 Windows 和 MacOS 上運行。


它啟動(dòng)時(shí)間很快,幾秒鐘就能完成。而且,它對資源的利用率很高(一臺主機可以同時(shí)運行幾千個(gè) Docker 容器)。此外,它占的空間很小,虛擬機一般要幾 GB 到幾十 GB 的空間,而容器只需要 MB 級甚至 KB 級。


079e743aeee2347aa63e88ee603b3d3a_1043df8b2d0c4f6e99c2ec04ee669204


正因為如此,容器技術(shù)受到了熱烈的歡迎和追捧,發(fā)展迅速。大家需要注意,Docker 本身并不是容器,它是創(chuàng )建容器的工具,是應用容器引擎。想要搞懂 Docker,其實(shí)看它的兩句口號就行。


第一句,是 “Build, Ship and Run”。


第二句口號則是:“Build?once,Run?anywhere(搭建一次,到處能用)”。


c579a921e1f28fe1bea3a884fa0004d4_e535166d5b2148b0a66f79200383792a


Build(構建鏡像): 鏡像就像是集裝箱,包含文件以及運行環(huán)境等等資源;

Ship(運輸鏡像):在宿主機和倉庫間進(jìn)行運輸,這里倉庫就像是超級碼頭;

Run(運行鏡像):運行的鏡像就是一個(gè)容器,容器就是運行程序的地方。

說(shuō)白了,這個(gè) Docker 鏡像,是一個(gè)特殊的文件系統。它除了提供容器運行時(shí)所需的程序、庫、資源、配置等文件外,還包含了一些為運行時(shí)準備的一些配置參數(例如:環(huán)境變量)。鏡像不包含任何動(dòng)態(tài)數據,其內容在構建之后也不會(huì )被改變。


綜上所述,Docker 的運行過(guò)程,也就是去倉庫把鏡像拉到本地,然后用執行命令把鏡像運行起來(lái)變成容器,這也就是為什么人們常常將 Docker 稱(chēng)為碼頭工人或碼頭裝卸工。


負責對 Docker 鏡像進(jìn)行管理的,是 Docker Registry 服務(wù)(類(lèi)似倉庫管理員)。當然,不是任何人建的任何鏡像都是合法的。萬(wàn)一有人構建的鏡像存在問(wèn)題呢?所以,Docker Registry 服務(wù)對鏡像的管理是非常嚴格的。最常使用的 Registry 公開(kāi)服務(wù),是官方的 Docker Hub,這也是默認的 Registry,并擁有大量的高質(zhì)量的官方鏡像。


4、Docker如何使用

其實(shí)大多數人談?wù)?Docker 時(shí)說(shuō)的是 Docker Engine,這只是一個(gè)構建和運行的容器。


在運行容器前需要編寫(xiě) Docker File,通過(guò) dockerFile 生成鏡像,然后才能運行 Docker 容器。


Docker File 定義了運行鏡像(image)所需的所有內容,包括操作系統和軟件安裝位置。一般情況下都不需要從頭開(kāi)始編寫(xiě) Docker File,在 Docker Hub 中有來(lái)自世界各地的工程師編寫(xiě)好的鏡像,你可以基于此修改。


??此外,Docker 容器提供了一種構建企業(yè)應用程序和業(yè)務(wù)流程應用程序的方法,這些應用程序比傳統應用程序更容易安裝、維護和移動(dòng)。


?Docker 容器支持隔離:Docker 容器使應用程序不僅彼此隔離,而且與底層系統隔離。這不僅使軟件棧更干凈,而且更容易使容器化應用程序使用系統資源,例如 CPU、GPU、內存、I/O、網(wǎng)絡(luò )等,它還可以確保數據和代碼保持獨立。


?Docker 容器支持可移植性:Docker 容器在支持容器運行環(huán)境的任何機器上運行。應用程序不必綁定到主機操作系統,因此可以保持應用程序環(huán)境和底層操作環(huán)境的整潔和最小化。

例如,采用容器的 MySQL 將在大多數支持容器的 Linux 系統上運行,應用程序的所有依賴(lài)項通常都在同一個(gè)容器中提供?;谌萜鞯膽贸绦蚩梢暂p易從 on-prem 系統遷移到云環(huán)境中,或從開(kāi)發(fā)人員的筆記本電腦移到服務(wù)器上,只要目標系統支持 Docker 以及可能與之一起使用的任何第三方工具,比如 Kubernetes。


?通常,Docker 容器鏡像必須為特定的平臺構建。例如 Windows 容器不能在 Linux 上運行,反之亦然;以前,繞過(guò)此限制的一種方法是啟動(dòng)運行所需操作系統實(shí)例的虛擬機,并在虛擬機中運行容器。

然而 Docker 團隊后來(lái)設計了一個(gè)更優(yōu)雅的解決方案,稱(chēng)為 manifest,它允許多個(gè)操作系統的鏡像并行打包。盡管 manifest 還處于試驗階段,但這暗示了容器可能成為跨平臺應用程序解決方案和跨環(huán)境應用程序解決方案。


?Docker 容器支持可組合性:大多數業(yè)務(wù)應用程序由幾個(gè)獨立的組件組成,web 服務(wù)器、數據庫和 cache 緩存。Docker 容器可以將這些部件組合成一個(gè)容易更換的功能單元。每個(gè)部分由不同的容器提供,可以獨立于其他容器進(jìn)行維護、更新、交換和修改。


?? 這本質(zhì)上是應用程序設計的微服務(wù)模型。通過(guò)將應用程序功能劃分為獨立的、自包含的服務(wù),微服務(wù)模型為過(guò)程緩慢的傳統開(kāi)發(fā)和單一僵化的應用程序提供了一種解決方案,輕量級和便攜式容器使構建和維護基于微服務(wù)的應用程序變得更加容易。


5、編排系統的需求催生了k8s

盡管 Docker 為容器化的應用程序提供了開(kāi)放標準,但隨著(zhù)容器越來(lái)越多出現了一系列新問(wèn)題:


如何協(xié)調、調度和管理這些容器?

如何在升級應用程序時(shí)不中斷服務(wù)?

如何監視應用程序的運行狀況?

如何批量重新啟動(dòng)容器里的程序?

解決這些問(wèn)題需要容器編排技術(shù),可以將眾多機器抽象,對外呈現出一臺超大機器?,F在業(yè)界比較流行的有:k8s、Mesos、Docker Swarm。


在業(yè)務(wù)發(fā)展初期只有幾個(gè)微服務(wù),這時(shí)用 Docker 就足夠了,但隨著(zhù)業(yè)務(wù)規模逐漸擴大,容器越來(lái)越多,運維人員的工作越來(lái)越復雜,這個(gè)時(shí)候就需要編排系統解救 opers。

b0cb7a6b4277a0f2a1ca8ad56f3ba33c_e7cb222dd43b4e41958041539d53743d

一個(gè)成熟的容器編排系統需要具備以下能力:


處理大量的容器和用戶(hù)

負載均衡

鑒權和安全性

管理服務(wù)通信

多平臺部署

其中,K8S,就是基于容器的集群管理平臺,它的全稱(chēng),是 kubernetes。

4478a807bf4d2497de0b90a6d80b341a_ba11c850f827432fa25beb2b385365d9


和 Docker 不同,K8S 的創(chuàng )造者,是眾人皆知的行業(yè)巨頭——Google。


然而,K8S 并不是一件全新的發(fā)明。它的前身,是 Google 自己搗鼓了十多年的 Borg 系統。K8S 是 Google 研發(fā)的容器協(xié)調器,已捐贈給 CNCF,現已開(kāi)源。


Google 利用在容器管理多年的經(jīng)驗和專(zhuān)業(yè)知識推出了 k8s,主要用于自動(dòng)化部署應用程序容器,可以支持眾多容器化工具包括現在非常流行的 Docker。


目前 k8s 是容器編排市場(chǎng)的領(lǐng)導者,開(kāi)源并公布了一系列標準化方法,主流的公有云平臺都宣布支持。


一流的廠(chǎng)商都在搶占標準的制高點(diǎn),一堆小廠(chǎng)商跟著(zhù)一起玩,這就叫生態(tài)了。


6、k8s架構和組件

k8s 由眾多組件組成,組件間通過(guò) API 互相通信,歸納起來(lái)主要分為三個(gè)部分:


controller manager

nodes

pods

2cef8b797d073c9d24c9b2d0caf50d7c_8a2dd228e3654c1badd220c521f320a3


Controller Manager,即控制器管理器,用于調度程序以及節點(diǎn)狀態(tài)檢測(是k8s的大腦)。

Nodes,構成了 Kubernetes 集群的集體計算能力,實(shí)際部署容器運行的地方。

Pods,Kubernetes 集群中資源的最小單位。

下圖是 Kubernetes 集成 Jenkins 實(shí)現 CICD(一圖勝千言,需要對其有一個(gè)大致的認識):


fb4f15aa75beea958d8bbd5d8a0dd1fa_de6b6108450346f4b5fade1bf7dcf87e


而下圖則是 GitLab + Jenkins Pipeline + Doker + k8s + Helm 自動(dòng)化部署:

47bb78ebb9b732ac15b4ef7a6f8fc893_4070e44af3c142c390d84f4d0d6b989e


7、k8s與Docker Swarm江湖恩怨

Docker Swarm 與 k8s 同為容器編排技術(shù)。


b7994f48251f4d3bfb86fdde72198708_ce855c211bd44822aab9592521cd4aad


如果非要拿Docker和k8s進(jìn)行比較,其實(shí)更應該拿Docker Swarm和k8s比較。


Docker Swarm是Docker自駕針對集群化部署管理的解決方案。優(yōu)點(diǎn)很明顯,可以更緊密集成到Docker生態(tài)系統中。雖說(shuō)Swarm和Docker血緣更近,但是由于商業(yè)、生態(tài)等原因依舊沒(méi)有k8s流行。


8、Docker與k8s難舍難分

Docker和k8s在業(yè)界非常流行,已經(jīng)是事實(shí)上的標準了。


Docker是用于構建、分發(fā)、運行()容器的平臺和工具。


而k8s實(shí)際上是一個(gè)使用Docker容器進(jìn)行編排的系統,主要圍繞pods進(jìn)行工作。Pods是k8s生態(tài)中最小的調度單位,可以包含一個(gè)或多個(gè)容器。


Docker和k8s分別做不通的事情,兩者是協(xié)同關(guān)系。


9、開(kāi)發(fā)實(shí)踐

(1)不用k8s可以使用docker嗎?


可以。對于一些小型公司、業(yè)務(wù)不太復雜的情況下都是可以直接使用docker的。盡管k8s有很多好處,但是眾所周知它非常復雜,簡(jiǎn)單業(yè)務(wù)完全可以放棄使用k8s。但是當業(yè)務(wù)達到一定規模后可能還是要借助k8s才行。


(2)沒(méi)有Docker可以使用k8s嗎?


k8s展示一個(gè)容器編排器,沒(méi)有容器拿什么編排??


k8s經(jīng)常與Docker進(jìn)行搭配使用,但是也可以使用其他容器,如RunC、Containerted等。


(3)Docker Swarm和k8s怎么選?


選k8s。2019 年底 Docker Enterprise 已經(jīng)出售給 Mirantis,Mirantis 聲明要逐步淘汰 Docker Swarm,后續會(huì )將 k8s 作為默認編排工具。


10、k8s棄用docker?

k8s 1.20版本的changelog原文如下:


Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community


原文說(shuō)的是kubelet是通過(guò)一個(gè)叫做dockershim的模塊實(shí)現對docker的支持,然后以后版本會(huì )移除這個(gè)dockershim模塊。


典型的k8s runtime架構(dockershim)


關(guān)于dockershim是什么還要從k8s發(fā)布之初和docker的關(guān)系說(shuō)起。k8s在發(fā)布之初,docker在容器實(shí)現方面占據壟斷地位。為了迎合主流,kubernetes官網(wǎng)也率先使用docker作為底層容器的實(shí)現。


注: shim 顧名思義就是 “墊片”的意思。


2016年12月k8s發(fā)布CRI(Container Runtime Interface),很重要的一個(gè)考量就是為了避免后續兼容其他運行時(shí)帶來(lái)的維護工作,所以發(fā)布了統一的CRI接口。這樣凡是支持CRI的運行時(shí),皆可以直接作為k8s的底層運行時(shí)。


所以之前的架構是:

6c49a7afb476e22dc2d78e6a94a4574b_35abcd926faa40519fe935cc2efc23ea

Kubelet 通過(guò)CRI接口調用dockershim請求創(chuàng )建容器;


dockershim把創(chuàng )建容器的請求轉換成docker daemon的請求往docker創(chuàng )建一個(gè)容器;


這時(shí)候把容器創(chuàng )建請求請求到使用CRI實(shí)現的containerd;


containerd通過(guò)OCI調用containerd-shim然后進(jìn)而使用操作系統底層實(shí)現容器的創(chuàng )建 ;


看到這兒,相信大家就知道官網(wǎng)為什么要移除dockershim了?。?!


因為這個(gè)調用合著(zhù)需要經(jīng)過(guò)兩個(gè)劃水的dockershim和docker daemon。kubelet直接調用containerd就完事了。于是就有了如下新架構:

5ec148c1cae13b5ca74fbc82a59cbf57_d77e5aa01c4f408886ad472fd4142ffe


        總結來(lái)說(shuō),k8s啟用的其實(shí)是dockershim,選擇直接對接CRI接口;并且默認支持的是containerd(就是docker自帶的組件),所以完全可以和docker本身做到100%兼容。k8s去除dockershim是自身發(fā)展考慮,為的是支持更通用的CRI標準,更高抽象化意味著(zhù)更好的兼容性。


        順便說(shuō)下,即便啟用docker也不代表docker就要涼了。docker帶給我們的是更新的工作流和開(kāi)發(fā)方式,一種容器化的思維。在我們的日常開(kāi)發(fā)中,docker在臨時(shí)搭建一些環(huán)境時(shí)還是可以發(fā)揮巨大作用的。



————————————————


                            版權聲明:本文為博主原創(chuàng )文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接和本聲明。

                        

原文鏈接:https://blog.csdn.net/mijichui2153/article/details/136327686

湖北創(chuàng  )杰網(wǎng)絡(luò )科技有限公司

創(chuàng )杰專(zhuān)注

湖北創(chuàng )杰網(wǎng)絡(luò )科技有限公司是一家技術(shù)服務(wù)型互聯(lián)網(wǎng)企業(yè),為廣大企業(yè)用戶(hù)提供網(wǎng)站定制開(kāi)發(fā)、軟件定制及APP應用定制、微信應用及小程序開(kāi)發(fā)、電商平臺開(kāi)發(fā)、企業(yè)網(wǎng)絡(luò )推廣等服務(wù)。 創(chuàng )杰始終堅持以客戶(hù)為中心、以技術(shù)為基礎、以創(chuàng )新為目標、以質(zhì)量為生存、以誠信求發(fā)展,對待每一個(gè)產(chǎn)品都要求盡善盡美,不斷在技術(shù)和應用領(lǐng)域進(jìn)行創(chuàng )新和突破,并以擁有自己的核心技術(shù)和創(chuàng )新精神為自己的永遠追求,揚帆起航,乘風(fēng)破浪,開(kāi)辟新征程。

Read More

聯(lián)系方式

湖北襄陽(yáng)追日路2號襄陽(yáng)軟件園A棟403號

客服電話(huà):0710-3435750

QQ微信:7377268

2024 ? 湖北創(chuàng )杰網(wǎng)絡(luò )科技有限公司 版權所有 鄂ICP備16000833號-3 網(wǎng)絡(luò )經(jīng)濟主體信息

服務(wù)熱線(xiàn)

0710-3435750

功能和特性

價(jià)格和優(yōu)惠

獲取內部資料

創(chuàng  )杰科技客服二維碼

在線(xiàn)客服

創(chuàng  )杰科技客服二維碼

客服

欧美性爱福利视频合集_亚洲∧V久久久无码精品_久久久久88色偷偷_欧美xxxxx精品