Docker與K8S

2010年,幾個搞IT的年輕人,在美國舊金山成立了一家名叫 dotCloud 的公司。架構

這家公司主要提供基於PaaS的雲計算技術服務。具體來講,是和LXC有關的容器技術。工具

LXC,就是Linux容器虛擬技術(Linux container)。ui

後來,dotCloud 公司將本身的容器技術進行了簡化和標準化,並命名爲 Docker。雲計算

Docker 技術誕生以後,並無引發行業的關注。而 dotCloud 公司,做爲一家小型創業公司,在激烈的競爭之下寸步難行。操作系統

正當他們快要堅持不下去的時候,腦子裏蹦出了開源的想法。開放源代碼

什麼是開源?就是開放源代碼。將原來內部保密的程序源代碼開放給全部人,而後讓你們一塊兒參與進來,貢獻代碼和意見。線程

有的軟件是一開始就開源的。也有的軟件,是混不下去,創造者又不想放棄,因此選擇開源。3d

不開則已,一開驚人。愈來愈多的IT工程師發現了 Docker 的優勢,而後蜂擁而至,加入 Docker 開源社區。代理

此時的 Docker,已經成爲行業里人氣最火爆的開源技術,沒有之一。甚至像 Google、微軟、Amazon、VMware 這樣的巨頭,都對它青睞有加,表示將全力支持。日誌

Docker 火了以後,dotCloud 公司乾脆把公司名字也改爲了 Docker Inc.。

Docker 和容器技術爲何會這麼火爆?說白了,就是由於它"輕"。

在容器技術以前,業界的網紅是虛擬機。虛擬機技術的表明,是 VMWare 和 OpenStack。

相信不少人都用過虛擬機。虛擬機,就是在你的操做系統裏面,裝一個軟件,而後經過這個軟件,再模擬一臺甚至多臺子電腦出來。

在子電腦裏,你能夠和正常電腦同樣運行程序,例如開QQ。若是你願意,你能夠變出好幾個子電腦,裏面都開上QQ。子電腦和子電腦之間,是相互隔離的,互不影響。

虛擬機屬於虛擬化技術。而 Docker 這樣的容器技術,也是虛擬化技術,屬於輕量級的虛擬化。

虛擬機雖然能夠隔離出不少子電腦,但佔用空間更大,啓動慢,虛擬機軟件可能還要花錢(例如VMWare)。

而容器技術剛好沒有這些缺點。它不須要虛擬出整個操做系統,只須要虛擬一個小規模的環境(相似沙箱)。

它啓動時間很快,幾秒鐘就能完成。並且,它對資源的利用率很高(一臺主機能夠同時運行幾千個Docker容器)。此外,它佔的空間很小,虛擬機通常要幾GB到幾十GB的空間,而容器只須要MB級甚至KB級。

正由於如此,容器技術受到了熱烈的歡迎和追捧,發展迅速。

咱們具體來看看 Docker。

你們須要注意,Docker 自己並非容器,它是建立容器的工具,是應用容器引擎。

想要搞懂 Docker,其實看它的兩句口號就行。

第一句,是"Build, Ship and Run"(搭建、發送、運行)。

舉個例子:

我來到一片空地,想建個房子,因而我搬石頭、砍木頭、畫圖紙,一頓操做,終於把這個房子蓋好了。

結果,我住了一段時間,想搬到另外一片空地去。這時候,按以往的辦法,我只能再次搬石頭、砍木頭、畫圖紙、蓋房子。

可是,跑來一個老巫婆,教會我一種魔法。

這種魔法,能夠把我蓋好的房子複製一份,作成"鏡像",放在個人揹包裏。

等我到了另外一片空地,就用這個"鏡像",複製一套房子,擺在那邊,拎包入住。

因此,Docker 的第二句口號就是"Build once,Run anywhere"(搭建一次,處處能用)。

Docker 技術的三大核心概念,分別是:

  • 鏡像(Image)

  • 容器(Container)

  • 倉庫(Repository)

剛纔例子裏面,那個放在包裏的"鏡像",就是 Docker 鏡像。而揹包,就是 Docker 倉庫。在空地上,用魔法造好的房子,就是一個 Docker 容器。

說白了,這個 Docker 鏡像,是一個特殊的文件系統。它除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(例如環境變量)。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。

也就是說,每次變出房子,房子是同樣的,但生活用品之類的,都是無論的。誰住誰負責添置。

每個鏡像能夠變出一種房子。那麼,我能夠有多個鏡像呀!

也就是說,我蓋了一個歐式別墅,生成了鏡像。另外一個哥們可能蓋了一箇中國四合院,也生成了鏡像。還有哥們,蓋了一個非洲茅草屋,也生成了鏡像。

這麼一來,咱們能夠交換鏡像,你用個人,我用你的,豈不是很爽?

因而乎,就變成了一個大的公共倉庫。

負責對 Docker 鏡像進行管理的,是 Docker Registry 服務。

不是任何人建的任何鏡像都是合法的。萬一有人蓋了一個有問題的房子呢?

因此,Docker Registry 服務對鏡像的管理是很是嚴格的。

最常使用的 Registry 公開服務,是官方的 Docker Hub,這也是默認的 Registry,並擁有大量的高質量的官方鏡像。

好了,說完了 Docker,咱們再把目光轉向 K8S。

就在 Docker 容器技術被炒得熱火朝天之時,你們發現,若是想要將 Docker 應用於具體的業務實現,是存在困難的。編排、管理和調度等各個方面,都不容易。因而,人們迫切須要一套管理系統,對 Docker 及容器進行更高級更靈活的管理。

就在這個時候,K8S 出現了。

K8S,就是基於容器的集羣管理平臺,它的全稱,是 kubernetes。

Kubernetes 這個單詞來自於希臘語,含義是舵手或領航員。K8S 是它的縮寫,用8字替代了 ubernete 這8個字符。

和 Docker 不一樣,K8S 的創造者,是衆人皆知的行業巨頭 Google。

然而,K8S 並非一件全新的發明。它的前身,是 Google 本身搗鼓了十多年的 Borg 系統。

K8S 是2014年6月由 Google 公司正式公佈出來並宣佈開源的。

K8S 的架構,略微有一點複雜,咱們簡單來看一下。

一個 K8S 系統,一般稱爲一個 K8S 集羣(Cluster)。

這個集羣主要包括兩個部分:

  • 一個 Master 節點(主節點)

  • 一羣 Node 節點(計算節點)

一看就明白:Master 節點主要仍是負責管理和控制。Node 節點是工做負載節點,裏面是具體的容器。

首先是 Master 節點。

Master 節點包括 API Server、Scheduler、Controller manager、etcd。

API Server 是整個系統的對外接口,供客戶端和其它組件調用。

Scheduler 負責對集羣內部的資源進行調度,爲 Pod 選擇一個 Node。

Controller manager 運行管理控制器,它們是集羣中處理常規任務的後臺線程。

etcd 是 Kubernetes 提供默認的存儲系統,保存全部集羣數據。

而後是 Node 節點。

Node 節點包括 Docker、kubelet、kube-proxy、Fluentd,還有就是 Pod。

Pod是Kubernetes最基本的操做單元。一個Pod表明着集羣中運行的一個進程,它內部封裝了一個或多個緊密相關的容器。除了Pod以外,K8S還有一個Service的概念,一個Service能夠看做一組提供相同服務的Pod的對外訪問接口。

Docker,運行容器。

Kubelet,主要負責監視指派到它所在 Node上的 Pod,包括建立、修改、監控、刪除等。

Kube-proxy,主要負責爲 Pod 對象提供代理。

Fluentd,主要負責日誌收集、存儲與查詢。

相關文章
相關標籤/搜索