容器化技術已經成為運算模型演化的開端,Kubernetes作為Google 開放原始碼的Docker 容器叢集管理技術,在這場新的技術革命中扮演著重要的角色。Kubernetes 正在被許多知名公司及企業採用,Kubernetes 已站在容器新技術變革的浪潮之巔,將具有不可預估的發展前景和商業價值。
本書從一個開發者的角度去了解、分析和解決問題:從基礎入門到架構原理,從執行機制到開發原始程式,再從系統運行維護到應用實作,說明全面。全書圖文並茂,內容豐富,由淺入深,對基本原理說明清晰,對系統架構分析透徹,對實作經驗說明深刻。
本書作者的所有觀點和經驗,均是在多年建置、維護大型應用系統的過程中累積形成的。讀者透過書中的Kubernetes 開發指南、叢集管理等章節的內容,不僅可以直接學習到加強開發技能,還可以解決實作過程中經常遇到的各種關鍵問題。透過大量的實例操作和詳盡的原始程式解析,幫助讀者了解Kubernetes 的各種概念。
這是一本史上最詳細的Kubernetes介紹應用大全,全書重點如下:
Kubernetes基本概念及術語
完整安裝設定參數詳解
充份應用及了解Kubernetes的Pod
圍繞在Services上的Kubernetes
Kubernetes API及核心元件詳解
針對Kubernetes的叢集安全機制
Kubernetes的網路拓樸
Kubernetes的儲存原理,包括CEPH
利用REST開發Kubernetes應用程式
使用第三方軟體管理Kubernetes叢集
深入了解Kubernetes的記錄檔
對Windows容器/GPU的支援
POD的資源調度大全
適合讀者群:軟體工程師、測試工程師、運行維護工程師、軟體架構師、技術經理,或資深IT人士。
本書特色
◎Kubernetes權威指南
◎從Docker到Kubernetes全面實作
◎最詳盡的Kubernetes介紹應用大全
作者簡介:
龔正
HPE高級顧問,多年的IT從業經驗,具備豐富的雲端運算、大數據分析和大型企業級應用的架構設計和執行經驗,是電信、金融、互聯網等領域的資深專家。
吳治輝
HPE資深架構師,15年以上的軟體研發經驗,專注於電信軟體和雲端運算方面的軟體研發,擁有豐富的大型專案架構設計經驗,是業界少有具備很強Coding能力的S級資深架構師。
崔秀龍
HPE前資深架構師開源軟體、自動化愛好者,擁有十多年從業經驗,對軟體生命週期的各個環節均有深刻的理解。
閆健勇
HPE高級專案經理、總架構師,15年以上的電信產業系統建設經驗,主導多項電信大型系統的架構設計和管理,對雲端運算和大數據在電信產業中的應用擁有豐富的經驗。
作者序
前言
本書第一版出版於2016 年,幾年過去,Kubernetes 已從一個新生事物發展為一個影響全球IT 技術的基礎設施平台,也推動了雲原生應用、微服務架構、Service Mesh 等熱門技術的普及和落地。現在,Kubernetes 已經成為明星專案,其開放原始碼專案擁有超過兩萬名貢獻者,成為開放原始碼歷史上發展速度超快的專案之一。
在這幾年裡:
Kubernetes 背後的重要開放原始碼公司RedHat 被IBM 大手筆收購,使RedHat 以Kubernetes 架構為基礎的先進PaaS平台--OpenShift 成為IBM 在雲端運算基礎設施中的重要籌碼。
Kubernetes 的兩位核心創始人Joe Beda 和Craig McLuckie 所創立的提供Kubernetes 諮詢和技術支援的初創公司Heptio,也被虛擬化領域的巨頭VMware 收購。
Oracle收購丹麥一家初創公司Wercker,然後開發Click2Kube,這是針對Oracle 裸機雲(Oracle Bare Metal Cloud)的一鍵式Kubernetes 叢集安裝工具。
世界500 大中的一些大型企業也決定以Kubernetes 為基礎重構內部IT 平台架構,大數據系統的一些使用者也在努力將其生產系統從龐大的大數據專有技術堆疊中剝離出來接近Kubernetes。
Kubernetes 是將「一切以服務(Service)為中心,一切圍繞服務運轉」作為核心宗旨的創新型產品,這是它的亮點。它的功能和架構設計自始至終地遵循了這一核心宗旨,建置在Kubernetes 上的系統不僅可以獨立執行在實體機、虛擬機器叢集或企業私有雲上,也可以被託管在公有雲上。
Kubernetes 的另一個亮點是自動化。在Kubernetes 的解決方案中,一個服務可以自我擴充、自我診斷,並且容易升級,在收到服務擴充的請求後,Kubernetes 會觸發排程流程,最後在選定的目標節點上啟動對應數量的服務實例備份,這些服務實例備份在啟動成功後會自動加入負載平衡器中並生效,整個過程無須額外的人工作業。另外,Kubernetes 會定時巡查每個服務的所有實例的可用性,確保服務實例的數量始終保持為預期的數量,當它發現某個實例不可用時,會自動重新啟動該實例或在其他節點上重新排程、執行一個新實例,這樣,一個複雜的過程無須人工操作即可全部自動完成。試想一下,如果一個包含幾十個節點且執行幾萬個容器的複雜系統,其負載平衡、故障檢測和損毀修復等都需要人工介入進行處理,其工作量將多大。
一般來說我們會把Kubernetes 看作Docker 的上層架構, 就好像Java 與J2EE 的關係一樣:J2EE 是以Java 為基礎的企業級軟體架構,Kubernetes則以Docker 為基礎打造了一個雲端運算時代的全新分散式系統架構。但Kubernetes 與Docker 之間還會具有更為複雜的關係, 從表面上看, 似乎Kubernetes 離不開Docker,但實際上在Kubernetes 的架構裡,Docker 只是其目前支援的兩種底層容器技術之一,另一種容器技術則是Rocket,Rocket 為CoreOS 推出的競爭產品。
Kubernetes 之所以同時支援Docker 和Rocket 這兩種互相競爭的容器技術,是有深刻的歷史原因的。快速發展的Docker 打敗了Google 名噪一時的開放原始碼容器技術lmctfy,並迅速風靡世界。但是,作為一個已經對全球IT 公司產生重要影響的技術,Docker 容器標準的制定不可能被任何一個公司主導。於是,CoreOS 推出了與Docker 抗衡的開放原始碼容器專案Rocket,動員一些知名IT 公司一起主導容器技術的標準化,並與Google 共同發起基於CoreOS+ Rocket+Kubernetes的新專案Tectonic,使容器技術分裂局勢加劇。最後,Linux 基金會於2015 年6 月宣佈成立開放容器技術專案(Open Container Project),Google、CoreOS 及Docker 都加入了該專案。OCP 專案成立後,Docker 公司放棄了自己的獨家控制權,Docker 容器格式也被OCP採納為新標準的基礎,Docker 負責起草OCP 草案標準的初稿文件,並傳送自己的容器執行引擎的原始程式作為OCP 專案的啟動資源。
2015年7月,Google 正式宣佈加入OpenStack 陣營,目標是確保Linux容器及其連結的容器管理技術Kubernetes能夠被OpenStack 生態圈所接納,這也表示對資料中心控制層面的爭奪已經結束,以容器為代表的應用形態與以虛擬化為代表的系統形態將完美融合於OpenStack 之上,並與軟體定義網路和軟體定義儲存一起主導下一代資料中心。
Google 憑藉著幾十年大規模容器使用的豐富經驗,步步為營,先是祭出Kubernetes 這個神器,然後掌控了容器技術的制定標準,最後入駐OpenStack陣營全力支援Kubernetes 的發展。可以預測,Kubernetes 的影響力可能超過十年,所以,我們每個IT 人都有理由重視這門新技術。
誰能比別人領先一步掌握新技術,誰就能在競爭中贏得先機。慧與中國通信和媒體解決方案領域的資深專家團一起分工協作、平行研究,並廢寢忘食地合力撰寫,才促成了這部巨著的出版。經過這些年的高速發展,Kubernetes先後發佈了十幾個大版本,每個版本都帶來了大量的新功能,能夠處理的應用場景也越來越豐富。本書遵循從入門到精通的學習路線,涵蓋了入門、安裝指南、實作指南、核心原理、開發指南、運行維護指南、新特性演進等,內容翔實、圖文並茂,幾乎囊括Kubernetes 目前主流版本的各方面,無論是軟體工程師、測試工程師、運行維護工程師、軟體架構師、技術經理,還是對於資深IT 人士,本書都極具參考價值。
吳治輝
前言
本書第一版出版於2016 年,幾年過去,Kubernetes 已從一個新生事物發展為一個影響全球IT 技術的基礎設施平台,也推動了雲原生應用、微服務架構、Service Mesh 等熱門技術的普及和落地。現在,Kubernetes 已經成為明星專案,其開放原始碼專案擁有超過兩萬名貢獻者,成為開放原始碼歷史上發展速度超快的專案之一。
在這幾年裡:
Kubernetes 背後的重要開放原始碼公司RedHat 被IBM 大手筆收購,使RedHat 以Kubernetes 架構為基礎的先進PaaS平台--OpenShift 成為IBM 在雲端運算基礎設施中的重要籌碼。
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 Kubernetes 叢集的安全設定
2.5 Kubernetes 叢集的網路設定
2.6 內網中的Kubernetes 相關設定
2.7 Kubernetes 的版本升級
2.8 Kubernetes 核心服務設定詳解
2.9 CRI(容器執行時期介面)詳解
2.10 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 Headless Service
4.4 從叢集外部存取Pod 或Service
4.5 DNS 服務架設和設定指南
4.6 Ingress:HTTP 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 Kubernetes 網路策略
7.8 開放原始碼的網路元件
08|共用儲存原理
8.1 共用儲存機制概述
8.2 PV 詳解
8.3 PVC 詳解
8.4 PV 和PVC 的生命週期
8.5 StorageClass 詳解
8.6 動態儲存裝置管理實戰:GlusterFS
8.7 CSI 儲存機制詳解
09|Kubernetes 開發指南
9.1 REST 簡述
9.2 Kubernetes API 詳解
9.3 使用Java 程式存取Kubernetes API
9.4 Kubernetes API 的擴充
10|Kubernetes 叢集管理
10.1 Node 的管理
10.2 更新資源物件的Labe
10.3 Namespace:叢集環境共用與隔離
10.4 Kubernetes 資源管理
10.5 資源緊缺時的Pod 驅逐機制
10.6 Pod Disruption Budget(主動驅逐保護)
10.7 Kubernetes 叢集的高可用部署方案
10.8 Kubernetes 叢集監控
10.9 叢集統一記錄檔管理
10.10 Kubernetes 的稽核機制
10.11 使用Web UI(Dashboard)管理叢集
10.12 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 的演進路線和開發模式
前言
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 Kubernetes 叢集的安全設定
2.5 Kubernetes 叢集的網路設定
2.6 內網中的Kubernetes 相關設定
2.7 Kubernetes 的版本升級
2.8 Kubernetes 核心服務設定詳解
2.9 CRI(容器執行時期介面)詳解
2.10 kubectl 命令列工具用法詳解
03|深...