►Kubernetes 控制面與節點組件的功能與結構 ►Kubernetes API 的組、版本及資源定義 ►宣告式 API 與控制器模式的運作機制 ►Kubernetes 社區治理與貢獻開發流程 ►API Server 的結構、原理與原始碼解析 ►Kubernetes API 的屬性、方法與定義規範 ►Generic Server 與主 Server 的建構與運行邏輯 ►CRD 的定義、屬性驗證及版本轉換 ►聚合 Server 的設計、實現及功能擴展 ►聚合 Server 的部署、測試與問題排查方法 ►API Server Builder 的開發步驟與應用實例 ►使用 Kubebuilder 開發與測試 Kubernetes Operator
本書分為三大部分,從基礎概念到原始碼解析,再到實戰開發,逐步帶領讀者深入了解Kubernetes的運作原理與開發實踐。第一部分聚焦基礎知識,介紹Kubernetes的控制面與節點組件、API資源與版本管理,以及API Server的核心運作機制,包括請求過濾鏈、認證控制和控制器模式等關鍵內容,並涵蓋Kubernetes社區治理與開發流程,幫助讀者掌握如何參與開源專案。第二部分深入解析Kubernetes原始碼,涵蓋API Server的架構、命令列應用的實現,並詳細講解Generic Server與主Server的建構邏輯,包括Server啟動、配置、請求處理鏈的實現及認證控制,還探索了CRD定義、Webhook應用和API擴展的實現方法,揭示Kubernetes高度可擴展性的核心技術。第三部分則著重於實戰應用,展示如何開發聚合Server和Operator,並運用API Server Builder與Kubebuilder等工具完成從專案初始化到部署測試的完整流程,結合實際案例說明設計與實現Kubernetes自定義功能的高效方法。
毫無疑問,雲端平台已成為企業應用的主流支撐平臺,雲端原生作為可最大化雲端平台資源使用率的一套軟體設計原則備受業界推崇。談雲端原生就繞不開Kubernetes,它是雲端原生應用的底座:容器技術的普及加速了單體應用的微服務化,微服務化是實現雲端原生諸多原則的前提條件,而微服務化必須解決服務編排問題,Kubernetes 就是為了解決這個問題而生的。眾所皆知Kubernetes源自Google 內部產品,其前身已歷經大規模應用的實踐考驗,又有大廠做後盾,一經推出便勢如破竹,統一了容器編排領域,成為事實上的標準。從應用層面講解Kubernetes 的書籍與資料已經十分豐富,這使捲動更新、系統自動伸縮、系統自愈等曾經時髦的概念及在Kubernetes 上的配置方式現如今早已深入人心,但作為軟體工程師,不僅可得益於Kubernetes 提供的這些能力,同樣可受益於它內部實現這些能力的方式,理解其精髓可顯著提高工程師的業務水準,而這就鮮有除原始程式之外的優秀資料了,本書希望在一定程度上彌補這方面的缺憾。筆者選取Kubernetes 的核心元件——API Server 進行原始程式碼講解,從程式等級拆解控制器模式、認證控制機制、登入鑑權機制、API Server 聚合機制等,力爭涵蓋API Server 所有核心邏輯。為了緩解理解原始程式的枯燥感,筆者增加數章擴充開發的實踐內容,也使學習與應用相輔相成。
API Server 所應用的諸多設計實現為開發者提供了有益參考。例如控制器模式、認證控制機制、各種Webhook 機制、登入認證策略、請求過濾的實現、OpenAPI 服務說明的生成、Go 程式生成機制、以Generic Server 為底座的子Server 建構方式等。上述每項設計想法均可應用到其他專案,特別是用Go 語言開發的專案中。
知其然且知其所以然始終是做好軟體運行維護工作的有力保證。了解Kubernetes 功能的具體實現可讓運行維護人員對系統能力有更深刻的認識,提升對潛在問題的預判能力,對已出現的故障迅速定位。相較於軟體開發工程師,運行維護工程師一般不具備很強的開發能力,所以探究原始程式會比較吃力。本書有條理地帶領讀者厘清API Server 各個組件的設計,降低了原始程式閱讀的門檻。
筆者始終認為Kubernetes 最強的一面恰恰是它最被忽視的高擴充能力。根據公開報導,科技大廠(如Google、AWS、微軟、字節跳動等)均有利用這些擴充能力做適合自身平臺的客製化。目前講解API Server 客製化的資料並不系統。本書希望將API Server 的客製化途徑講解清楚:既介紹擴充機制的原始程式碼實現,又講解如何利用擴充機制進行客製化開發,希望為擴充開發人員提供相應參考。
Go 語言的使用者完全可以利用Kubernetes 專案來快速提升自己的專案能力。作為Kubernetes 中最核心也是最複雜的元件,API Server 的原始程式充分表現了Go 語言的多種最佳實踐。讀者會看到管道(channel)如何編織出複雜的Server 狀態轉換網,會看到優雅應用程式碼協同(Go Routine)的方式,也會學習到如何利用函數物件,以及諸多技術的應用方式。透過閱讀API Server 原始程式來提升自身Go 語言水準一舉多得。
本書在介紹原始程式的同時也展示了Kubernetes 的社區治理,讀者會看到這樣一個百萬人等級的社區角色如何設定,任務怎麼劃分,程式提交流程,品質保證手段。透過這些簡介,讀者可以獲得對開放原始碼專案管理的基礎,為參與其中打下基礎。如果聚焦API Server 這一較小領域,則讀者在本書的幫助下將掌握專案結構和核心程式邏輯,輔以一定量的自我學習便可參與其中。
致謝
特別感謝讀者花時間閱讀本書。本書的撰寫歷經坎坷。準備工作從2022 年便已開始,為了保證嚴謹,筆者翻閱了API Server 的所有原始檔案,讓每個基礎知識都能落實到程式並經得起推敲。寫作則貫穿2023 年一整年,這幾乎佔去了筆者工作之餘、教育兒女之外的所有閒置時間。筆者水準有限,書中仍有可能存在疏漏之處,期望讀者能給予諒解並不吝指正,感激不盡!
4 Kubernetes API ▌4.1 Kubernetes API 原始程式碼 4.1.1 內部版本和外部版本 4.1.2 API 的屬性 4.1.3 API 的方法與函數 4.1.4 API 定義與實現的約定 ▌4.2 內建 API ▌4.3 核心 API ▌4.4 程式生成 4.4.1 程式生成工作原理 4.4.2 程式生成範例 4.4.3 觸發程式生成 ▌4.5 本章小結
►Kubernetes 控制面與節點組件的功能與結構 ►Kubernetes API 的組、版本及資源定義 ►宣告式 API 與控制器模式的運作機制 ►Kubernetes 社區治理與貢獻開發流程 ►API Server 的結構、原理與原始碼解析 ►Kubernetes API 的屬性、方法與定義規範 ►Generic Server 與主 Server 的建構與運行邏輯 ►CRD 的定義、屬性驗證及版本轉換 ►聚合 Server 的設計、實現及功能擴展 ►聚合 Server 的部署、測試與問題排查方法 ►API Server Builder 的開發步驟與應用實例 ►使用 Kubebuilder 開發與測試 Kubernetes Operator
本書分為三大部分,從基礎概念到原始碼解析,再到實戰開發,逐步帶領讀者深入了解Kubernetes的運作原理與開發實踐。第一部分聚焦基礎知識,介紹Kubernetes的控制面與節點組件、API資源與版本管理,以及API Server的核心運作機制,包括請求過濾鏈、認證控制和控制器模式等關鍵內容,並涵蓋Kubernetes社區治理與開發流程,幫助讀者掌握如何參與開源專案。第二部分深入解析Kubernetes原始碼,涵蓋API Server的架構、命令列應用的實現,並詳細講解Generic Server與主Server的建構邏輯,包括Server啟動、配置、請求處理鏈的實現及認證控制,還探索了CRD定義、Webhook應用和API擴展的實現方法,揭示Kubernetes高度可擴展性的核心技術。第三部分則著重於實戰應用,展示如何開發聚合Server和Operator,並運用API Server Builder與Kubebuilder等工具完成從專案初始化到部署測試的完整流程,結合實際案例說明設計與實現Kubernetes自定義功能的高效方法。
毫無疑問,雲端平台已成為企業應用的主流支撐平臺,雲端原生作為可最大化雲端平台資源使用率的一套軟體設計原則備受業界推崇。談雲端原生就繞不開Kubernetes,它是雲端原生應用的底座:容器技術的普及加速了單體應用的微服務化,微服務化是實現雲端原生諸多原則的前提條件,而微服務化必須解決服務編排問題,Kubernetes 就是為了解決這個問題而生的。眾所皆知Kubernetes源自Google 內部產品,其前身已歷經大規模應用的實踐考驗,又有大廠做後盾,一經推出便勢如破竹,統一了容器編排領域,成為事實上的標準。從應用層面講解Kubernetes 的書籍與資料已經十分豐富,這使捲動更新、系統自動伸縮、系統自愈等曾經時髦的概念及在Kubernetes 上的配置方式現如今早已深入人心,但作為軟體工程師,不僅可得益於Kubernetes 提供的這些能力,同樣可受益於它內部實現這些能力的方式,理解其精髓可顯著提高工程師的業務水準,而這就鮮有除原始程式之外的優秀資料了,本書希望在一定程度上彌補這方面的缺憾。筆者選取Kubernetes 的核心元件——API Server 進行原始程式碼講解,從程式等級拆解控制器模式、認證控制機制、登入鑑權機制、API Server 聚合機制等,力爭涵蓋API Server 所有核心邏輯。為了緩解理解原始程式的枯燥感,筆者增加數章擴充開發的實踐內容,也使學習與應用相輔相成。
API Server 所應用的諸多設計實現為開發者提供了有益參考。例如控制器模式、認證控制機制、各種Webhook 機制、登入認證策略、請求過濾的實現、OpenAPI 服務說明的生成、Go 程式生成機制、以Generic Server 為底座的子Server 建構方式等。上述每項設計想法均可應用到其他專案,特別是用Go 語言開發的專案中。
知其然且知其所以然始終是做好軟體運行維護工作的有力保證。了解Kubernetes 功能的具體實現可讓運行維護人員對系統能力有更深刻的認識,提升對潛在問題的預判能力,對已出現的故障迅速定位。相較於軟體開發工程師,運行維護工程師一般不具備很強的開發能力,所以探究原始程式會比較吃力。本書有條理地帶領讀者厘清API Server 各個組件的設計,降低了原始程式閱讀的門檻。
筆者始終認為Kubernetes 最強的一面恰恰是它最被忽視的高擴充能力。根據公開報導,科技大廠(如Google、AWS、微軟、字節跳動等)均有利用這些擴充能力做適合自身平臺的客製化。目前講解API Server 客製化的資料並不系統。本書希望將API Server 的客製化途徑講解清楚:既介紹擴充機制的原始程式碼實現,又講解如何利用擴充機制進行客製化開發,希望為擴充開發人員提供相應參考。
Go 語言的使用者完全可以利用Kubernetes 專案來快速提升自己的專案能力。作為Kubernetes 中最核心也是最複雜的元件,API Server 的原始程式充分表現了Go 語言的多種最佳實踐。讀者會看到管道(channel)如何編織出複雜的Server 狀態轉換網,會看到優雅應用程式碼協同(Go Routine)的方式,也會學習到如何利用函數物件,以及諸多技術的應用方式。透過閱讀API Server 原始程式來提升自身Go 語言水準一舉多得。
本書在介紹原始程式的同時也展示了Kubernetes 的社區治理,讀者會看到這樣一個百萬人等級的社區角色如何設定,任務怎麼劃分,程式提交流程,品質保證手段。透過這些簡介,讀者可以獲得對開放原始碼專案管理的基礎,為參與其中打下基礎。如果聚焦API Server 這一較小領域,則讀者在本書的幫助下將掌握專案結構和核心程式邏輯,輔以一定量的自我學習便可參與其中。
致謝
特別感謝讀者花時間閱讀本書。本書的撰寫歷經坎坷。準備工作從2022 年便已開始,為了保證嚴謹,筆者翻閱了API Server 的所有原始檔案,讓每個基礎知識都能落實到程式並經得起推敲。寫作則貫穿2023 年一整年,這幾乎佔去了筆者工作之餘、教育兒女之外的所有閒置時間。筆者水準有限,書中仍有可能存在疏漏之處,期望讀者能給予諒解並不吝指正,感激不盡!
4 Kubernetes API ▌4.1 Kubernetes API 原始程式碼 4.1.1 內部版本和外部版本 4.1.2 API 的屬性 4.1.3 API 的方法與函數 4.1.4 API 定義與實現的約定 ▌4.2 內建 API ▌4.3 核心 API ▌4.4 程式生成 4.4.1 程式生成工作原理 4.4.2 程式生成範例 4.4.3 觸發程式生成 ▌4.5 本章小結