k8s和docker簡介

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

 

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

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

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

 

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

正當他們快要堅持不下去的時候,腦子裏蹦出了「開源」的想法。操作系統

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

 
Open Source,開源

有的軟件是一開始就開源的。也有的軟件,是混不下去,創造者又不想放棄,因此選擇開源。本身養不活,就吃「百家飯」嘛。3d

2013年3月,dotCloud公司的創始人之一,Docker之父,28歲的Solomon Hykes正式決定,將Docker項目開源。代理

 
Solomon Hykes(今年剛從Docker離職)

不開則已,一開驚人。日誌

愈來愈多的IT工程師發現了Docker的優勢,而後蜂擁而至,加入Docker開源社區。orm

Docker的人氣迅速攀升,速度之快,使人瞠目結舌。

開源當月,Docker 0.1 版本發佈。此後的每個月,Docker都會發佈一個版本。到2014年6月9日,Docker 1.0 版本正式發佈。

此時的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公司正式公佈出來並宣佈開源的。

同年7月,微軟、Red Hat、IBM、Docker、CoreOS、 Mesosphere和Saltstack 等公司,相繼加入K8S。

以後的一年內,VMware、HP、Intel等公司,也陸續加入。

2015年7月,Google正式加入OpenStack基金會。與此同時,Kuberentes v1.0正式發佈。

目前,kubernetes的版本已經發展到V1.13。

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

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

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

一個Master節點(主節點)

一羣Node節點(計算節點)

 

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

深刻來看這兩種節點。

首先是Master節點。

 

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

API Server是整個系統的對外接口,供客戶端和其它組件調用,至關於「營業廳」。

Scheduler負責對集羣內部的資源進行調度,至關於「調度室」。

Controller manager負責管理控制器,至關於「大總管」。

而後是Node節點。

 

Node節點包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可選),還有就是Pod。

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

Docker,不用說了,建立容器的。

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

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

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

是否是有點懵?唉,三言兩語真的很難講清楚,就這樣吧。

相關文章
相關標籤/搜索