不會Docker和K8S,同事被移出公司群聊
Docker 是容器的代名詞,K8S 是容器編排的代名詞,這倆近幾年在云計算領域非常的火。今天我們通過此文讓你10分鐘看懂 Docker 和 K8S。
圖片來自 Pexels
2010 年,幾個搞 IT 的年輕人,在美國舊金山成立了一家名叫“dotCloud”的公司。
這家公司主要提供基于 PaaS 的云計算技術服務。具體來說,是和 LXC 有關的容器技術。
LXC,就是Linux容器虛擬技術(Linux container)
后來,dotCloud 公司將自己的容器技術進行了簡化和標準化,并命名為——Docker。
Docker 技術誕生之后,并沒有引起行業的關注。而 dotCloud 公司,作為一家小型創業企業,在激烈的競爭之下,也步履維艱。
正當他們快要堅持不下去的時候,腦子里蹦出了“開源”的想法。
什么是“開源”?開源,就是開放源代碼。也就是將原來內部保密的程序源代碼開放給所有人,然后讓大家一起參與進來,貢獻代碼和意見。
Open Source,開源
有的軟件是一開始就開源的。也有的軟件,是混不下去,創造者又不想放棄,所以選擇開源。自己養不活,就吃“百家飯”嘛。
2013 年 3 月,dotCloud 公司的創始人之一,Docker 之父,28 歲的 Solomon Hykes 正式決定,將 Docker 項目開源。
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。核心網的功能,只是容器中普通一個軟件功能而已。
至于說在座的各位核心網工程師,恭喜你們,馬上就要成功轉型啦!
作者:小棗君
編輯:陶家龍
出處:轉載自微信公眾號鮮棗課堂(ID:xzclasscom)