前言
創作背景
近幾年,隨著Kubernetes 和容器技術的崛起,雲端原生已成為當下熱門的技術話題。而Kubernetes 也毫無疑問地成為容器編排領域的事實標準。容器執行時期作為Kubernetes 執行容器的關鍵元件,承擔著管理處理程序的使命。起初Kubernetes 支援的容器執行時期是Docker,Docker client 透過程式內嵌的方式整合在kubelet 中。之後Kubernetes 重新設計了CRI 標準,使得各種容器執行時期可以透過CRI 協定連線Kubernetes。而之前透過超強程式開發形式嵌入kubelet 中的Docker client,則逐漸遷移到CRI 標準下(dockershim),並在Kubernetes 1.24 版本中被徹底移除。
CRI 支援的容器執行時期有很多,其中containerd 作為從Docker 專案中分離出來的專案,由於經歷了Docker 多年生產環境的磨煉,相比其他CRI 執行時期更加穩固、成熟。正如containerd 官網所言,「containerd 是一個工業級標準的容器執行時期,它強調簡單性、穩固性和可攜性」。
Docker 作為老牌的容器執行時期,有很多相關的書籍和資料對其介紹,而containerd 作為一個新興的容器執行時期,截至筆者著書之日,依然沒有系統介紹它的書籍。作為一名雲端原生以及容器技術的忠實粉絲,筆者很早就接觸到了containerd 專案,並見證了containerd 專案的發展,為containerd 專案取得的成就感到驕傲,也對containerd 專案充滿了信心。因此,希望透過這本書,更多的人可以了解containerd,體驗containerd 帶來的價值。
目標讀者
本書的目標讀者包括:
• 雲端原生架構師。
• 容器技術架構師。
• 研發工程師。
• 運行維護工程師。
• 雲端運算和容器技術的同好。
本書內容
本書作為一本系統介紹雲端原生容器執行時期containerd 的書,將透過深入淺出的方式一步步介紹containerd 的發展歷史、依賴的技術背景、技術架構和原理等。
本書內容共分8 章,每章的基礎知識如下。
• 第1 章:講解雲端原生與容器執行時期,介紹什麼是雲端原生,雲端原生有什麼價值,雲端原生與容器執行時期有什麼關係,以及Docker 與Kubernetes 的發展歷史等,帶讀者了解containerd 容器技術的發展與歷史。
• 第2 章:講解容器執行時期的概念,從容器技術及其發展歷史出發,為讀者介紹容器的發展史,容器所依賴的Linux 基礎,容器執行時期以及當前的容器執行時期規範等。
• 第3 章:講解如何使用containerd,內容包括containerd 的安裝和部署,以及如何透過ctr 和nerdctl 兩種cli 工具操作containerd。
• 第4 章:講解containerd 與CRI,內容包括Kubernetes 中的CRI 機制及其演進、containerd 中的CRI Plugin 架構和設定,以及CRI 使用者端工具crictl 的使用等。
• 第5 章:講解containerd 中的容器網路,主要從CNI 規範、常見的CNI網路外掛程式,以及如何在containerd 中指定容器網路建立容器等方面展開介紹。
• 第6 章:講解containerd 和容器儲存,重點介紹containerd 是如何透過snapshotter 管理容器鏡像的。
• 第7 章:講解containerd 的核心元件,對containerd 的架構進行剖析,根據containerd 架構講解組成containerd 的各個模組,如API、Core 以及Backend 層的多個模組。
• 第8 章:講解containerd 生產與實踐中的一些操作,如如何設定containerd的監控,如何基於containerd 做延伸開發等。
勘誤和支援
由於筆者水準有限,書中難免會有疏漏和不妥之處,懇請讀者們批評指正。
致謝
本書從構思、形成初稿,直到出版問世,獲得了許多人的幫助。
首先要感謝的是我的妻子對我的支援,使我有足夠的時間投入本書的寫作中,並在寫作的過程中給了我很大的鼓勵和支援。
本書的大量內容來源於我所參與的專案實踐。諸多業務合作夥伴在使用我們的容器平臺的過程中向我們提出了許多富有挑戰的問題,是他們孜孜不倦的追求,深化了我對容器技術、containerd 的理解,進而豐富了本書的內容。對此,向曾經一起合作的團隊成員表示感謝。
最後,衷心感謝清華大學出版社王秋陽老師對本書進行細緻的審閱和策劃,讓本書的架構更加完備,內容更加完整,並最終得以順利出版。
筆者