成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Why Kubernetes ,我所理解的docker與k8s

maochunguang / 2809人閱讀

摘要:去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與。今天想先談?wù)?,我理解的容器是什么,以及為什么它們能火起來。一個容器鏡像的實質(zhì)就是程序進(jìn)程加所有運(yùn)行時環(huán)境及配置依賴的集合。這里再談?wù)勎依斫獾?。而,就是目前的容器編排的平臺的事實標(biāo)準(zhǔn)了。


去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與Kubernetes。邊惡補(bǔ)相關(guān)知識的同時,也想把學(xué)到的內(nèi)容和自己的理解整理出來。學(xué)習(xí)的途徑包括k8s官方文檔、書籍、極客時間專欄及網(wǎng)上各種博文。所涉及一些摘抄或描述,大多用自己的理解來組織語言,也就不一一注明出處了。

Kubernetes(簡稱K8S)與容器技術(shù),可以說是近幾年最火熱的技術(shù)之一。提起K8S,大家都知道是google開源的容器編排工具。今天想先談?wù)?,我理解的容器、K8S是什么,以及為什么它們能火起來。

Why Docker

既然說K8S是一個容器編排的工具,那么要搞清楚K8S是什么,首先得搞清楚,容器是什么,以及為什么要用容器技術(shù)。

形象的來說,一個linux容器,實際就是一個進(jìn)程,還是個被系統(tǒng)欺騙的進(jìn)程。為什么這么說呢?一個運(yùn)行在容器里的進(jìn)程,主要有以下特點:

它被宿主機(jī)操作系統(tǒng)隔離了,它看不到宿主機(jī)上的其他進(jìn)程,以為自己就是pid為1的進(jìn)程

它被宿主機(jī)操作系統(tǒng)限制了硬件資源,它能使用的cpu、內(nèi)存等硬件資源只是宿主機(jī)的一部分

在被宿主機(jī)操作系統(tǒng)限制了存儲空間,讓這個進(jìn)程認(rèn)為宿主機(jī)的某個目錄就是系統(tǒng)根目錄

這幾個欺騙進(jìn)程的技術(shù),就是是容器技術(shù)的三板斧,用于資源隔離的namespace,用于資源限制的cgroup,以及用于偽裝進(jìn)程根目錄的rootfs。這三種技術(shù),都是是早已存在于linux中的,只是docker公司比較創(chuàng)新的把這三種技術(shù)整合在一起,并且,提出了容器鏡像及鏡像倉庫等概念,把這個進(jìn)程及相關(guān)的依賴環(huán)境都一起打包成可分發(fā)及重復(fù)使用的鏡像文件,方便容器能在不同機(jī)器之間移植。這樣,在任何地方,只要能運(yùn)行docker,就能把容器鏡像跑成一個包含這應(yīng)用進(jìn)程及相關(guān)依賴環(huán)境的容器實例。

這里用利用K8S官方文檔的圖,簡單說下生產(chǎn)中的場景,看看容器技術(shù)能解決什么問題。

左圖是傳統(tǒng)的物理機(jī)部署應(yīng)用方式的方式,可以看到除了一個應(yīng)用的運(yùn)行,除了程序本身,離不開應(yīng)用配置、庫、等等依賴環(huán)境。通常情況下,一個應(yīng)用的上線,要經(jīng)歷開發(fā)環(huán)境、pre環(huán)境、beta環(huán)境、灰度測試、生產(chǎn)環(huán)境等等不同的基礎(chǔ)環(huán)境。開發(fā)的同學(xué)在開發(fā)環(huán)境跑通了代碼,到其他環(huán)境運(yùn)行時,由于各環(huán)境依賴、配置、安全需求不同,可能會出現(xiàn)各種問題。運(yùn)維的同學(xué)忙著在不同的環(huán)境中統(tǒng)一依賴。不同應(yīng)用各種語言,各種應(yīng)用的特殊依賴需求,也造成了CI/CD邏輯復(fù)雜,難以統(tǒng)一。

右圖是用了容器技術(shù)之后的場景。一個容器鏡像的實質(zhì)就是程序進(jìn)程加所有運(yùn)行時環(huán)境及配置、依賴的集合。只要各個環(huán)境的底層能兼容docker,就能實現(xiàn)所有環(huán)境部署的一致性。開發(fā)同學(xué)不用關(guān)心生產(chǎn)環(huán)境和開發(fā)環(huán)境的差異可能會導(dǎo)致應(yīng)用運(yùn)行問題,運(yùn)維同學(xué)部署一個應(yīng)用,只要確保容器鏡像能正常運(yùn)行就好。CI/CD的自動化也相對容易實現(xiàn)很多。從而極大增加開發(fā)效率、應(yīng)用迭代效率及節(jié)省了運(yùn)維工作量。

說到這里,不得不說下容器與傳統(tǒng)意義的虛擬機(jī)間的對比。其實二者都可以理解為虛擬化,它們最本質(zhì)的區(qū)別是,容器是操作系統(tǒng)層級的虛擬化,而虛擬機(jī)是硬件層級的虛擬化。參看下圖。

由于虛擬機(jī)多了一層Guest OS,需要宿主機(jī)額外的性能開銷進(jìn)行硬件虛擬化,同時因為是完整的操作系統(tǒng),虛擬機(jī)鏡像一般動輒大幾G,很難在各環(huán)境間快速傳播,hypervisor層相對Docker Engine也比較重。再看docker容器,實質(zhì)就是宿主機(jī)上跑的一個進(jìn)程,只不過通過docker與其他進(jìn)程隔離開來。簡單的說,敏捷和高效,是容器相比虛擬機(jī)最大的優(yōu)勢,當(dāng)然也有劣勢,由于容器只是操作系統(tǒng)級別的隔離,不同容器間隔離的不夠徹底。

Why Kubernetes

簡單說完了docker的理解,那么Kubernetes又是什么,它解決了哪些問題呢,為啥現(xiàn)在提容器技術(shù)必提k8s呢。這里再談?wù)勎依斫獾腤hy K8S。

回到實際的場景來,假如你已經(jīng)開始用docker鏡像來打包應(yīng)用,可以方便的進(jìn)行分發(fā)和部署,不用去考慮不同環(huán)境的差異。但是不是還感覺還少了點什么?

因為正常的實際業(yè)務(wù)系統(tǒng),不是應(yīng)用能部署,能運(yùn)行起來就完事了,還要考慮應(yīng)用容器的訪問、水平伸縮、監(jiān)控、安全、備份、容災(zāi)等等因素。而對于一個完整的業(yè)務(wù)系統(tǒng)來說,也不是單個應(yīng)用就能搞定的,還要考慮的是各應(yīng)用間的關(guān)系,及應(yīng)用運(yùn)行的形態(tài)。比如一個web業(yè)務(wù),可能需要web服務(wù)器、緩存系統(tǒng)、數(shù)據(jù)庫等多個應(yīng)用。容器化部署后,它們可能部署在不同宿主機(jī)的不同容器中,相互間的訪問要怎么實現(xiàn),這就涉及到容器間訪問關(guān)系的處理。再比如,有個優(yōu)化緩存的應(yīng)用也跑在容器里,只需要定期運(yùn)行容器實例執(zhí)行優(yōu)化任務(wù),執(zhí)行完畢就終止容器,這就需要處理不同容器應(yīng)用的運(yùn)行形態(tài)問題。類似上述這些對容器應(yīng)用及容器間關(guān)系進(jìn)行管理,就是所謂的容器編排及調(diào)度。而Kubernetes,就是目前的容器編排的平臺的事實標(biāo)準(zhǔn)了。

那么,具體來說,K8S到底能做哪些事呢。

在官方文檔中,對K8S功能的描述如下

Kubernetes 滿足了生產(chǎn)中運(yùn)行應(yīng)用程序的許多常見的需求,例如:
Pod提供了一種復(fù)合的應(yīng)用容器模型,
掛載外部存儲,
Secret管理,
應(yīng)用健康檢查,
副本應(yīng)用實例,
橫向自動擴(kuò)縮容,
服務(wù)發(fā)現(xiàn),
負(fù)載均衡,
滾動更新,
資源監(jiān)測,
日志采集和存儲,
支持自檢和調(diào)試,
認(rèn)證和鑒權(quán).

從這些功能介紹可以看出,K8S已很類似一個云平臺了,可以完全能滿足生產(chǎn)級別的容器應(yīng)用管理需求。下面是一張最簡單的K8S系統(tǒng)示意圖:

K8S集群由一個主節(jié)點(master節(jié)點)及多個工作節(jié)點(node節(jié)點)構(gòu)成,開發(fā)者提交應(yīng)用容器鏡像,并將鏡像運(yùn)行的數(shù)量、方法等通過描述文件提交給K8S master節(jié)點,K8S master節(jié)點或根據(jù)集群整體情況,將應(yīng)用按照需求部署在工作節(jié)點中。對于開發(fā)者來說,利用K8S可以方便的部署程序,不用關(guān)心基礎(chǔ)設(shè)施,而對于運(yùn)維人員來說,工作重心從維護(hù)具體應(yīng)用,轉(zhuǎn)變?yōu)榫S護(hù)K8S集群。而且,不管是開發(fā)者還是運(yùn)維人員,都不用關(guān)心應(yīng)用具體部署在哪個節(jié)點,K8S會自動判斷搞定一切。相比于傳統(tǒng)的應(yīng)用部署方式,有沒有覺得K8S很棒棒?

在容器編排這個概念出現(xiàn)的時候,Kubernetes并不是唯一的一個容器編排工具,主流的工具還有Docker公司原生的swarm和Apache基金會的mesos,為什么K8S能笑到最后,成為容器編排的事實標(biāo)準(zhǔn)呢?我理解K8S對比它們有兩個最大不同點:(這里不對swarm和mesos做詳細(xì)介紹了,實際也確實沒怎么玩過)

K8S對容器又做了一層抽象,也就是POD。
不同于與其他兩個工具,K8S管理的原子對象,其實并不是容器,而是POD。按照官方文檔的定義,一個POD,是由一個或多個共享存儲及網(wǎng)絡(luò)的容器,以及描述怎么運(yùn)行這些容器的集合,所以,POD實際是一個抽象的概念。k8s對容器的所有操作,比如動態(tài)伸縮、監(jiān)控等,實際上都是對pod的管理。那這層抽象的好處是什么呢?
上面有提到過,容器實質(zhì)就是被特殊處理的進(jìn)程。想像一個web業(yè)務(wù),web應(yīng)用進(jìn)程輸出的日志需要被大數(shù)據(jù)agent進(jìn)程處理。這個業(yè)務(wù)如果想容器化,通常有兩個做法。一是分別起來兩個容器,掛載宿主機(jī)同一個目錄來存放日志。另一種是起一個操作系統(tǒng)級別的容器或supervisord容器作為enterpoint,來管理web服務(wù)和agent進(jìn)程。前一種方式,這個兩個容器就被框在這臺宿主機(jī)上了,要實現(xiàn)業(yè)務(wù)實例橫向擴(kuò)縮容,要考慮兩個容器的運(yùn)行情況和存儲掛載,邏輯比較復(fù)雜。后一種方式,你要為每個容器再額外開一個supervisord進(jìn)程,更重要的是,由于entrypoint是supervisord進(jìn)程,web應(yīng)用和大數(shù)據(jù)agent對docker來說,都是不可見的。即使nginx出錯頻繁重啟,只要supervisord還活著,Docker就認(rèn)為這個容器是正常的。

我們再來看看,使用了pod這個概念以后,有什么變化。一個pod里面同時起了web服務(wù)進(jìn)程和大數(shù)據(jù)agent兩個容器實例,首先,pod里的容器實例是共享存儲和網(wǎng)絡(luò)namespace的,也就是說,這兩進(jìn)程的存儲數(shù)據(jù)是直接共享的,不需要額外的掛載動作。其次,這個pod是作為一個整體被k8s管理著的,k8s會監(jiān)控pod里每個容器的狀態(tài),并根據(jù)策略在有問題時進(jìn)行自動干預(yù)。從這個意義上說,pod才更類似傳統(tǒng)的虛擬機(jī)。

聲明式API
第二點也是比較重要的方面,是K8S的聲明式api(貌似swarm的新版也支持了,同樣沒玩過就不細(xì)說了)。什么是聲明式API呢,可以參考上面系統(tǒng)圖中的描述文件。比如要我需要集群中跑10個web服務(wù)容器,傳統(tǒng)的命令式API是一步步調(diào)用命令構(gòu)建出容器。而使用聲明式api,只要告訴K8S我要10個web容器,K8S就會自動將web集群實例數(shù)維持在10個,并且,在某個pod出問題退出時,K8S會自動重新拉起新pod,使集群始終保持10個pod實例在跑。這就使得管理集群變得很簡單,只要通過配置文件描述出希望的集群狀態(tài),而不用去關(guān)注中間的實現(xiàn)過程。

最后,總結(jié)一下:
Why Dokcer: 用容器技術(shù)跑應(yīng)用,相比原來的物理機(jī)及虛擬機(jī)更高效、輕量、省資源,同時大大方便了不同環(huán)境下的應(yīng)用部署及分發(fā)。
Why Kubernetes:生產(chǎn)集群光跑容器還不夠,還要對容器應(yīng)用作為一個業(yè)務(wù)系統(tǒng)集群進(jìn)行編排及管理,而K8S的一些優(yōu)勢使得它成為目前容器集群編排管理工具的事實標(biāo)準(zhǔn)。

最后的最后再多提一點,實際上,容器技術(shù)不止Docker公司一家在做,Kubernetes也不是只能管理Docker容器。只是,無論從市場份額、應(yīng)用性還是開發(fā)社區(qū)的熱度來說,它們都是目前容器技術(shù)最主流的解決方案,就生產(chǎn)環(huán)境來說,目前基本沒有必要去考慮其他的容器技術(shù)了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/32889.html

相關(guān)文章

  • Why Kubernetes ,我所理解dockerk8s

    摘要:去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與。今天想先談?wù)?,我理解的容器是什么,以及為什么它們能火起來。一個容器鏡像的實質(zhì)就是程序進(jìn)程加所有運(yùn)行時環(huán)境及配置依賴的集合。這里再談?wù)勎依斫獾?。而,就是目前的容器編排的平臺的事實標(biāo)準(zhǔn)了。 去年換工作后,開始真正在生產(chǎn)環(huán)境中接觸容器與Kubernetes。邊惡補(bǔ)相關(guān)知識的同時,也想把學(xué)到的內(nèi)容和自己的理解整理出來。學(xué)習(xí)的途徑包括k8s官方文檔...

    Taste 評論0 收藏0
  • K8S 生態(tài)周報| 2019-05-20~2019-05-26

    摘要:微軟本次提出的主要是為服務(wù)網(wǎng)格提供通用接口,以便能讓有更加通用的規(guī)范就像當(dāng)初那樣子這里我不想引起其他問題,但生態(tài)中還是存在著各種各樣的選擇,希望大家理性選擇,同時需要注意的是這個中公布的廠商中唯獨沒有的存在。 「K8S 生態(tài)周報」內(nèi)容主要包含我所接觸到的 K8S 生態(tài)相關(guān)的每周值得推薦的一些信息。歡迎訂閱知乎專欄「k8s生態(tài)」。 KubeCon EU 舉辦 2019 年第一個 Kube...

    Tangpj 評論0 收藏0
  • K8S 生態(tài)周報| 2019-05-20~2019-05-26

    摘要:微軟本次提出的主要是為服務(wù)網(wǎng)格提供通用接口,以便能讓有更加通用的規(guī)范就像當(dāng)初那樣子這里我不想引起其他問題,但生態(tài)中還是存在著各種各樣的選擇,希望大家理性選擇,同時需要注意的是這個中公布的廠商中唯獨沒有的存在。 「K8S 生態(tài)周報」內(nèi)容主要包含我所接觸到的 K8S 生態(tài)相關(guān)的每周值得推薦的一些信息。歡迎訂閱知乎專欄「k8s生態(tài)」。 KubeCon EU 舉辦 2019 年第一個 Kube...

    lauren_liuling 評論0 收藏0
  • K8S 生態(tài)周報| 2019-04-28~2019-05-05

    摘要:生態(tài)周報內(nèi)容主要包含我所接觸到的生態(tài)相關(guān)的每周值得推薦的一些信息。只讀維護(hù)在上周的推送中,有寫到用戶隱私數(shù)據(jù)泄漏。建議對于重要的鏡像或者服務(wù),盡量維護(hù)一個私有鏡像源,以免在這種宕機(jī)情況下,無法進(jìn)行正常的使用。 「K8S 生態(tài)周報」內(nèi)容主要包含我所接觸到的 K8S 生態(tài)相關(guān)的每周值得推薦的一些信息。歡迎訂閱知乎專欄「k8s生態(tài)」。 Docker Hub 只讀維護(hù) 在上周的推送中,有寫到 ...

    YorkChen 評論0 收藏0
  • K8S 生態(tài)周報| 2019-04-15~2019-04-21

    摘要:生態(tài)周報內(nèi)容主要包含我所接觸到的生態(tài)相關(guān)的每周值得推薦的一些信息。歡迎訂閱知乎專欄生態(tài)。正式發(fā)布是畢業(yè)項目,可用于監(jiān)控系統(tǒng)及服務(wù)狀態(tài)。并且可以通過配置規(guī)則來觸發(fā)報警等。 「K8S 生態(tài)周報」內(nèi)容主要包含我所接觸到的 K8S 生態(tài)相關(guān)的每周值得推薦的一些信息。歡迎訂閱知乎專欄「k8s生態(tài)」。 Prometheus v2.9.0 正式發(fā)布 Prometheus 是 CNCF 畢業(yè)項目,可用...

    fevin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<