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

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

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

最後更新 2023/8/15 下午9:49
多多宜睡
預計閱讀 11 分鐘
分類
Docker
標籤
Docker

本文來源微信號:鮮棗課堂

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 和容器技術為什麼會這麼火爆?說白了,就是因為它 “輕”。

在容器技術之前,業界的網紅是虛擬機器。虛擬機器技術的代表,是 VMWareOpenStack

相信很多人都用過虛擬機器。虛擬機器,就是在你的作業系統裡面,安裝一個軟體,然後透過這個軟體,再模擬一台甚至多台 “子電腦” 出來。

虛擬機器,類似於 “子電腦”

在 “子電腦” 裡,你可以和正常電腦一樣執行程式,例如開 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。核心網的功能,只是容器中普通一個軟體功能而已。

至於說在座的各位核心網工程師,恭喜你們,馬上就要成功轉型啦!

繼續探索

延伸閱讀

更多文章
同標籤 2025/2/25

.NET 10 Preview 1 發佈

今天 .NET 10 Preview 1 發佈了,我第一時間下載,升級了 Avalonia UI 專案和部落格網站,前者功能測試及 AOT 發佈正常,後者偵錯正常,Docker 暫時未成功

繼續閱讀