其實(shí) Docker 和 k8s 并非直接的競(jìng)爭(zhēng)對(duì)手,它倆相互依存。Docker 是一個(gè)容器化平臺(tái),而 k8s 是 Docker 等容器平臺(tái)的協(xié)調(diào)器。
虛擬化技術(shù)已經(jīng)走過了三個(gè)時(shí)代,沒有容器化技術(shù)的演進(jìn)就不會(huì)有 Docker 技術(shù)的誕生。
(1)物理機(jī)時(shí)代:多個(gè)應(yīng)用程序可能會(huì)跑在一臺(tái)機(jī)器上。
(2)虛擬機(jī)時(shí)代:一臺(tái)物理機(jī)器安裝多個(gè)虛擬機(jī)(VM),一個(gè)虛擬機(jī)跑多個(gè)程序。
(3)容器化時(shí)代:一臺(tái)物理機(jī)安裝多個(gè)容器實(shí)例(container),一個(gè)容器跑多個(gè)程序。
開發(fā)人員編寫代碼,在自己本地環(huán)境測(cè)試完成后,將代碼部署到測(cè)試或生產(chǎn)環(huán)境中,經(jīng)常會(huì)遇到各種各樣的問題。明明本地完美運(yùn)行的代碼為什么部署后出現(xiàn)很多 bug,原因有很多:不同的操作系統(tǒng)、不同的依賴庫(kù)等,總結(jié)一句話就是因?yàn)楸镜丨h(huán)境和遠(yuǎn)程環(huán)境不一致。
容器化技術(shù)正好解決了這一關(guān)鍵問題,它將軟件程序和運(yùn)行的基礎(chǔ)環(huán)境分開。開發(fā)人員編碼完成后將程序打包到一個(gè)容器鏡像中,鏡像中詳細(xì)列出了所依賴的環(huán)境,在不同的容器中運(yùn)行標(biāo)準(zhǔn)化的鏡像,從根本上解決了環(huán)境不一致的問題。
Docker怎么用?
其實(shí)大多數(shù)人談?wù)?Docker 時(shí)說(shuō)的是 Docker Engine,這只是一個(gè)構(gòu)建和運(yùn)行的容器。
在運(yùn)行容器前需要編寫Docker File,通過 dockerFile 生成鏡像,然后才能運(yùn)行 Docker 容器。
Docker File 定義了運(yùn)行鏡像(image)所需的所有內(nèi)容,包括操作系統(tǒng)和軟件安裝位置。一般情況下都不需要從頭開始編寫 Docker File,在 Docker Hub 中有來(lái)自世界各地的工程師編寫好的鏡像,你可以基于此修改。
編排系統(tǒng)的需求催生 k8s
盡管Docker為容器化的應(yīng)用程序提供了開放標(biāo)準(zhǔn),但隨著容器越來(lái)越多出現(xiàn)了一系列新問題:
1.如何協(xié)調(diào)和調(diào)度這些容器?
2.如何在升級(jí)應(yīng)用程序時(shí)不會(huì)中斷服務(wù)?
3.如何監(jiān)視應(yīng)用程序的運(yùn)行狀況?
4.如何批量重新啟動(dòng)容器里的程序?
解決這些問題需要容器編排技術(shù),可以將眾多機(jī)器抽象,對(duì)外呈現(xiàn)出一臺(tái)超大機(jī)器。現(xiàn)在業(yè)界比較流行的有:k8s、Mesos、Docker Swarm。
在業(yè)務(wù)發(fā)展初期只有幾個(gè)微服務(wù),這時(shí)用 Docker 就足夠了,但隨著業(yè)務(wù)規(guī)模逐漸擴(kuò)大,容器越來(lái)越多,運(yùn)維人員的工作越來(lái)越復(fù)雜,這個(gè)時(shí)候就需要編排系統(tǒng)解救opers。
k8s是做什么用的?
K8s是google研發(fā)的容器協(xié)調(diào)器,已捐贈(zèng)給CNCF,現(xiàn)已開源。
Google 利用在容器管理多年的經(jīng)驗(yàn)和專業(yè)知識(shí)推出了 k8s,主要用于自動(dòng)化部署應(yīng)用程序容器,可以支持眾多容器化工具包括現(xiàn)在非常流行的Docker。
目前k8s 是容器編排市場(chǎng)的領(lǐng)導(dǎo)者,開源并公布了一系列標(biāo)準(zhǔn)化方法,主流的公有云平臺(tái)都宣布支持。
一流的廠商都在搶占標(biāo)準(zhǔn)的制高點(diǎn),一堆小廠商跟著一起玩,這就叫生態(tài)了。國(guó)內(nèi)的大廠商都在干嘛呢?搶社區(qū)團(tuán)購(gòu)市場(chǎng),玩資本游戲,哎?!
Docker與k8s 難舍難分
Docker 和 k8s 在業(yè)界非常流行,都已經(jīng)是事實(shí)上的標(biāo)準(zhǔn)。
Docker 是用于構(gòu)建、分發(fā)、運(yùn)行容器的平臺(tái)和工具。
而 k8s 實(shí)際上是一個(gè)使用 Docker 容器進(jìn)行編排的系統(tǒng),主要圍繞 pods 進(jìn)行工作。Pods 是 k8s 生態(tài)中最小的調(diào)度單位,可以包含一個(gè)或多個(gè)容器。
Docker 和 k8s 是根本上不同的技術(shù),兩者可以很好的協(xié)同工作。
開發(fā)實(shí)踐,靈魂追問
(1)沒有 k8s 可以使用 docker 嗎?
可以。實(shí)際上一些小型公司,在業(yè)務(wù)不太復(fù)雜的情況下都是直接使用 Docker。盡管 k8s 有很多好處,但是眾所周知它非常復(fù)雜,業(yè)務(wù)比較簡(jiǎn)單可以放棄使用 k8s。
(2)沒有 Docker 可以使用 k8s 嗎?
k8s 只是一個(gè)容器編排器,沒有容器拿什么編排?!
k8s 經(jīng)常與 Docker 進(jìn)行搭配使用,但是也可以使用其他容器,如RunC、Containerted 等。
(3)Docker Swarm 和 k8s 怎么選?
選 k8s。2019年底Docker Enterprise已經(jīng)出售給Mirantis,Mirantis聲明要逐步淘汰Docker Swarm,后續(xù)會(huì)將 k8s 作為默認(rèn)編排工具。
最后一個(gè)問題
Docker 不香嗎?為什么還要用 k8s
如若轉(zhuǎn)載,請(qǐng)注明出處:開源字節(jié) https://sourcebyte.cn/article/258.html