乾貨滿滿!10分鐘看懂Docker和K8S(轉)

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

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

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

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

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

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

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

Open Source,開源操作系統

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

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

Solomon Hykes(今年剛從Docker離職)

不開則已,一開驚人。

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

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,主要負責日誌收集、存儲與查詢。

是否是有點懵?唉,三言兩語真的很難講清楚,繼續跳過吧。

Docker和K8S都介紹完了,然而文章並無結束。

接下來的部分,是寫給核心網工程師甚至全部通訊工程師看的。

從幾十年前的1G,到如今的4G,再到未來的5G,移動通訊發生了翻天覆地的變化,核心網亦是如此。

可是,若是你仔細洞察這些變化,會發現,所謂的核心網,其實本質上並無發生改變,無非就是不少的服務器而已。不一樣的核心網網元,就是不一樣的服務器,不一樣的計算節點。

變化的,是這些「服務器」的形態和接口:形態,從機櫃單板,變成機櫃刀片,從機櫃刀片,變成X86通用刀片服務器;接口,從中繼線纜,變成網線,從網線,變成光纖。

就算變來變去,仍是服務器,是計算節點,是CPU。

既然是服務器,那麼就勢必會和IT雲計算同樣,走上虛擬化的道路。畢竟,虛擬化有太多的優點,例如前文所說的低成本、高利用率、充分靈活、動態調度,等等。

前幾年,你們覺得虛擬機是核心網的終極形態。目前看來,更有多是容器化。這幾年常常說的NFV(網元功能虛擬化),也有可能改口爲NFC(網元功能容器化)。

以VoLTE爲例,若是按之前2G/3G的方式,那須要大量的專用設備,分別充當EPC和IMS的不一樣網元。

VoLTE相關的網元

而採用容器以後,極可能只須要一臺服務器,建立十幾個容器,用不一樣的容器,來分別運行不一樣網元的服務程序。

這些容器,隨時能夠建立,也能夠隨時銷燬。還可以在不停機的狀況下,隨意變大,隨意變小,隨意變強,隨意變弱,在性能和功耗之間動態平衡。

簡直完美!

5G時代,核心網採用微服務架構,也是和容器完美搭配——單體式架構(Monolithic)變成微服務架構(Microservices),至關於一個全能型變成N個專能型。每一個專能型,分配給一個隔離的容器,賦予了最大程度的靈活。

精細化分工

按照這樣的發展趨勢,在移動通訊系統中,除了天線,剩下的部分都有可能虛擬化。核心網是第一個,但不是最後一個。虛擬化以後的核心網,與其說屬於通訊,實際上更應該歸爲IT。核心網的功能,只是容器中普通一個軟件功能而已。

至於說在座的各位核心網工程師,恭喜大家,立刻就要成功轉型啦!

相關文章
相關標籤/搜索