本文來源微信號:鮮棗課堂
2010 年,幾個搞 it 的年輕人,在美國舊金山成立了一家名叫 “dotcloud” 的公司。

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

lxc,就是 linux 容器虛擬技術(linux container)
後來,dotcloud 公司將自己的容器技術進行了簡化和標準化,並命名為 --docker。

docker 技術誕生之後,並沒有引起行業的關注。而 dotcloud 公司,作為一家小型創業企業,在激烈的競爭之下,也步履維艱。
正當他們快要堅持不下去的時候,腦子裡蹦出了 “開源” 的想法。
什麼是 “開源”?開源,就是開放原始碼。也就是將原來內部保密的程式原始碼開放給所有人,然後讓大家一起參與進來,貢獻代碼和意見。

有的軟體是一開始就開源的。也有的軟體,是混不下去,創造者又不想放棄,所以選擇開源。自己養不活,就吃 “百家飯” 嘛。
2013 年 3 月,dotcloud 公司的創始人之一,docker 之父,28 歲的 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。核心網的功能,只是容器中普通一個軟體功能而已。
至於說在座的各位核心網工程師,恭喜你們,馬上就要成功轉型啦!
