本書共分為八章,第一章講解雲端原生與容器執行時期,介紹什麼是雲端原生,探討其價值以及它與容器執行時期的關係,了解Docker與Kubernetes及containerd容器技術的發展歷史。
第二章深入探討容器執行時期的概念,從容器技術及介紹容器,容器所依賴的Linux基礎,當前的容器執行時期規範等。
第三章則專注於如何使用containerd,內容涵蓋containerd的安裝和部署,以及如何透過ctr和nerdctl兩種CLI工具操作containerd。
第四章講解containerd與CRI的關係,介紹Kubernetes中的CRI機制及其演進,containerd中的CRI Plugin架構和設定,以及CRI使用者端工具crictl的使用方法。
第五章主要講解containerd中的容器網路,介紹CNI規範、常見的CNI網路外掛程式,以及如何在containerd中指定容器網路建立容器等。
第六章介紹containerd和容器儲存,詳細說明containerd是如何透過snapshotter管理容器鏡像的。
第七章對containerd的核心元件進行剖析,根據containerd的架構講解組成containerd的各個模組,如API、Core以及Backend層的多個模組。第八章探討containerd在生產與實踐中的一些操作,包括如何設定containerd的監控,如何基於containerd做延伸開發等。
本書特色
• 雲端原生的價值與容器執行時期的關係。
• Docker與Kubernetes的發展歷史介紹。
• 容器技術發展史及其依賴的Linux基礎。
• containerd的安裝與部署及CLI工具操作。
• Kubernetes中的CRI機制及containerd中的CRI Plugin架構。
• containerd中的CNI規範與網路外掛程式。
• containerd透過snapshotter管理容器鏡像的方法。
• containerd的核心元件架構與各個模組剖析。
目錄
CHAPTER 1 雲端原生與容器執行時期
1.1 雲端原生概述
1.1.1 雲端原生的定義
1.1.2 雲端原生應用的價值
1.1.3 雲端原生應用與傳統應用對比
1.2 雲端原生技術堆疊與容器執行時期
1.2.1 雲端原生技術堆疊
1.2.2 容器執行時期
1.3 Docker 與Kubernetes 的發展史
1.3.1 Docker 的發展歷史及與容器世界的連結
1.3.2 Docker 架構的發展
1.4 containerd 概述
CHAPTER 2 初識容器執行時期
2.1 容器技術的發展史
2.2 容器Linux 基礎
2.2.1 容器是如何執行的
2.2.2 namespace
2.2.3 Cgroups
2.2.4 chroot 和pivot_root
2.3 容器執行時期概述
2.3.1 什麼是容器執行時期
2.3.2 OCI 規範
2.3.3 低級容器執行時期
2.3.4 高級容器執行時期
CHAPTER 3 使用containerd
3.1 containerd 的安裝與部署
3.1.1 containerd 的安裝
3.1.2 設定containerd.service
3.2 ctr 的使用
3.2.1 ctr 的安裝
3.2.2 namespace
3.2.3 鏡像操作
3.2.4 容器操作
3.3 nerdctl 的使用
3.3.1 nerdctl 的設計初衷
3.3.2 安裝和部署nerdctl
3.3.3 nerdctl 的命令行使用
3.3.4 執行容器
3.3.5 建構鏡像
CHAPTER 4 containerd 與雲端原生生態
4.1 Kubernetes 與CRI
4.1.1 Kubernetes 概述
4.1.2 CRI 與containerd 在Kubernetes 生態中的演進
4.1.3 CRI 概述
4.1.4 幾種CRI 實現及其概述
4.2 containerd 與CRI Plugin
4.2.1 containerd 中的CRI Plugin
4.2.2 CRI Plugin 中的重要設定
4.2.3 CRI Plugin 中的設定項全解
4.3 crictl 的使用
4.3.1 crictl 概述
4.3.2 crictl 的安裝和設定
4.3.3 crictl 使用說明
CHAPTER 5 containerd 與容器網路
5.1 容器網路介面
5.1.1 CNI 概述
5.1.2 CNI 設定檔的格式
5.1.3 容器執行時期對CNI 外掛程式的呼叫
5.1.4 CNI 外掛程式的執行流程
5.1.5 CNI 外掛程式的委託呼叫
5.1.6 CNI 外掛程式介面的輸出格式
5.1.7 手動設定容器網路
5.2 CNI 外掛程式介紹
5.2.1 main 類外掛程式
5.2.2 ipam 類外掛程式
5.2.3 meta 類外掛程式
5.3 containerd 中CNI 的使用
5.3.1 containerd 中CNI 的安裝與部署
5.3.2 nerdctl 使用CNI
5.3.3 CRI 使用CNI
5.3.4 ctr 使用CNI
CHAPTER 6 containerd 與容器儲存
6.1 containerd 中的資料儲存
6.1.1 理解容器鏡像
6.1.2 containerd 中的儲存目錄
6.1.3 containerd 中的鏡像儲存
6.1.4 containerd 中的content
6.1.5 containerd 中的snapshot
6.2 containerd 鏡像儲存外掛程式snapshotter
6.2.1 Docker 中的鏡像儲存管理graphdriver
6.2.2 graphdriver 與snapshotter
6.2.3 snapshotter 概述
6.2.4 containerd 中如何使用snapshotter
6.3 containerd 支援的snapshotter
6.3.1 native snapshotter
6.3.2 overlayfs snapshotter
6.3.3 devmapper snapshotter
CHAPTER 7 containerd 核心元件解析
7.1 containerd 架構總覽
7.2 containerd API 和Core
7.2.1 GRPC API
7.2.2 Services
7.2.3 Metadata
7.3 containerd Backend
7.3.1 containerd 中的proxy plugins
7.3.2 containerd 中的Runtime 和shim
7.3.3 containerd shim 規範
7.3.4 shim 工作流程解析
7.4 containerd 與NRI
7.4.1 NRI 概述
7.4.2 NRI 外掛程式原理
7.4.3 containerd 中啟用NRI 外掛程式
7.4.4 containerd NRI 外掛程式範例
7.4.5 NRI 外掛程式的應用
CHAPTER 8 containerd 生產與實踐
8.1 containerd 監控實踐
8.1.1 安裝Prometheus
8.1.2 Prometheus 上containerd 的指標擷取設定
8.1.3 Grafana 監控設定
8.1.4 設定containerd 面板
8.2 基於containerd 開發自己的容器使用者端
8.2.1 初始化Client
8.2.2 拉取鏡像
8.2.3 建立OCI Spec
8.2.4 建立task
8.2.5 啟動task
8.2.6 停止task
8.2.7 執行範例
8.3 開發自己的NRI 外掛程式
8.3.1 外掛程式定義與介面實現
8.3.2 外掛程式實例化與啟動
8.3.3 外掛程式的執行演示
作者介紹
作者簡介
趙吉壯
碩士畢業於浙江大學控制科學與工程學院,字節跳動火山引擎雲計算架構師,Kubernetes、Knative等開源社區成員。具備多年雲原生領域架構設計與研發經驗,主導火山引擎邊緣容器完成從0到1的建設。專注於Kubernetes、Serverless、容器等技術的研究,譯作有《Knative最佳實踐》和《Knative快速入門與實踐》等書籍。
張明月
新華三資深網路技術專家,多年企業網實踐經驗,對數據中心網路、園區網路、傳統二三層交換機、數據傳輸設備,從管理面到協議控制面,都有著深刻的理解。