內容簡介
Docker的流行激活了一直不溫不火的 PaaS,隨之而來的是各類 Micro-PaaS的出現,Kubernetes是其中最具代表性的一員,它是 Google多年大規模容器管理技術的開源版本。越來越多的企業被迫面對網際網路規模所帶來的各類難題,而 Kubernetes以其優秀的理念和設計正在逐步形成新的技術標準,對於任何領域的運營總監、架構師和軟體工程師來說,都是一個絕佳的突破機會。《Kubernetes實戰》以理論加實戰的模式,結合大量案例由淺入深地講解了 Kubernetes的各個方面,包括平台架構、基礎核心功能、網路、安全和資源管理以及整個生態系統的組成,旨在幫助讀者全面深入地掌握 Kubernetes+Docker的底層技術堆疊。
目錄
第 1部分 Kubernetes基礎篇
第 1章 Kubernetes介紹 ......................................... 2
1.1為什麼會有 Kubernetes ................................................. 2
1.1.1雲計算大潮 . 2
1.1.2不溫不火的 PaaS ............................................... 5
1.1.3 Docker的逆襲 .................................................... 5
1.2 Kubernetes 是什麼 . 7
1.3 Kubernetes的發展歷史 ................................................. 8
1.4 Kubernetes的核心概念 ................................................. 9
1.4.1 Pod ............... 9
1.4.2 Replication Controller ......................................... 9
1.4.3 Service ......... 9
1.4.4 Label ............ 9
1.4.5 Node ............. 9
第 2章 Kubernetes的架構和部署 ......................... 10
2.1 Kubernetes的架構和組件 ........................................... 10
2.2 部署 Kubernetes .... 13
2.2.1環境準備 ... 14
2.2.2 運行 Etcd ... 15
2.2.3 獲取 Kubernetes發布包 .................................. 16
2.2.4 運行 Kubernetes Master組件 .......................... 16
2.2.5 運行 Kubernetes Node組件 ............................. 17
2.2.6 查詢 Kubernetes的健康狀態 .......................... 18
2.2.7 創建 Kubernetes覆蓋網路 .............................. 19
2.3 安裝 Kubernetes擴展外掛程式 .......................................... 22
2.3.1 安裝 Cluster DNS............................................. 23
2.3.2 安裝 Cluster Monitoring ................................... 28
2.3.3 安裝 Cluster Logging ....................................... 36
2.3.4 安裝 Kube UI ................................................... 43
第 3章 Kubernetes快速入門 ................................ 46
3.1示例套用 Guestbook .................................................... 46
3.2準備工作 ............... 47
3.3 運行 Redis ............. 48
3.3.1 創建 Redis Master Pod ..................................... 48
3.3.2 創建 Redis Master Service ............................... 49
3.3.3 創建 Redis Slave Pod ....................................... 51
3.3.4 創建 Redis Slave Service ................................. 53
3.4 運行 Frontend ........ 54
3.4.1 創建 Frontend Pod ............................................ 54
3.4.2 創建 Frontend Service...................................... 57
3.5 設定 Guestbook外網訪問 ........................................... 57
3.6 清理 Guestbook ..... 59
第 4章 Pod .... 60
4.1國際慣例的 Hello World .............................................. 60
4.2 Pod的基本操作 .... 62
4.2.1 創建 Pod .... 62
4.2.2 查詢 Pod .... 62
4.2.3 刪除 Pod .... 65
4.2.4 更新 Pod .... 65
4.3 Pod與容器 ............ 65
4.3.1 鏡像 ........... 66
4.3.2啟動命令 ... 69
4.3.3環境變數 ... 70
4.3.4 連線埠 ........... 72
4.3.5
數據持久化和共享 .......................................... 73
4.4 Pod的網路 ............ 74
4.5 Pod的重啟策略 .... 75
4.6 Pod的狀態和生命周期 ............................................... 77
4.6.1容器狀態 ... 77
4.6.2 Pod的生命周期階段 ....................................... 78
4.6.3生命周期回調函式 .......................................... 79
4.7自定義檢查 Pod .... 81
4.7.1 Pod的健康檢查 ............................................... 83
4.7.2 Pod的準備狀況檢查 ....................................... 84
4.8 調度 Pod ................ 85
4.9問題定位指南 ....... 87
4.9.1事件查詢 ... 88
4.9.2日誌查詢 ... 88
4.9.3 Pod的臨終遺言 ............................................... 89
4.9.4遠程連線容器 .................................................. 90
第 5章 Replication Controller................................ 92
5.1持續運行的 Pod .... 92
5.2 Pod模板 ................ 94
5.3 Replication Controller和 Pod的關聯 .......................... 96
5.4彈性伸縮 ............... 99
5.5自動伸縮 ............. 101
5.6滾動升級 ............. 104
5.7 Deployment .......... 107
5.8一次性任務的 Pod ..................................................... 112
第 6章 Service .................................................... 114
6.1 Service代理 Pod . 114
6.2 Service的虛擬 IP 118
6.3服務代理 ............. 119
6.4服務發現 ............. 123
6.4.1環境變數 . 124
6.4.2 DNS ......... 125
6.5 發布 Service ........ 128
6.5.1 NodePort Service ............................................ 128
6.5.2 LoadBalancer Service..................................... 129
6.5.3 Ingress ...... 130
第 7章 數據卷 ..................................................... 134
7.1 Kubernetes數據卷 ..................................................... 134
7.2本地數據卷 ......... 135
7.2.1 EmptyDir . 135
7.2.2 HostPath ... 136
7.3網路數據卷 ......... 137
7.3.1 NFS .......... 137
7.3.2 iSCSI ........ 138
7.3.3 GlusterFS . 140
7.3.4 RBD(Ceph Block Device)......................... 141
7.3.5 Flocker ..... 142
7.3.6 AWS Elastic Block Store................................ 143
7.3.7 GCE Persistent Disk ....................................... 144
7.4 Persistent Volume和 Persistent Volume Claim.......... 145
7.4.1 創建 Persistent Volume ................................... 147
7.4.2 創建 Persistent Volume Claim ........................ 149
7.5信息數據卷 ......... 151
7.5.1 Secret ....... 151
7.5.2 Downward API ............................................... 153
7.5.3 Git Repo ... 155
第 8章 訪問 Kubernetes API ............................... 157
8.1 API對象與元數據 ..................................................... 157
8.2如何訪問 Kubernetes API.......................................... 159
8.3使用命令行工具 kubectl ............................................ 160
8.3.1 配置 Kubeconfig............................................. 161
8.3.2 Kubernetes操作 ............................................. 163
8.3.3 API對象操作 ................................................. 164
8.3.4 Pod操作 .. 168
8.3.5 Replication Controller操作 ............................ 169
8.3.6 Service操作 ................................................... 170
第 2部分 Kubernetes高級篇
第 9章 Kubernetes網路 ..................................... 172
9.1 Docker網路模型 . 172
9.2 Kubernetes網路模型 ................................................. 173
9.3容器間通信 ......... 174
9.4 Pod間通信 .......... 176
9.4.1 Flannel實現 Kubernetes覆蓋網路 ............... 177
9.4.2 使用 Open vSwitch實現 Kubernetes覆蓋網路 ................................................... 180
9.5 Service到 Pod通信 ................................................... 183
9.5.1 Userspace模式 ............................................... 184
9.5.2 Iptables模式 ................................................... 186
第 10章 Kubernetes安全 ................................... 189
10.1 Kubernetes安全原則 ............................................... 189
10.2 Kubernetes API的安全訪問 .................................... 189
10.2.1 HTTPS . 190
10.2.2認證與授權 ................................................ 191
10.2.3 準入控制 Admission Controller................. 194
10.3 Service Account . 195
10.3.1 使用默認 Service Account ......................... 196
10.3.2創建自定義 Service Account ..................... 199
10.3.3 Service Account添加 Image Pull Secret .... 201
10.4容器安全 ........... 202
10.4.1 Linux Capability ......................................... 202
10.4.2 SELinux ...................................................... 204
10.5 多租戶 ............... 204
第 11章 Kubernetes資源管理 ............................ 206
11.1 Kubernetes資源模型 ............................................... 206
11.2資源請求和限制 207
11.3 Limit Range ....... 210
11.4 Resource Quota.. 215
第 12章 管理和運維 Kubernetes ......................... 219
12.1 Daemon Pod ....... 219
12.1.1 Static Pod .................................................... 219
12.1.2 Daemon Set ................................................ 221
12.2 Kubernetes的高可用性 ........................................... 222
12.3平台監控 ........... 224
12.3.1 cAdvisor ..................................................... 224
12.3.2 Heapster ...................................................... 228
12.4平台日誌 ........... 230
12.5垃圾清理 ........... 234
12.5.1 鏡像清理 .................................................... 235
12.5.2 容器清理 .................................................... 235
12.6 Kubernetes的 Web界面 .......................................... 235
第 3部分 Kubernetes生態篇
第 13章 CoreOS ................................................. 240
13.1 CoreOS介紹 ..... 240
13.2 CoreOS工具鏈 . 241
13.2.1 Etcd ...... 241
13.2.2 Flannel . 241
13.2.3 Rocket .. 241
13.2.4 Systemd ...................................................... 241
13.2.5 Fleet ..... 241
13.3 CoreOS實踐 ..... 242
13.3.1 安裝 CoreOS .............................................. 242
13.3.2 使用 CoreOS運行 Kubernetes .................. 245
第 14章 Etcd 247
14.1 Etcd介紹 ........... 247
14.2 Etcd的結構 .............................................................. 248
14.2.1 Client-to-Server .......................................... 249
14.2.2 Peer-to-Peer ................................................ 250
14.3 Etcd實踐 ........... 250
14.3.1 運行 Etcd .................................................... 250
14.3.2 Etcd集群化 ................................................ 251
14.3.3 Etcd Proxy模式 ......................................... 258
14.3.4 Etcd的安全模式 ........................................ 259
第 15章 Mesos ................................................... 262
15.1 Mesos介紹 ........ 262
15.2 Mesos的架構 .... 263
15.3 Marathon和 K8SM介紹 ......................................... 264
15.3.1 Marathon..................................................... 264
15.3.2 K8SM .. 265
15.4 Mesos實踐 ........ 266
15.4.1 運行 Mesos ................................................. 266
15.4.2 運行 Marathon ............................................ 268
15.4.3 運行 K8SM ................................................ 270
作者簡介
吳龍輝 網宿科技雲計算架構師,負責雲平台的設計和研發工作。活躍於CloudFoundry、Docker、Kubernetes等開源社區,致力於雲計算PaaS的研究,擁有豐富的雲計算實踐經驗。
媒體評論
容器技術的發展帶來新變革,這也是DockOne.io社區創立的重要因素。在這個新技術的交流平台中,對於Kubernetes的討論是非常活躍的。本書是一本理論與實踐密切結合的書籍,作者有著豐富的實戰經驗,無論是初學者還是資深用戶,都能夠從書中獲取知識與技能。相信這本書能在推動Kubernetes在國內的發展中起到重要作用!
——DockOne.io發起人 李穎傑
如果IaaS是雲的
第一次世界大戰,那么PaaS即將迎來雲的
第二次世界大戰。IaaS單純改變基礎設施資源的供給方式,PaaS將全面變革IT開發和運維的生產流程。本書詳細介紹了第三代PaaS代表技術之一的Kubernetes,深入淺出,值得一讀。
容器無疑是下一個技術熱點,容器相關的圖書也出了不少,但是這些書中側重原理及代碼的較多,側重實踐性的比較稀缺。《Kubernetes實戰》這本書填補了這方面的空白。技術在生產環境落地才能帶來收益,目前許多公司正在如火如荼地推行容器技術,《Kubernetes實戰》這本書出現得非常及時,相信通過這本書精湛的理論講述及豐富的案例,可以讓大家少走許多彎路。
——《深度實踐KVM》作者 肖力
Kubernetes作為優秀的開源容器集群管理系統從出現後便備受青睞,IT巨頭的支持,架構師的實踐,讓Kubernetes不斷完善並快速成長。本書結合實戰案例系統地講解了Kubernetes的方方面面,從基礎架構到生態系統,有助於快速掌握Kubernetes並運用到實踐中,推薦閱讀。
——網宿CDN運維總監 吳振永
作為Google系的開源軟體,Kubernetes在開源之時就備受關注。InfoQ也在很早之前就開始向社區普及推廣Kubernetes的架構和實踐。本書就Kubernetes的架構、組件、網路、套用等內容做了詳細介紹,先從為什麼有Kubernetes開始,接著講它是什麼,以及如何使用,由淺入深,漸入佳境,推薦閱讀。
——InfoQ主編 郭蕾
在當前雲計算這股PaaS攻占IaaS的大潮流中,輕量級容器技術以及輕量級雲平台,已然成為絕對的主角。其實單從技術上說,理解
Docker容器不難,而要將網路、存儲、調度、大規模多實例的套用管理及微服務框架統一在一起,則需要一個非常優秀的架構。Kubernetes作為Google多年大規模容器管理技術的開源版,非常值得大家學習借鑑。本書不僅可以作為Kubernetes入門的優秀指導,更難能可貴的是,它對於涉及的特定概念及操作細節都描述得非常細緻,可以有效地解決實際使用中遇到的問題,非常適合作為Kubernetes的使用手冊常備。在這裡也希望該書可以引導讀者更深一步地去開發構建最適合自己的雲平台。
前言
隨著網際網路技術在各領域的廣泛套用,所產生的海量數據催生了大數據的誕生。而對於數據中心的需求激活了雲計算井噴式的發展,一時間大數據和雲計算成為各個企業爭奪的戰略高地。
在雲計算領域的服務模式中,IaaS和 SaaS模式已經趨於成熟,因此 PaaS就成了全球各大 IT巨頭和初創公司的焦點,其中的競爭異常激烈。大量的 PaaS平台出現,又很快被淘汰,整個行業發生著巨大的疊代更替。正所謂物競天擇,在這樣一個激盪變化的背景下,以 Docker為代表的容器技術脫穎而出並極速發熱,風頭無兩,大多數主流雲廠商已經宣布提供對 Docker及其生態系統的支持。容器技術具備融合 DevOps的敏捷特性,給雲計算市場特別是 PaaS市場帶來了新的變革力量, Kubernetes就是新一輪變革中產生的一個代表性產品。
Kubernetes是 Google開源的容器集群管理系統,它對於容器運行時、編排、常規服務都抽象設計出了準確完整的 API,並以此建立起一個開放開源的系統,符合企業化需求,每家企業都可以以此搭建出自動化和標準化的底層平台,以最佳化研發和運營效率。 Kubernetes可以說是 Google藉助著容器領域的爆發,對於其巨大規模數據中心管理的豐富經驗的一次實踐,旨在建立新的技術業界標準。
展望未來,我們認為將有更多的企業被迫面對網際網路規模所帶來的各類難題, Kubernetes和 Docker技術可以提供應對這些挑戰的解決方案。而隨著更多企業的加入,會有更多的人以協作方式構建出更強大的技術堆疊和更多的創新成果,整個行業將朝著更好的方向持續邁進,對此我們樂觀其成。
本書特點
本書採用的是理論加實戰的模式,結合大量案例由淺入深講解 Kubernetes的各個方面,包括平台架構、基礎核心功能、網路、安全和資源管理,以及整個生態系統的組成。技術信息完全來源於 Kubernetes開源社區的文檔、代碼的提煉和總結。本書涉及的 Kubernetes內容與官方昀新版本同步,包含昀新版本的所有新特性說明,並且因為 Kubernetes同 Docker深度集成,所以本書也會闡述 Docker相關的技術話題。
本書的讀者對象
本書適用於希望學習和使用 Kubernetes以及正在尋找管理數據中心解決方案的軟體工程師和架構師,同時本書可以作為 Docker的高級延伸書籍,用於搭建基於 Kubernetes+Docker的
PaaS平台,實踐 DevOps。
本書的組織結構
本書在組織結構上分成三部分:Kubernetes基礎篇、 Kubernetes高級篇和 Kubernetes生態篇。基礎篇可幫助讀者認識 Kubernetes,並理解其架構和核心概念,同時能夠部署和使用 Kubernetes完成基本功能操作。高級篇將深入講解 Kubernetes的網路、安全和資源管理等話題,幫助讀者掌握管理 Kubernetes的能力。生態篇則介紹與 Kubernetes密切相關的開源軟體,包括 CoreOS、Etcd和 Mesos,使讀者對於 Kubernetes生態系統有全面的了解。