云原生技術與應用-Containerd容器技術詳解

目錄

一.Containerd概述

? 1.什么是containerd

? 2.Containerd的起源與背景

二.Containerd架構

? 1.Containerd架構概述

? 2.核心組件解析

三.安裝配置Containerd

? 1.安裝Containerd

? 2.配置Containerd

四.Containerd基本操作

? 1.鏡像類操作

? 2.容器類操作

? 3.任務類操作

? 4.其他操作


一.Containerd概述

1.什么是Containerd

? ??Containerd 是一個開源的容器運行時(container runtime),主要用于管理容器的生命周期,包括容器的創建、啟動、停止、刪除等核心操作。它最初是 Docker 引擎的一部分,2017 年被分離出來并捐贈給 Cloud Native Computing Foundation(CNCF),成為獨立的開源項目,目前已成為云原生生態中容器運行時的重要標準之一。

2.Containerd的起源與背景

??Containerd 的起源可以追溯到 Docker 項目。Docker 最初作為一個開源項目推出,旨在簡化應用程序的打包、分發和部署過程。Docker 引入了容器的概念,將應用程序和其依賴項打包到一個容器中,使得應用在不同環境中可以一致地運行。

? ?隨著 Docker 的發展,其架構逐漸變得復雜,包含了許多功能,如鏡像構建、服務編排等。為了更好地組織和管理這些功能,Docker 團隊決定將 Docker 引擎拆分成多個組件,其中一個關鍵的組件就是 Containerd。

? ?Docker 架構拆分:Docker 從單一的大型引擎拆分為一系列小型、可復用的組件。這種拆分的目標 是提高可維護性、模塊化和可擴展性。

? ?Containerd 作為核心運行時:在 Docker 架構拆分后,containerd 被定位為 Docker 的核心容器運行時。它負責管理容器的生命周期、鏡像操作和基本運行時功能。

? ?貢獻給 CNCF(云原生基金會):為了推動 Containerd 的發展,Docker 團隊將 containerd 的代碼捐贈給了 Cloud Native Computing Foundation(CNCF),使其成為 CNCF 的孵化項目。

? ?容器生態系統的標準化:Containerd 的設計遵循 Open Container Initiative(開放容器倡議 OCI)規范,這是一個關注容器運行時和鏡像格式標準化的開放標準組織。這意味著 containerd 可以與符合 OCI 規范的其他容器工具和運行時進行互操作。

? 獨立的容器運行時:containerd 不僅僅局限于 Docker,它可以作為獨立的容器運行時,與多個容器編排系統和工具集成,從而為用戶提供更多選擇。

? ?總體而言,containerd 的起源是為了簡化容器運行時的管理,并為容器生態系統提供一個開放、標準化的基礎。其發展不僅服務于 Docker 生態系統,還為整個容器領域提供了一個通用的、可擴展的容器運行時。

二.Containerd架構

1.Containerd架構概述

? ?Containerd 的架構是 modularity(模塊化)和可擴展性的體現,它被設計為一個輕量級、高度可定制的容器運行時。

2.核心組件解析

┌───────────────────────────────────────────────────────────┐
│                        用戶工具層                          │
│  (Docker CLI, Kubernetes CRI, 其他自定義客戶端)           │
└───────────────────────────────────┬───────────────────────┘│ gRPC API
┌───────────────────────────────────▼───────────────────────┐
│                        containerd 守護進程                  │
│  ┌───────────────────┐  ┌─────────────────┐  ┌───────────┐  │
│  │    任務管理器      │  │    內容存儲      │  │  快照服務  │  │
│  └───────────────────┘  └─────────────────┘  └───────────┘  │
└───────────────────────────┬─────────────────────────────────┘│ 插件接口
┌───────────────────────────▼─────────────────────────────────┐
│                          插件層                              │
│  ┌────────────┐  ┌───────────┐  ┌───────────┐  ┌──────────┐  │
│  │  CRI 插件   │  │  鏡像插件  │  │  存儲插件  │  │  事件插件 │  │
│  └────────────┘  └───────────┘  └───────────┘  └──────────┘  │
│                                                               │
│  ┌────────────┐  ┌───────────┐  ┌───────────┐                 │
│  │  日志插件   │  │  網絡插件  │  │  運行時插件 │                 │
│  └────────────┘  └───────────┘  └───────────┘                 │
└───────────────────────────┬─────────────────────────────────┘│ 底層接口
┌───────────────────────────▼─────────────────────────────────┐
│                          運行時層                            │
│  ┌────────────┐  ┌───────────────────────┐  ┌──────────────┐  │
│  │   runc     │  │  其他 OCI 運行時 (gVisor, kata) │  │  系統調用 │  │
│  └────────────┘  └───────────────────────┘  └──────────────┘  │
└───────────────────────────┬─────────────────────────────────┘│ Linux 內核
┌───────────────────────────▼─────────────────────────────────┐
│                        操作系統層                            │
│      (namespaces, cgroups, seccomp, 內核功能)                │
└───────────────────────────────────────────────────────────┘
  1. 客戶端與 API

    • 通過 gRPC 接口提供服務,支持多種客戶端工具(如 Docker CLI、Kubernetes CRI 客戶端)。
    • 提供容器、鏡像、內容存儲等核心資源的管理接口。
  2. 鏡像管理

    • 支持從容器 registry 拉取鏡像,遵循 OCI 鏡像規范。
    • 實現鏡像內容的存儲與校驗(Content Addressable Storage)。
  3. 容器生命周期管理

    • 負責容器的創建、啟動、停止、刪除等操作。
    • 通過 shim 進程隔離容器與主守護進程,確保穩定性。
  4. 存儲與快照

    • 提供分層存儲機制,支持聯合掛載(Union Mount)。
    • 通過快照服務實現容器文件系統的快速創建與隔離。
  5. 網絡與日志

    • 通過 CNI(容器網絡接口)插件實現網絡配置。
    • 支持多種日志驅動,收集容器運行日志。
  6. 安全機制

    • 集成 seccomp、AppArmor 等安全模塊,增強容器隔離。
    • 支持多種運行時(如 runc、gVisor、Kata Containers),滿足不同安全需求。
4. 與其他組件的關系
  • 與 Kubernetes 的集成:通過 CRI 插件對接,成為 K8s 默認的容器運行時之一。
  • 與 Docker 的關系:Docker 自 1.11 版本起采用 containerd 作為底層運行時,實現架構解耦。
  • 與 OCI 標準的結合:基于 runc 實現 OCI 運行時規范,確保容器可移植性。

三.安裝配置Containerd

1.安裝containerd

?

2.配置Containerd

(1)生成配置文件

sudo tee /etc/containerd/config.toml:

tee 命令通常用來讀取標準輸入,并將其內容寫入文件和輸出到終端。

/etc/containerd/config.toml 是 containerd 的配置文件路徑,這里指定了配置文件的具體位置。

使用 containerd config default 命令獲取 containerd 的默認配置信息;
通過管道 | 將這些配置信息傳遞給 tee 命令;
使 用 sudo tee /etc/containerd/config.toml 以 管 理 員 權 限 創 建 或 覆 蓋 /etc/containerd/config.toml 文件,并將之前獲取的配置信息寫入其中。

?(2)修改配置文件

vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

? SystemdCgroup = true

?config_path = "/etc/containerd/certs.d"

?

?(3)啟動服務

四.Containerd基本操作

1. 鏡像類操作

指定平臺拉取鏡像

?(2)查看鏡像

(3)查看本地鏡像

?(4)重新打標簽

?(5)刪除鏡像

(6)鏡像掛載到主機目錄

?(7)鏡像從主機目錄卸載

ctr images unmount /mnt/

(8) 鏡像導出

?(9)鏡像導入

?2.容器類操作

(1)創建容器

(2)列出容器

?(3)刪除容器

3.任務類操作

(1)啟動容器

(2) 查看容器

(3)進入容器里面

?(4)暫停容器

?(5)恢復容器

?(6)獲取容器的內存,CPU和PID的限額與使用量

?4.其他操作

列出當前所有的插件

命名空間

查看都有哪些命令空間

創建命名空間

?刪除命名空間

? ? 在做操作的時候可以使用-n來指定命名空間,如果不指定表示操作的是默認的命名空間,比如查看k8s.io命名空間的鏡像

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914470.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LINUX714 自動掛載/nfs;物理卷

開機自動掛載 /etc/fstab vim /etc/fstab /dev/sdb2 /u2 ext4 defaults 0 0 mount -a [rootweb ~]# vim /etc/fstab [rootweb ~]# cat /etc/fstab# # /etc/fstab # Created by anaconda on Sat Apr 19 17:11:28 2025 # # Accessible filesystems, by reference, are maintai…

系統性學習C語言-第十六講-深入理解指針(6)

系統性學習C語言-第十六講-深入理解指針(6)1. sizeof 和 strlen 的對比1.1 sizeof 1.2 strlen 1.3 sizeof 和 strlen 的對比2. 數組和指針筆試題解析2.1 一維數組2.2 字符數組2.3 二維數組3. 指針運算筆試題解析3.1 題目1:3.2 題目…

8:從USB攝像頭把聲音拿出來--ALSA大佬登場!

前言前面的章節我們從認識攝像頭開始,逐漸認識的YCbCr,并對其進行了H264的編碼以及MP4封裝。整個過程中,我們大致使用了V4L2和FFmpeg這兩個重量級工具,就像我們前面章節所講,V4L2只是給圖像做服務的,并不參…

Linux 命令:useradd

Linux useradd 命令詳細教程 useradd 是 Linux 系統中用于創建新用戶賬戶的基礎命令,它通過配置文件(如 /etc/passwd、/etc/shadow)和默認設置自動完成用戶創建流程。本文將詳細介紹其用法、參數及相關配置。資料已經分類整理好:h…

Pytest之收集用例規則與運行指定用例

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快 小伙伴們大家好呀,今天筆者會給大家講解一下pytest是如何收集我們寫好的用例?我們又有哪些方式來運行單個用例或者批量運行用例呢&#xff…

qt 使用memcpy進行內存拷貝時注意的問題

int offset sizeof(st_target_data);// 預先分配足夠空間this->featureData.resize(offsetsize);// 再執行拷貝memcpy(this->featureData.data()offset, dataa, size);注意 一定要在mencpy之前 使用resize分配足夠的空間,否則在方法退出時候會閃退&#xff…

微調性能趕不上提示工程怎么辦?Can Gradient Descent Simulate Prompting?——論文閱讀筆記

今天速讀一篇文章 Can Gradient Descent Simulate Prompting? 一句話總結 針對【新知識應用的場景里,FT效果往往追不上ICL】這個情況,作者引入MAML的思想↓ 內圈讓模型學習新知識形成知識FT模型; 外圈通過最小化ICL和知識FT模型的KL散度&…

從“直覺搶答”到“深度思考”:大模型的“慢思考”革命,思維鏈、樹、圖如何讓AI越來越像人?

注:此文章內容均節選自充電了么創始人,CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》(跟我一起學人工智能)【陳敬雷編著】【清華大學出版社】 GPT多模態大模型與AI Agent智能體書籍本章配套視頻課程【陳敬雷】 文…

Android系統的問題分析筆記 - Android上的調試方式 debuggerd

debuggerd 是 Android 系統中的一個重要調試工具,主要用于生成進程崩潰時的核心轉儲(core dump)和調試信息(如堆棧跟蹤)。以下是關于 debuggerd 的詳細說明: 1. 基本功能 崩潰分析:當 Native 進…

python 雙下劃線開頭函數

在 Python 里,雙下劃線開頭的函數(準確地說是方法)有著特殊的用途和意義。下面為你詳細介紹相關內容: 1. 類的特殊方法(魔術方法) 以雙下劃線開頭和結尾的方法,被稱為特殊方法或者魔術方法&…

VyOS起步指南:用Docker快速搭建網絡實驗環境

文章目錄1. VyOS是什么?為什么選擇它?2. 五分鐘快速部署:Docker方案3. 進入容器:初探VyOS世界4. 核心操作:像開發者一樣思考5. 踩坑提醒:新手常見問題6. 結語:網絡即代碼的未來1. VyOS是什么&am…

動態規劃理論基礎,LeetCode 509. 斐波那契數 LeetCode 70. 爬樓梯 LeetCode 746. 使用最小花費爬樓梯

動態規劃理論基礎動態規劃,英文:Dynamic Programming,簡稱DP,如果某一問題有很多重疊子問題,使用動態規劃是最有效的。所以動態規劃中每一個狀態一定是由上一個狀態推導出來的,這一點就區分于貪心&#xff…

暑期自學嵌入式——Day02(C語言階段)

點關注不迷路喲。你的點贊、收藏,一鍵三連,是我持續更新的動力喲!!! 主頁: 一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?spm1000.2115.3001.5343 目錄 Day02→數據類型&#xf…

如何單獨安裝設置包域名

前言 在 npm 中,直接通過 package-lock.json 無法單獨設置包的安裝地址,因為該文件是自動生成的依賴關系鎖定文件。但你可以通過以下方法間接實現: 一、在 package.json 中指定包來源(推薦) 在 package.json 的 depend…

存儲過程探秘:數據庫編程的藝術

文章目錄存儲過程語法格式BEGIN...END語句塊DECLARE(聲明局部變量)流控制語句if函數批處理操作測試2測試3存儲過程與函數的關系存儲過程 MYSQL的存儲過程是一組預處理的SQL語句,可以像函數一樣在數據庫中進行存儲和調用。 它們允許在數據庫…

非阻塞寫入核心:asyncio.StreamWriter 的流量控制與數據推送之道

在 asyncio 的異步編程框架中,如果說 asyncio.StreamReader 是你異步應用的數據輸入管道,那么 asyncio.StreamWriter 就是你異步應用的數據輸出管道。它是一個至關重要的組件,讓你能夠方便、高效且非阻塞地向連接的另一端(如 TCP …

控制臺打開mysql服務報錯解決辦法

控制臺打開mysql服務報錯解決辦法這個MySQL錯誤表示訪問被拒絕,通常是因為沒有提供正確的用戶名和密碼。以下是幾種解決方法: 方法1:指定用戶名和密碼連接 mysql -u root -p然后輸入root用戶的密碼。 方法2:如果忘記了root密碼&am…

Unsloth 實戰:DeepSeek-R1 模型高效微調指南(下篇)

食用指南 本系列因篇幅原因拆分為上下兩篇: 上篇以基礎環境搭建為主,介紹了 Unsloth 框架、基座模型下載、導入基座模型、數據集下載/加載/清洗、SwanLab 平臺賬號注冊。 下篇(本文)以實戰微調為主,介紹預訓練、全量…

Ubuntu安裝Jenkins

Ubuntu安裝Jenkins方法1:使用官方的Jenkins倉庫1. 添加Jenkins倉庫2. 更新軟件包列表3. 安裝Jenkins4. 啟動Jenkins服務5. 設置Jenkins開機啟動6. 查找初始管理員密碼7. 訪問Jenkins方法2:使用Snap包(適用于較新的Ubuntu版本)1. 安…

ubuntu22.04下配置qt5.15.17開發環境

自從qt5.15版本開始,不再提供免費的離線安裝包,只能通過源碼自行編譯。剛好最近需要在ubuntu22.04下配置qt開發環境,于是寫篇文章記錄配置的過程。 其實一開始是想配置qt5.15.2的,但是在編譯配置參數這一步驟中出現如下報錯 em…