K8s根本甩不掉Docker,原因一說就懂
題圖攝於北京前門
上個月 Kubernetes 1.20 beta 版的釋出記錄(release note)裡面宣告瞭 kubelet 的 dockershim 模組已經過時了(deprecated),最快將在 1.23 版本中移除,即大約是一年之後。
這本來是個很普通的訊息,沒想到上週突然冒出了一批搶眼球的文章,說什麼 Kubernetes 終於“甩掉”了 Docker ,一時間這條訊息被炒得沸沸揚揚。不明就裡的使用者被嚇得戰戰兢兢,不知所措。
這個 dockershim 其實是 Kubernetes 早期生長的一顆乳牙而已,現在“恆牙”已經長結實了,乳牙自然脫落就好。所以說,移去 dockershim 只是專案發展的必然結果,對使用者影響微乎其微,不必多慮。
下面是一個簡單的示意圖,根據筆者在《Harbor權威指南》一書中的插圖略微修改而來。Kubernetes 的 kubelet 可以支援多種符合 CRI 規範的執行時(runtime),例如 containerd 和 CRI-O。
而使用者熟悉的 Docker(圖中的 dockerd)不符合 CRI 規範,因此當年 kubelet 內建了一個模組 dockershim,用來對 Docker 進行 CRI 介面的適配。經過幾年的發展,CRI 的執行時已經很成熟了,使用者在 Kubernetes 中可以直接使用 containerd或者 CRI-O ,無需再透過 dockershim – dockerd – containerd 繞一圈(圖中紅色箭頭),既費時又費力的。由此可見,dockershim 就是那顆已完成歷史使命的乳牙而已,無足輕重了。
至於說 Kubernetes 徹底 “甩掉”了 Docker,也只是聳人聽聞罷了。在可見的將來,Kubernetes 都無法真正擺脫 Docker 的影響。
先說說容器執行時,符合 CRI 標準的 containerd,以及底層的 runC,都是從Docker 專案中分拆出來的,蘊含了揮之不去的 Docker 印記。
此外,Docker 最精華的部分並不是容器執行時。因為容器的執行時歸根到底僅僅是 Linux 核心功能的呼叫而已,Docker 的容器執行時是可以被替代的。
Docker 最具革命性的創新,是應用程式的封裝方式,即容器映象的格式定義。筆者在 2015 年文章中就旗幟鮮明地指出,Docker的核心價值是容器映象。容器映象是真正改變世界的技術,這個觀點至今仍然未變。Kubernetes 上跑的容器,離不開 Docker 映象的使用。
截至2020年初,Docker Hub 中的映象累計下載了 1300 億次,使用者建立了約 600 萬個容器映象庫。 -- 摘自《Harbor權威指南》
Docker 映象格式已是實際上的標準, OCI 的映象規範是以 Docker 映象格式為藍本制定的,在大多數情況下兩者是相容的。開發者平時用到的“Docker”,除了可以執行容器之外,還有一個重要的功能就是構建容器映象(例如 docker build),是上圖中 dockerd 提供的主要功能之一。這部分面向開發者的功能在執行環境中確實用處不大,是 dockershim 被移除的原因之一。
因為映象的格式已經標準化了,除了 Docker 以外,其他工具也可以構建映象,如紅帽的 Podman 等,但這些工具萬變不離其宗,依然(必須)使用 Docker 開創的映象格式標準。
Docker 公司有個著名的口號:“Build, Ship and Run”,翻譯過來就是三個動詞:“構建、傳送和執行”,簡練地描繪出了應用開發的精髓,其中隱含的意思是:構建映象、傳送映象和執行映象,一切皆以映象為中心。OCI 組織對應有三個規範,分別與上述三個動詞對應,即映象規範(構建)、執行時規範(執行)和正在制定的分發規範(傳送)。映象是容器應用的關鍵技術,圍繞映象的一系列管理工作將是實際運維中的重要組成部分,這也是我們當初建立 Harbor 開源專案所希望解決的問題。
Kubernetes 還將在較長時間內使用 Docker 創立的技術和規範。為幫助讀者理解,下面摘錄《Harbor權威指南》第1章的部分內容,介紹各種容器執行時之間的關係。本公眾號後續文章將給大家解釋容器映象的各種原理,請關注本號的文章更新。
Harbor 是原創於中國、廣泛應用於全球的雲原生開源專案,主要的維護者和貢獻者均來自中國。《Harbor權威指南》是第一本全面介紹 Harbor 雲原生製品倉庫的書籍,由 Harbor 專案維護者和貢獻者編寫。雙十二期間在京東、噹噹等網站半價優惠中。
容器的執行時 (《Harbor權威指南》節選)
config.json:這是必需的配置檔案,存放於檔案系統包的根目錄下。OCI執行時規範對Linux、Windows、Solaris和虛擬機器4種平臺的執行時做了相應的配置規範。
容器的根檔案系統:容器啟動後程式所使用的根檔案系統,由 config.json 中的root.path屬性確定該檔案系統的路徑,通常是“rootfs/”。
FROM ubuntu:18.04
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557890/viewspace-2741304/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一看就懂的SpringSpring
- 如何有效進行根本原因分析 (RCA) ?
- 現代 js 框架存在的根本原因JS框架
- SiamBAN詳細分析,一看就懂!
- RCA(根本原因分析)的4個步驟
- 【根本原因分析】如何找到問題的根源?
- Python爬蟲詳解(一看就懂)Python爬蟲
- 看一遍就懂:MVCC原理詳解MVC
- Python難懂?買一次西瓜就懂了!Python
- 魚骨圖能找到根本原因嗎?山東六西格瑪培訓公司這樣說
- 一圖讀懂k8s informer client-goK8SORMclientGo
- 醫院為什麼要做RCA(根本原因分析)?
- 如何為根本原因分析建立帕累託圖?
- 精讀《現代 js 框架存在的根本原因》JS框架
- [譯文] 現代 js 框架存在的根本原因JS框架
- 如何做出讓玩家“一看就懂,一玩就會”的新手引導
- 新手一看就懂的執行緒池!執行緒
- 一看就懂的TCP握手和揮手TCP
- RCA---給初學者的根本原因分析案例
- 如何建立用於根本原因分析的決策樹
- 根本原因分析(RCA)如何幫助企業發展?
- 最全的python自學資源,一看就懂!Python
- 天行健諮詢:RCA(根本原因分析),讓你離真相更近一步!
- 掌握它才說明你真正懂 Elasticsearch - Lucene (一)Elasticsearch
- 一文讀懂 K8s 持久化儲存流程K8S持久化
- 一文讀懂k8s之Pod安全策略K8S
- 六西格瑪諮詢公司 談 RCA(根本原因分析)
- 一看就懂,一寫就懵?搞懂回溯演算法,一口氣刷了20多道題演算法
- 一看就懂的交換機基礎知識
- 三分鐘圖解 MVCC,看一遍就懂圖解MVC
- 一看就懂之webpack高階配置與優化Web優化
- 一看就懂的Android APP開發入門教程!AndroidAPP
- Docker就應該通俗易懂一些Docker
- k8s & docker networkK8SDocker
- 一文讀懂k8s rbac 許可權驗證K8S
- 一看你就懂,超詳細 java 中的 ClassLoader 詳解Java
- 小姐姐用動畫圖解Git命令,一看就懂!動畫圖解Git
- 為什麼說遊戲策劃要懂點美術?看完這篇你就明白了遊戲