containerd原理剖析與實(shí)戰(zhàn)
定 價:¥109
中 教 價:¥65.40 (6.00折)
庫 存 數(shù): 1
Kubernetes作為云原生領(lǐng)域容器編排的事實(shí)標(biāo)準(zhǔn)毋庸置疑,Kubernetes作為編排調(diào)度的指揮官,而真正的執(zhí)行者實(shí)際上是容器運(yùn)行時。在云原生生態(tài)中,容器運(yùn)行時作為云原生技術(shù)棧的基石,是至關(guān)重要的一環(huán)。本書旨在幫助讀者全面了解containerd的基本原理和概念。本書從云原生與容器運(yùn)行時講起,內(nèi)容涵蓋云原生和容器的發(fā)展史,容器技術(shù)的Linux原理,containerd的架構(gòu)、原理、功能、部署、配置、插件擴(kuò)展開發(fā)等,并詳細(xì)介紹containerd生產(chǎn)實(shí)踐中的配置以及落地實(shí)踐,使讀者對containerd的概念、原理、實(shí)踐有比較清晰的了解。本書適合作為云原生和容器技術(shù)的架構(gòu)師、研發(fā)工程師和運(yùn)維工程師的參考資料,也適合作為希望了解云計算和容器技術(shù)的愛好者的自學(xué)用書和參考手冊。
本書由字節(jié)跳動火山引擎資深技術(shù)專家傾力撰寫,并獲得了來自CNCF、浙江大學(xué)計算機(jī)系SEL實(shí)驗(yàn)室、火山引擎邊緣云、邊緣計算社區(qū)、Kata Containers架構(gòu)委員會等技術(shù)專家傾情力薦。這是首本詳細(xì)剖析容器運(yùn)行時containerd原理與實(shí)戰(zhàn)的書,匯聚了作者十余年云原生工作中的經(jīng)驗(yàn)總結(jié)與思考。
創(chuàng)作背景近幾年,隨著Kubernetes和容器技術(shù)的崛起,云原生已成為當(dāng)下熱門的技術(shù)話題。而Kubernetes也毫無疑問地成為容器編排領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。容器運(yùn)行時作為Kubernetes運(yùn)行容器的關(guān)鍵組件,承擔(dān)著管理進(jìn)程的使命。起初Kubernetes支持的容器運(yùn)行時是Docker,Docker client通過代碼內(nèi)嵌的方式集成在kubelet中。之后Kubernetes重新設(shè)計了CRI標(biāo)準(zhǔn),使得各種容器運(yùn)行時可以通過CRI協(xié)議接入Kubernetes。而之前通過硬編碼形式嵌入kubelet中的Docker client,則逐漸遷移到CRI標(biāo)準(zhǔn)下(dockershim),并在Kubernetes 1.24版本中被徹底移除。CRI支持的容器運(yùn)行時有很多,其中containerd作為從Docker項(xiàng)目中分離出來的項(xiàng)目,由于經(jīng)歷了Docker多年生產(chǎn)環(huán)境的磨煉,相比其他CRI運(yùn)行時更加健壯、成熟。正如containerd官網(wǎng)所言,containerd是一個工業(yè)級標(biāo)準(zhǔn)的容器運(yùn)行時,它強(qiáng)調(diào)簡單性、健壯性和可移植性。Docker作為老牌的容器運(yùn)行時,有很多相關(guān)的書籍和資料對其進(jìn)行介紹,而containerd作為一個新興的容器運(yùn)行時,截至筆者著書之日,依然沒有系統(tǒng)介紹它的書籍。作為一名云原生以及容器技術(shù)的忠實(shí)粉絲,筆者很早就接觸到了containerd項(xiàng)目,并見證了containerd項(xiàng)目的發(fā)展,為containerd項(xiàng)目取得的成就感到驕傲,也對containerd項(xiàng)目充滿了信心。因此,希望通過這本書,更多的人可以了解containerd,體驗(yàn)containerd帶來的價值。目標(biāo)讀者本書的目標(biāo)讀者包括: 云原生架構(gòu)師。 容器技術(shù)架構(gòu)師。 研發(fā)工程師。 運(yùn)維工程師。 云計算和容器技術(shù)的愛好者。本書內(nèi)容本書作為一本系統(tǒng)介紹云原生容器運(yùn)行時containerd的書,將通過深入淺出的方式一步步介紹containerd的發(fā)展歷史、依賴的技術(shù)背景、技術(shù)架構(gòu)和原理等。本書內(nèi)容共分8章,每章的知識點(diǎn)如下。 第1章:講解云原生與容器運(yùn)行時,介紹什么是云原生,云原生有什么價值,云原生與容器運(yùn)行時有什么關(guān)系,以及Docker與Kubernetes的發(fā)展歷史等,帶讀者了解containerd容器技術(shù)的發(fā)展與歷史。 第2章:講解容器運(yùn)行時的概念,從容器技術(shù)及其發(fā)展歷史出發(fā),為讀者介紹容器的發(fā)展史,容器所依賴的Linux基礎(chǔ),容器運(yùn)行時以及當(dāng)前的容器運(yùn)行時規(guī) 范等。 第3章:講解如何使用containerd,內(nèi)容包括containerd的安裝和部署,以及如何通過ctr和nerdctl兩種cli工具操作containerd。 第4章:講解containerd與CRI,內(nèi)容包括Kubernetes中的CRI機(jī)制及其演進(jìn)、containerd中的CRI Plugin架構(gòu)和配置,以及CRI客戶端工具crictl的使用等。 第5章:講解containerd中的容器網(wǎng)絡(luò),主要從CNI規(guī)范、常見的CNI網(wǎng)絡(luò)插件,以及如何在containerd中指定容器網(wǎng)絡(luò)創(chuàng)建容器等方面展開介紹。 第6章:講解containerd和容器存儲,重點(diǎn)介紹containerd是如何通過snapshotter管理容器鏡像的。 第7章:講解containerd的核心組件,對containerd的架構(gòu)進(jìn)行剖析,根據(jù)containerd架構(gòu)講解組成containerd的各個模塊,如API、Core以及Backend層的多個模塊。 第8章:講解containerd生產(chǎn)與實(shí)踐中的一些操作,如如何配置containerd的監(jiān) 控,如何基于containerd做二次開發(fā)等。讀者服務(wù)讀者可以通過掃碼訪問本書專享資源官網(wǎng),獲取示例代碼,加入讀者群,下載最新學(xué)習(xí)資源或反饋書中的問題。勘誤和支持由于筆者水平有限,書中難免會有疏漏和不妥之處,懇請廣大讀者批評指正。致謝本書從構(gòu)思、形成初稿,直到出版問世,得到了許多人的幫助。首先要感謝的是我的妻子對我的支持,使我有足夠的時間投入本書的寫作中,并在寫作的過程中給了我很大的鼓勵和支持。本書的大量內(nèi)容源于我所參與的項(xiàng)目實(shí)踐。諸多業(yè)務(wù)合作伙伴在使用我們的容器平臺的過程中向我們提出了許多富有挑戰(zhàn)的問題,是他們孜孜不倦的追求,深化了我對容器技術(shù)、containerd的理解,進(jìn)而豐富了本書的內(nèi)容。對此,向曾經(jīng)一起合作的團(tuán)隊(duì)成員表示感謝。最后,衷心感謝清華大學(xué)出版社王秋陽老師對本書進(jìn)行細(xì)致的審閱和策劃,讓本書的架構(gòu)更加完備,內(nèi)容更加完整,并最終得以順利出版。
筆者
趙吉壯,碩士畢業(yè)于浙江大學(xué)控制科學(xué)與工程學(xué)院,字節(jié)跳動火山引擎云計算架構(gòu)師,Kubernetes、Knative 等開源社區(qū)成員。具備多年云原生領(lǐng)域架構(gòu)設(shè)計與研發(fā)經(jīng)驗(yàn),主導(dǎo)火山引擎邊緣容器完成從0 到1的建設(shè)。專注于 kubernetes、Serverless、容器等技術(shù)的研究,譯作有《Knative 最佳實(shí)踐》和《Knative 快速入門與實(shí)踐》等書籍。
張明月,新華三資深網(wǎng)絡(luò)技術(shù)專家,多年企業(yè)網(wǎng)實(shí)踐經(jīng)驗(yàn),對數(shù)據(jù)中心網(wǎng)絡(luò)、園區(qū)網(wǎng)絡(luò)、傳統(tǒng)二三層交換機(jī)、數(shù)據(jù)傳輸設(shè)備,從管理面到協(xié)議控制面,都有著深刻的理解。
第1章 云原生與容器運(yùn)行時 11.1 云原生概述 11.1.1 云原生的定義 11.1.2 云原生應(yīng)用的價值 31.1.3 云原生應(yīng)用與傳統(tǒng)應(yīng)用對比 31.2 云原生技術(shù)棧與容器運(yùn)行時 41.2.1 云原生技術(shù)棧 41.2.2 容器運(yùn)行時 51.3 Docker與Kubernetes的發(fā)展史 71.3.1 Docker的發(fā)展歷史及與容器世界的關(guān)聯(lián) 71.3.2 Docker架構(gòu)的發(fā)展 131.4 containerd概述 15第2章 初識容器運(yùn)行時 182.1 容器技術(shù)的發(fā)展史 192.2 容器Linux基礎(chǔ) 252.2.1 容器是如何運(yùn)行的 252.2.2 namespace 272.2.3 Cgroups 462.2.4 chroot和pivot_root 522.3 容器運(yùn)行時概述 542.3.1 什么是容器運(yùn)行時 542.3.2 OCI規(guī)范 552.3.3 低級容器運(yùn)行時 702.3.4 高級容器運(yùn)行時 71第3章 使用containerd 733.1 containerd的安裝與部署 743.1.1 containerd的安裝 743.1.2 配置containerd.service 763.2 ctr的使用 783.2.1 ctr的安裝 783.2.2 namespace 803.2.3 鏡像操作 823.2.4 容器操作 853.3 nerdctl的使用 893.3.1 nerdctl的設(shè)計初衷 893.3.2 安裝和部署nerdctl 903.3.3 nerdctl的命令行使用 923.3.4 運(yùn)行容器 953.3.5 構(gòu)建鏡像 96第4章 containerd與云原生生態(tài) 994.1 Kubernetes與CRI 994.1.1 Kubernetes概述 994.1.2 CRI與containerd在Kubernetes生態(tài)中的演進(jìn) 1014.1.3 CRI概述 1044.1.4 幾種CRI實(shí)現(xiàn)及其概述 1104.2 containerd與CRI Plugin 1154.2.1 containerd中的CRI Plugin 1154.2.2 CRI Plugin中的重要配置 1174.2.3 CRI Plugin中的配置項(xiàng)全解 1304.3 crictl的使用 1384.3.1 crictl概述 1384.3.2 crictl的安裝和配置 1394.3.3 crictl使用說明 142第5章 containerd與容器網(wǎng)絡(luò) 1535.1 容器網(wǎng)絡(luò)接口 1535.1.1 CNI概述 1535.1.2 CNI配置文件的格式 1555.1.3 容器運(yùn)行時對CNI插件的調(diào)用 1575.1.4 CNI插件的執(zhí)行流程 1605.1.5 CNI插件的委托調(diào)用 1665.1.6 CNI插件接口的輸出格式 1675.1.7 手動配置容器網(wǎng)絡(luò) 1695.2 CNI插件介紹 1815.2.1 main類插件 1825.2.2 ipam類插件 1975.2.3 meta類插件 2035.3 containerd中CNI的使用 2095.3.1 containerd中CNI的安裝與部署 2095.3.2 nerdctl使用CNI 2105.3.3 CRI使用CNI 2145.3.4 ctr使用CNI 215第6章 containerd與容器存儲 2166.1 containerd中的數(shù)據(jù)存儲 2166.1.1 理解容器鏡像 2166.1.2 containerd中的存儲目錄 2196.1.3 containerd中的鏡像存儲 2226.1.4 containerd中的content 2236.1.5 containerd中的snapshot 2306.2 containerd鏡像存儲插件snapshotter 2346.2.1 Docker中的鏡像存儲管理graphdriver 2356.2.2 graphdriver與snapshotter 2376.2.3 snapshotter概述 2386.2.4 containerd中如何使用snapshotter 2436.3 containerd支持的snapshotter 2466.3.1 native snapshotter 2466.3.2 overlayfs snapshotter 2506.3.3 devmapper snapshotter 258第7章 containerd核心組件解析 2727.1 containerd架構(gòu)總覽 2727.2 containerd API和Core 2747.2.1 GRPC API 2757.2.2 Services 2897.2.3 Metadata 2907.3 containerd Backend 2937.3.1 containerd中的proxy plugins 2947.3.2 containerd中的Runtime和shim 2977.3.3 containerd shim規(guī)范 3007.3.4 shim工作流程解析 3067.4 containerd與NRI 3097.4.1 NRI概述 3107.4.2 NRI插件原理 3117.4.3 containerd中啟用NRI插件 3197.4.4 containerd NRI插件示例 3207.4.5 NRI插件的應(yīng)用 322第8章 containerd生產(chǎn)與實(shí)踐 3238.1 containerd監(jiān)控實(shí)踐 3238.1.1 安裝Prometheus 3238.1.2 Prometheus上containerd的指標(biāo)采集配置 3268.1.3 Grafana監(jiān)控配置 3308.1.4 配置containerd面板 3308.2 基于containerd開發(fā)自己的容器客戶端 3328.2.1 初始化Client 3338.2.2 拉取鏡像 3348.2.3 創(chuàng)建OCI Spec 334
8.2.4 創(chuàng)建task 3348.2.5 啟動task 3358.2.6 停止task 3358.2.7 運(yùn)行示例 3368.3 開發(fā)自己的NRI插件 3378.3.1 插件定義與接口實(shí)現(xiàn) 3378.3.2 插件實(shí)例化與啟動 3398.3.3 插件的運(yùn)行演示 339