中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解去docker與k8s

發布時間:2021-09-14 14:09:56 來源:億速云 閱讀:153 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關如何理解去docker與k8s,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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

Why Docker

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

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

  • 它被宿主機操作系統隔離了,它看不到宿主機上的其他進程,以為自己就是pid為1的進程

  • 它被宿主機操作系統限制了硬件資源,它能使用的cpu、內存等硬件資源只是宿主機的一部分

  • 在被宿主機操作系統限制了存儲空間,讓這個進程認為宿主機的某個目錄就是系統根目錄

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

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

如何理解去docker與k8s

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

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

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

如何理解去docker與k8s如何理解去docker與k8s

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

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

    K8S對容器又做了一層抽象,也就是POD。

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

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

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

    總結:

    • Why Dokcer:用容器技術跑應用,相比原來的物理機及虛擬機更高效、輕量、省資源,同時大大方便了不同環境下的應用部署及分發。

    • Why Kubernetes:生產集群光跑容器還不夠,還要對容器應用作為一個業務系統集群進行編排及管理,而K8S的一些優勢使得它成為目前容器集群編排管理工具的事實標準。
      最后的最后再多提一點,實際上,容器技術不止Docker公司一家在做,Kubernetes也不是只能管理Docker容器。只是,無論從市場份額、應用性還是開發社區的熱度來說,它們都是目前容器技術最主流的解決方案,就生產環境來說,目前基本沒有必要去考慮其他的容器技術了。

    看完上述內容,你們對如何理解去docker與k8s有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    林周县| 化州市| 陇南市| 明溪县| 阿拉善盟| 南皮县| 元江| 齐河县| 土默特右旗| 南川市| 桐乡市| 察雅县| 利辛县| 桂林市| 巴马| 慈溪市| 微山县| 永寿县| 保亭| 保定市| 左云县| 洮南市| 安宁市| 白朗县| 象州县| 蓝山县| 余庆县| 广元市| 大埔县| 怀宁县| 迭部县| 广饶县| 桃园市| 眉山市| 营口市| 湾仔区| 济阳县| 家居| 保靖县| 托克逊县| 长垣县|