全方位Kubernetes權威指南
多年累積精華內容,涵蓋最新特性、應用★專業推薦中國移動資訊技術中心研發創新中心(平台能力共用中心)副總經理 張春
【本書內容】Kubernetes是由Google開源的容器集群管理系統,為容器化應用提供了資源調度、部署運行、服務發現、擴縮容等一系列功能。Kubernetes也是將「一切以服務(Service)為中心,一切圍繞服務運轉」作為指導思想的創新型產品,它的功能和架構設計自始至終地遵循了這一指導思想。構建在Kubernetes上的系統不僅可以獨立運行在物理機、虛擬機集群或者企業私有雲上,也可以被託管在公有雲上。
本書總計12章,分別講解Kubernetes的基本概念、實踐指南、核心原理、開發指南、網路與儲存、運行維護指南、新特性演進等內容,在生產環境中可能出現的問題,舉出了大量典型案例,比如安全設定方案、網路方案、共用儲存方案、高可用方案及Trouble Shooting技巧等,具有很強的實戰指導意義。
本書的內容也隨著Kubernetes的版本更新不斷完善,目前涵蓋了Kubernetes從1.0到1.19版本的主要特性,努力為Kubernetes使用者提供全方位的Kubernetes技術指南。
【適合讀者群】本書目標讀者範圍很廣,有些大專院校也採用了本書作為參考教材。
考慮到Kubernetes的技術定位,以下讀者適合購買和閱讀本書:
.資深IT從業者
.研發部門主管
.架構師(語言不限)
.研發工程師(經驗不限)
.運行維護工程師(經驗不限)
.軟體QA和測試工程師(兩年以上經驗)
.以技術為主的售前工作人員(兩年以上經驗)
作者簡介:
龔正
HPE高級顧問,從事IT工作20餘年,在雲端運算、大數據、大型企業級應用等領域有豐富的諮詢規劃、架構設計和實施經驗,負責過多個大型雲平台的規劃和建設,是電信、金融、互聯網等領域的資深專家,也是《Kubernetes權威指南:企業級容器雲實戰》等書的作者。
吳治輝
HPE資深架構師,從事軟體研發工作20餘年,專注於電信軟體和雲端運算方面的軟體研發,有豐富的大型專案架構設計經驗,是業界少有的具備很強編程能力的資深架構師,也是《ZeroC Ice權威指南》《架構解密:從分佈式到微服務》《Kubernetes權威指南:企業級容器雲實戰》《區塊鏈輕鬆上手》等書的作者。
閆健勇
HPE高級專案經理、總架構師,從事電信行業系統建設工作20餘年,主導了多項電信大型系統的架構設計和管理,對雲端運算和大數據在電信產業中的應用有豐富的經驗,也是《Kubernetes權威指南:企業級容器雲實戰》等書的作者。
推薦序
中國移動資訊技術中心研發創新中心(平台能力共用中心)副總經理 張春
經過作者們多年的實踐經驗累積及長期以來的持續更新,本書終於和我們見面了。我有幸作為首批讀者,提前學習了這本雲端運算技術領域的經典大作。
這一次的版本修訂,增加了很多Kubernetes新特性介紹,幾乎每一章都有較多的內容補充和更新。本版的章節結構繼承了上一版的整體編排順序和風格,以方便讀者閱讀。在我看來,本書的內容非常全面:從概念和基礎入門到架構原理,從運行機制到開發原始程式,再從系統運行維護到應用實踐,都有全面、細緻的講解。本書圖文並茂、內容豐富、由淺入深,對基本原理闡述清晰,對系統架構分析透徹,對實踐經驗講解深刻,充分講解了Kubernetes的核心技術原理和實現,是學習Kubernetes技術的必備書籍,也是一本非常值得閱讀的書。
本書非常值得閱讀的原因還有以下幾點。
首先,本書作者都在雲端運算行業深耕十年以上,擁有大量豐富的最前線實踐經驗。書中的觀點和經驗,均是由本書作者在多年建設、維護大型應用系統的實踐過程中累積而成的,具有很高的操作性和普適性。透過學習書中的Kubernetes開發指南、叢集管理等內容,讀者不僅可以提高個人的開發技能,還可以解決在實踐過程中經常遇到的各種問題。然後,本書透過大量的實例操作來幫助讀者深刻理解Kubernetes中的各種概念和技能。例如,書中介紹了使用Java存取Kubernetes API的例子,讀者在結合自己的實際應用需求對其稍做調整和設定修改後,就可以將這些方法用於正在開發的項目中,達到事半功倍的效果。這對有一定Java基礎的專業人士快速學習Kubernetes的各種細節和實踐操作十分有利,能夠幫助開發者節省大量的時間。
再次,為了讓初學者快速入門,本書在技術語言中穿插了大量的圖表和應用場景範例,以案例、流程、圖示等多種方式幫助讀者加深理解。隨著企業數位化轉型的深入,為雲端而生的雲端原生架構和思想已被大量企業所接受。容器雲、微服務、DevOps、Serverless已成為企業實踐雲端原生的關鍵技術,而Kubernetes作為容器雲的核心基礎和事實標準,已成為當今網際網路企業和傳統IT企業的雲端基礎設施要素,例如中國移動、Google、VMware、華為、阿里巴巴、騰訊、京東等。Kubernetes站在了容器新技術變革的浪潮之巔,將具有不可估量的發展前景和商業價值。
無論您是技術經理、架構師、以技術為主的售前工作人員、網紅講師、開發人員、運行維護人員,還是對容器技術有興趣的讀者,本書都能為您提供很好的幫助,讓您受益匪淺!
中國移動資訊技術中心研發創新中心(平台能力共用中心)副總經理 張春
經過作者們多年的實踐經驗累積及長期以來的持續更新,本書終於和我們見面了。我有幸作為首批讀者,提前學習了這本雲端運算技術領域的經典大作。
這一次的版本修訂,增加了很多Kubernetes新特性介紹,幾乎每一章都有較多的內容補充和更新。本版的章節結構繼承了上一版的整體編排順序和風格,以方便讀者閱讀。在我看來,本書的內容非常全面:從概念和基礎入門到架構原理,從運行機制到開發原始程式,再從系統運行維護到應用實踐,都有全面、細緻的講解。本書圖文並...
作者序
【前言】
▍為什麼寫作本書
從2016年至今,短短幾年,Kubernetes已從一個新生事物發展成為一個影響全球IT技術的基礎設施平台,成功推動了雲端原生應用、微服務架構、Service Mesh、Serverless等熱門技術的普及和實作,一躍成為雲端原生應用的全球級基礎平台。現在,Kubernetes已經成為軟體基礎設施領域中耀眼的明星項目,在GitHub上已有超過兩萬名開放原始碼志願者參與此專案,成為開放原始碼歷史上發展速度超快的專案之一。
在這幾年裡:
.Kubernetes背後的重要開放原始碼公司RedHat被IBM大手筆收購,使RedHat Kubernetes架構的先進PaaS平台——OpenShift成為IBM在雲端運算基礎設施中的重要籌碼。
.Kubernetes的兩位核心創始人Joe Beda和Craig McLuckie所創立的提供Kubernetes諮詢和技術支援的初創公司Heptio也被虛擬化領域的巨頭VMware收購,VMware決定全力擁抱Kubernetes,而且計畫直接以Kubernetes為底層核心重新打造全新版的vSphere。
.Oracle收購了丹麥的一家初創公司Wercker,然後開發了Click2Kube,這是面向Oracle裸金屬雲端(Oracle Bare Metal Cloud)的一鍵式Kubernetes叢集安裝工具。
.世界500大中的一些大型企業也決定以Kubernetes為基礎重構內部IT平台架構,巨量資料系統的一些使用者也在努力將其生產系統從龐大的巨量資料專有技術堆疊中剝離出來靠近Kubernetes。
Google憑藉幾十年大規模容器應用的豐富經驗,首次投入大量人力、財力來開放原始碼並主導了Kubernetes這個重要的開放原始碼專案。可以預測,Kubernetes的影響力可能超過數十年,所以,我們每個IT人都有理由重視這門新技術。當年,通訊和媒體解決方案領域的資深專家團一起分工合作、並行研究,並廢寢忘食地合力撰寫,才促成了這部巨著的出版。當然,這部巨著也對Kubernetes的普及和推廣產生了巨大的推動作用。
▍本書結構
這些年,Kubernetes高速發展,先後發佈了十幾個大版本,每個版本都帶來了大量的新特性,能夠處理的應用場景也越來越豐富。本書遵循從入門到精通的學習路線,涵蓋了入門、安裝指南、實踐指南、核心原理、開發指南、網路與儲存、運行維護指南、新特性演進等內容,內容翔實、圖文並茂,幾乎囊括了Kubernetes 當前主流版本的各方面。
.第1章
首先從一個簡單的實例開始,讓讀者透過動手實踐來感受Kubernetes的強大能力;然後講解Kubernetes的概念、術語。考慮到Kubernetes的概念、術語繁多,所以特別從它們的用途及相互關係入手來講解,以期初學者能快捷、全面、準確、深刻地理解這部分內容。
.第2章
圍繞Kubernetes的安裝和設定展開講解。如果要在生產級應用中部署Kubernetes,則建議讀者將本章內容全部實戰一遍;如果不是,則可以選擇部分內容實戰,比較重要的是Kubernetes的命令列部分,對這部分越熟練,後面進行研發或運行維護就越輕鬆。
.第3~4章
對於大部分讀者來說,都是很關鍵的內容,也是學會Kubernetes應用建模的關鍵章節。第3章全面、深入地講解了Pod的各方面,其中非常有挑戰性的是Pod排程這部分內容,它也是生產實踐中相當實用的知識和技能。第4章圍繞Service展開深入講解,涉及相關的服務發現、DNS及Ingress等高級特性。
.第5章
對Kubernetes的運行機制和原理進行全面、深入的講解,透過對API Server、Controller、Scheduler、kubelet、kube-proxy等幾個核心處理程式的作用、原理、實現方式等進行深入講解,可以讓讀者加深對Kubernetes的認知,所以建議讀者全面閱讀本章內容。
.第6章
專門講解Kubernetes安全方面的內容,因為內容比較複雜,所以涉及的基礎知識也較多,建議讀者選擇性閱讀和動手實踐本章內容。
.第7章
講解Kubernetes相對複雜的內容之一——網路部分,涉及的知識面相對較廣,包括Kubernetes網路模型、Docker網路基礎、Service虛擬網路、CNI網路模型、開放原始碼容器網路方案、Kubernetes網路策略及IPv4、IPv6雙堆疊協定等內容,學習曲線和理解曲線都較陡。建議讀者多花時間鑽研,因為網路也屬於容器領域裡很重要的基礎知識。
.第8章
講解Kubernetes儲存方面的內容,動態儲存裝置管理實戰部分的內容對於Kubernetes企業應用實踐很有價值,建議讀者動手實踐完成這部分內容。
.第9章
是為程式設計師特別準備的,該章以Java(未來會增加Go語言)為例舉例說明如何透過程式設計方式呼叫Kubernetes的API,這也是開發基於Kubernetes的PaaS管理平台的重要基礎技能之一。
.第10~12章
偏重於講解Kubernetes運行維護方面的技能和知識,包括Windows上的Kubernetes部署、安裝等內容,建議需要在生產環境中部署Kubernetes的讀者全面閱讀並動手實踐這幾章的內容。
【前言】
▍為什麼寫作本書
從2016年至今,短短幾年,Kubernetes已從一個新生事物發展成為一個影響全球IT技術的基礎設施平台,成功推動了雲端原生應用、微服務架構、Service Mesh、Serverless等熱門技術的普及和實作,一躍成為雲端原生應用的全球級基礎平台。現在,Kubernetes已經成為軟體基礎設施領域中耀眼的明星項目,在GitHub上已有超過兩萬名開放原始碼志願者參與此專案,成為開放原始碼歷史上發展速度超快的專案之一。
在這幾年裡:
.Kubernetes背後的重要開放原始碼公司RedHat被IBM大手筆收購,使RedHat Kubernetes架構的先...
目錄
01 Kubernetes入門
1.1 了解Kubernetes
1.2 為什麼要用Kubernetes
1.3 從一個簡單的例子開始
1.4 Kubernetes的基本概念和術語
02 Kubernetes安裝設定指南
2.1 系統要求
2.2 使用kubeadm工具快速安裝Kubernetes叢集
2.3 以二進位檔案方式安裝Kubernetes安全高可用叢集
2.4 使用私有鏡像倉庫的相關設定
2.5 Kubernete的版本升級
2.6 CRI(容器執行時期介面)詳解
2.7 kubectl命令列工具用法詳解
03 深入掌握Pod
3.1 Pod定義詳解
3.2 Pod的基本用法
3.3 靜態Pod
3.4 Pod容器共用Volume
3.5 Pod的設定管理
3.6 在容器內獲取Pod資訊(Downward API)
3.7 Pod生命週期和重新啟動策略
3.8 Pod健康檢查和服務可用性檢查
3.9 玩轉Pod排程
3.10 Init Container(初始化容器)
3.11 Pod的升級和導回
3.12 Pod的容量調整
3.13 使用StatefulSet架設MongoDB叢集
04 深入掌握Service
4.1 Service定義詳解
4.2 Service的概念和原理
4.3 DNS服務架設和設定指南
4.4 Node本地DNS快取
4.5 Pod的DNS域名相關特性
4.6 Ingress 7層路由機制
05 核心元件的執行機制
5.1 Kubernetes API Server原理解析
5.2 Controller Manager原理解析
5.3 Scheduler原理解析
5.4 kubelet執行機制解析
5.5 kube-proxy執行機制解析
06 深入分析叢集安全機制
6.1 API Server認證管理
6.2 API Server授權管理
6.3 Admission Control
6.4 Service Account
6.5 Secret私密證書
6.6 Pod安全性原則
07 網路原理
7.1 Kubernetes網路模型
7.2 Docker網路基礎
7.3 Docker的網路實現
7.4 Kubernetes的網路實現
7.5 Pod和Service網路實戰
7.6 CNI 網路模型
7.7 開放原始碼容器網路方案
7.8 Kubernetes的網路策略
7.9 Kubernetes對IPv4和IPv6雙堆疊的支援
08 儲存原理和應用
8.1 Kubernetes儲存機制概述
8.2 持久卷冊(Persistent Volume)詳解
8.3 動態儲存裝置管理實戰:GlusterFS
8.4 CSI儲存機制詳解
09 Kubernetes開發指南
9.1 REST簡述
9.2 Kubernetes API詳解
9.3 使用Fabric8存取Kubernetes API
9.4 Kubernetes API的擴充
10 Kubernetes運行維護管理
10.1 Node管理
10.2 更新資源物件的Label
10.3 Namespace:叢集環境共用與隔離
10.4 Kubernetes資源管理
10.5 資源緊缺時的Pod驅逐機制
10.6 Pod Disruption Budget(主動驅逐保護)
10.7 Kubernetes叢集監控
10.8 Kubernetes叢集日誌管理
10.9 Kubernetes的稽核機制
10.10 使用Web UI(Dashboard)管理叢集
10.11 Helm:Kubernetes應用套件管理工具
11 Trouble Shooting指南
11.1 查看系統Event
11.2 查看容器日誌
11.3 查看Kubernetes服務日誌
11.4 常見問題
11.5 尋求幫助
12 Kubernetes開發中的新功能
12.1 對Windows容器的支援
12.2 對GPU的支援
12.3 Pod的垂直容量調整
12.4 Kubernetes生態系統與演進路線
A Kubernetes核心服務設定詳解
A.1 公共設定參數
A.2 kube-apiserver啟動參數
A.3 kube-controller-manager啟動參數
A.4 kube-scheduler啟動參數
A.5 kubelet啟動參數
A.6 kube-proxy啟動參數
01 Kubernetes入門
1.1 了解Kubernetes
1.2 為什麼要用Kubernetes
1.3 從一個簡單的例子開始
1.4 Kubernetes的基本概念和術語
02 Kubernetes安裝設定指南
2.1 系統要求
2.2 使用kubeadm工具快速安裝Kubernetes叢集
2.3 以二進位檔案方式安裝Kubernetes安全高可用叢集
2.4 使用私有鏡像倉庫的相關設定
2.5 Kubernete的版本升級
2.6 CRI(容器執行時期介面)詳解
2.7 kubectl命令列工具用法詳解
03 深入掌握Pod
3.1 Pod定義詳解
3.2 Pod的基本用法
3.3 靜態Pod
3.4 Pod容器共用Volume
3.5 Pod的設定管理
3.6 在容器內...