乾貨滿滿!10分鐘看懂Docker和K8S
https://my.oschina.net/jamesview/blog/2994112
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。核心網的功能,只是容器中普通一個軟體功能而已。
至於說在座的各位核心網工程師,恭喜你們,馬上就要成功轉型啦!
相關文章
- 乾貨滿滿的 Go Modules 和 goproxy.cnGo
- 乾貨滿滿 | 微服務化的資料庫設計與讀寫分離微服務資料庫
- 乾貨滿滿,騰訊雲+社群技術沙龍 Kafka Meetup 深圳站圓滿結束Kafka
- GopherChina 2021 定了,乾貨滿滿的來了Go
- 乾貨滿滿!!!面試必備OJ題:連結串列篇(一)面試
- Golang進階,揉碎資料庫中介軟體,乾貨滿滿!Golang資料庫
- 【乾貨滿滿】貝塞爾曲線(Bézier curve)——什麼神仙操作
- ES6的概念以及執行環境~滿滿的乾貨
- 乾貨滿滿!深入解析增強分析的概念及其優勢
- 推薦系統演算法合集,滿滿都是乾貨(建議收藏)演算法
- Jeff Dean執筆谷歌團隊2017年終總結,乾貨滿滿谷歌
- 【乾貨滿滿】1.5w字初中級前端面試複習總結前端面試
- 手把手教你實現 Tree 元件搜尋過濾功能,乾貨滿滿!元件
- 乾貨滿滿 | 美團資料庫運維自動化系統構建之路資料庫運維
- 乾貨滿滿2017中國軟體生態大會亮點搶先看
- 乾貨 | 2分鐘玩轉ApipostAPI
- 滿滿乾貨!手把手教你實現基於eTS的分散式計算器分散式
- 乾貨:五分鐘帶你看懂NestedScrolling巢狀滑動機制巢狀
- 一份資料工程師必備的學習資源,乾貨滿滿(附連結)工程師
- 按著這些視訊路線走,你絕對能成為前端大佬(乾貨滿滿)前端
- 知識圖譜論文大合集,這份乾貨滿滿的筆記解讀值得收藏筆記
- 【恩墨學院】5 分鐘帶你看懂 DockerDocker
- 資料庫週刊第十六期丨滿滿乾貨,快來墨天輪下載吧!資料庫
- 檔案上傳下載攻略,斷點續傳等等那些事兒,滿滿乾貨(react&node)斷點React
- 又跳槽!3年Java經驗收割成都大廠的面試心得(乾貨滿滿&文末有福利)Java面試
- 10分鐘搭建k8sK8S
- 直擊DTCC2022第二天,六場技術論壇乾貨滿滿
- 乾貨滿滿!解密阿里雲RPA (機器人流程自動化)的產品架構和商業化發展解密阿里機器人架構
- 運維乾貨 | 10分鐘深入瞭解10大Nginx配置項優化運維Nginx優化
- 10分鐘看懂動態代理設計模式設計模式
- 六個良心軟體,滿足你對乾貨的任何需求!
- 《夢幻西遊三維版》520釋出會重磅爆料!新角色新賽事新玩法乾貨滿滿
- 老師講的真棒!如何在Android-Studio下進行NDK開發,滿滿乾貨指導Android
- Smartisan M1/M1L評測:滿血滿格、情懷滿分
- 技術乾貨|如何實現分鐘級故障管理
- 乾貨滿滿!2020版好程式設計師新電商大資料平臺全套學習資料程式設計師大資料
- 十分鐘看懂AES加密加密
- 五分鐘看懂vue原理(一)Vue