閱讀141 返回首頁    go 阿裏雲 go 技術社區[雲棲]


什麼是 Containerd

640_090402

我們過去曾就 containerd 的不同特點、它是如何設計的、以及我們在此過程中所解決的一些問題進行過幾次討論。

Containerd 已經被 Docker、Kubernetes CRI 和其他一些項目所使用。今天這篇文章,意在幫助讀者理解 Containerd 實際上如何在這些平台上使用。將來我會寫更多文章來介紹 containerd 的各種功能以及設計理念。不過,現在讓我們先從一些基礎知識開始吧。

我估計,容器生態係統時常讓人感到迷惑。特別是我們所使用的術語。這是什麼?一個運行時。這個呢?一個運行時...

從其名稱看,containerd 並不是像某些人所調侃的那樣 (contain nerd,字麵意思“包含傻瓜”),而是一個容器守護程序。它最初是作為一種 OCI 運行時的整合點,如 runc,但在過去的 6 個月裏,它增加了許多功能,使其滿足 Docker 和 Kubernetes 等現代容器平台的需求。

640_090403_jpeg

由於在內核空間中沒有 Linux 容器這樣的東西,容器是各種內核功能捆綁在一起,當您在構建一個大型平台或分布式係統時,您想要在管理代碼和係統調用之間的一個抽象層和一係列功能來運行一個容器。那就是 containerd 所在的層。它提供了一個客戶端層,包含一些類型,平台可以在其上進行構建,而不需要下降到內核層。與管理對 clone() 或 mount() 的調用相比,使用 Container、Task 和 Snapshot 類型的工作要輕鬆得多。

Containerd 可用於 Docker、Kubernetes 以及任何其他希望抽象係統調用或 OS 特定功能的平台,以便在 Linux、Windows、Solaris 或其他操作係統上運行容器。考慮到這些用戶,我們希望確保 containerd 隻擁有他們需要的東西,而舍棄他們不想要的東西。實際上這不太可能,但至少我們會朝這一點進行努力。

比如,網絡這樣的事情超出了 containerd 的範圍。原因是,當您構建分布式係統時,網絡是一個非常重要的方麵。隨著 SDN 和服務發現的功能,網絡更依賴於平台,而不是像 Linux 平台上抽象掉 netlink 調用那樣簡單。大多數新的覆蓋網絡都是基於路由的,並且每次創建或刪除新容器時都需要更新路由表。服務發現、DNS 等都必須同時通知這些更改。如果我們將網絡添加到 containerd,為了支持所有不同的網絡接口、鉤子和集成點,這將是非常大的一塊代碼。我們所做的是在 containerd 中選擇一個強大的事件係統,這樣多個客戶就可以訂閱他們關心的事件。我們還公開了一個任務 API,它允許用戶創建一個正在運行的任務,能夠向容器的網絡命名空間添加接口, 然後啟動容器的進程,而不必在容器的生命周期各個點上使用複雜的鉤子。

在過去幾個月中,添加到 containerd 的另一塊功能是一個完整的存儲和分發係統,支持 OCI 和 Docker 鏡像格式。通過 containerd API,有一個完整的內容尋址存儲係統,它不僅適用於鏡像,還可用於元數據、檢查點和附加到容器的任意數據。

我們還花了很多時間來重新思考 "graphdriver" 如何工作。這些是疊層或塊級文件係統,允許鏡像分層,從而使您可以執行高效的構建。Graphdriver 最初是由 Solomon 和我寫的,當時我們增加了對 devicemapper 的支持。Docker 當時隻支持 AUFS,因此我們在疊層文件係統之後設計了 graphdriver。然而,要想使一個塊級文件係統 (如 devicemapper/lvm) 像疊層文件係統那樣工作,實際上從長遠來看更加困難。接口必須隨著時間的推移而不斷擴展,以支持不同的功能,而不隻是我們最初認為需要的功能。使用 containerd,我們采取了不同的方法,使疊層文件係統運行起來更像一個快照程序,而不是反過來。由於疊層文件係統比快照文件係統 (如 BTRFS、ZFS 和 devicemapper) 提供了更大的靈活性,因為它們沒有嚴格的父/子關係,因此這樣做便容易許多。我們為快照程序構建了一個較小的接口,同時還滿足了諸如生成器之類的需求,並減少了所需的代碼量,從而更容易維護長期運行。

那麼,通過使用 containerd,您能獲得什麼?
您可以獲得 push 和 pull 功能以及鏡像管理。
您可以獲得容器生命周期 API 來創建、執行和管理容器及其任務。
您可以獲得一個完整的 API,用於快照管理。

基本上,您擁有了構建一個容器平台所需的任何事情,而無需處理底層操作係統的細節。我認為 containerd 最重要的部分是有一個版本化和穩定的 API,並且可以將缺陷修複和安全補丁應用到之前的版本。

文章轉載自:Docker官方公眾號,原文鏈接

Docker 企業版在中國由我們的戰略合作夥伴阿裏巴巴提供
聯係阿裏雲銷售人員獲取 Docker 企業版,或訪問阿裏雲市場在線購買

最後更新:2017-09-04 15:02:37

  上一篇:go  借助 Docker 企業版大幅節省 IT 預算
  下一篇:go  怡海軟件:破解ERP、CRM實施中流程梳理的問題