第 1章 初識Kubernetes 1
1.1 Kubernetes的背景 1
1.1.1 編排器 1
1.1.2 容器化應用 1
1.1.3 云原生應用 2
1.1.4 微服務應用 2
1.2 Kubernetes的誕生 3
1.2.1 Kubernetes和Docker 3
1.2.2 Kubernetes與Docker Swarm對比 4
1.2.3 Kubernetes和Borg:抵抗是徒勞的 5
1.2.4 Kubernetes—名字從何而來 5
1.3 云操作系統(tǒng) 6
1.3.1 云的規(guī)?!?
1.3.2 應用的調度 7
1.3.3 一個簡單的模擬 7
1.4 總結 7
第 2章 Kubernetes操作概覽 9
2.1 Kubernetes概覽 9
2.1.1 作為集群的Kubernetes 9
2.1.2 作為編排器的Kubernetes 10
2.1.3 Kubernetes是如何工作的 11
2.2 主節(jié)點與工作節(jié)點 12
2.2.1 主節(jié)點(控制平面) 12
2.2.2 工作節(jié)點 15
2.3 Kubernetes DNS 17
2.4 Kubernetes的應用打包 17
2.5 聲明式模型與期望狀態(tài) 18
2.6 Pod 20
2.6.1 Pod與容器 20
2.6.2 Pod深度剖析 21
2.6.3 調度單元 22
2.6.4 原子操作單位 22
2.6.5 Pod的生命周期 22
2.7 Deployment 23
2.8 服務與穩(wěn)定的網絡 23
2.9 總結 26
第3章 安裝Kubernetes 27
3.1 Kubernetes練習環(huán)境 27
3.2 托管的Kubernetes環(huán)境 27
3.3 自定義Kubernetes集群 28
3.4 安裝Kubernetes 28
3.5 Play with Kubernetes 28
3.6 桌面版Docker 31
3.7 Google Kubernetes引擎(GKE) 32
3.8 其他安裝方法 34
3.9 kubectl 34
3.10 總結 36
第4章 Pod的使用 37
4.1 Pod原理 37
4.1.1 Pod和容器 38
4.1.2 多容器Pod:典型示例 38
4.1.3 如何部署Pod 39
4.1.4 “解剖”Pod 40
4.1.5 Pod與共享網絡 40
4.1.6 Pod與CGroup 42
4.1.7 Pod的原子部署 42
4.1.8 Pod的生命周期 42
4.1.9 小結 43
4.2 Pod實戰(zhàn) 43
4.2.1 Pod清單文件 44
4.2.2 清單文件:共情即代碼 45
4.2.3 基于清單文件部署Pod 46
4.2.4 查看運行中的Pod 46
4.2.5 kubectl describe 48
4.2.6 kubectl exec:在Pod中執(zhí)行命令 49
4.2.7 kubectl logs 50
4.3 總結 50
第5章 Kubernetes Deployment 51
5.1 Deployment原理 51
5.1.1 自愈和擴縮容 52
5.1.2 使用Deployment進行滾動升級 54
5.1.3 回滾 56
5.2 如何創(chuàng)建一個Deployment 56
5.2.1 查看Deployment 58
5.2.2 訪問該應用 59
5.3 執(zhí)行滾動升級 60
5.4 執(zhí)行回滾操作 63
5.5 總結 64
第6章 Kubernetes Service 65
6.1 要點前瞻 65
6.2 原理 66
6.2.1 Label與松耦合 67
6.2.2 Service和Endpoint對象 69
6.2.3 從集群內部訪問Service 70
6.2.4 從集群外部訪問Service 70
6.2.5 服務發(fā)現 72
6.2.6 小結 72
6.3 Service實戰(zhàn) 73
6.3.1 命令式 73
6.3.2 聲明式 76
6.4 實例 79
6.5 總結 81
第7章 服務發(fā)現 82
7.1 快速入門 82
7.2 服務注冊 83
7.2.1 服務后端 85
7.2.2 小結 86
7.3 服務發(fā)現 86
7.3.1 使用集群DNS將名稱解析為IP地址 87
7.3.2 網絡“黑科技” 88
7.3.3 小結 89
7.4 服務發(fā)現與命名空間 90
7.5 服務發(fā)現問題排查 96
7.6 總結 98
第8章 Kubernetes存儲 99
8.1 概述 99
8.2 存儲提供者 101
8.3 容器存儲接口(CSI) 101
8.4 Kubernetes持久化卷子系統(tǒng) 101
8.5 存儲類和動態(tài)置備 107
8.5.1 存儲類YAML 108
8.5.2 多個存儲類 109
8.5.3 實現存儲類 109
8.6 示例 111
8.6.1 清理 111
8.6.2 創(chuàng)建一個存儲類 112
8.6.3 創(chuàng)建一個PVC 113
8.6.4 清理 114
8.6.5 使用默認的StorageClass 115
8.7 總結 115
第9章 ConfigMap 116
9.1 概述 116
9.1.1 簡單的例子 117
9.1.2 例子分析 117
9.1.3 解耦的世界 117
9.2 ConfigMap原理 118
9.2.1 ConfigMap如何工作 119
9.2.2 ConfigMap與Kubernetes原生應用 120
9.3 ConfigMap實戰(zhàn) 120
9.3.1 命令式創(chuàng)建ConfigMap 120
9.3.2 查看ConfigMap 122
9.3.3 聲明式創(chuàng)建ConfigMap 123
9.3.4 將ConfigMap數據注入Pod和容器 125
9.4 總結 129
第 10章 StatefulSet 130
10.1 StatefulSet原理 130
10.1.1 StatefulSet中Pod的命名 131
10.1.2 按序創(chuàng)建和刪除 132
10.1.3 刪除StatefulSet 133
10.1.4 卷 133
10.1.5 故障處理 134
10.1.6 網絡ID和headless Service 134
10.2 StatefulSet實戰(zhàn) 135
10.2.1 部署StorageClass 135
10.2.2 創(chuàng)建一個governing headless Service 136
10.2.3 部署StatefulSet 137
10.2.4 測試點對點發(fā)現 140
10.2.5 StatefulSet擴縮容 141
10.2.6 執(zhí)行滾動升級 143
10.2.7 模擬Pod故障 143
10.2.8 刪除StatefulSet 145
10.3 總結 145
第 11章 安全模型分析 146
11.1 安全模型 146
11.2 偽裝 146
11.2.1 與API Server的安全通信 147
11.2.2 Pod間的安全通信 147
11.3 篡改 149
11.3.1 對Kubernetes組件的篡改 149
11.3.2 對運行在Kubernetes中的應用的篡改 150
11.4 抵賴 151
11.5 信息泄露 153
11.5.1 保護集群數據 153
11.5.2 保護Pod中的數據 153
11.6 拒絕服務 154
11.6.1 保護集群資源免于DoS攻擊 154
11.6.2 保護API Server防范DoS攻擊 155
11.6.3 保護集群存儲防范DoS攻擊 155
11.6.4 保護應用組件防范DoS攻擊 156
11.7 提升權限 157
11.7.1 保護API Server 157
11.7.2 保護Pod 158
11.8 Pod安全策略 162
11.9 Kubernetes安全展望 164
11.10 總結 164
第 12章 現實中Kubernetes的安全性 165
12.1 CI/CD流水線 165
12.1.1 鏡像倉庫 165
12.1.2 使用已驗證的基礎鏡像 166
12.1.3 非標準基礎鏡像 167
12.1.4 控制鏡像的訪問權限 167
12.1.5 從非生產庫復制鏡像到生產庫 168
12.1.6 漏洞掃描 168
12.1.7 配置即代碼 169
12.1.8 鏡像簽名 169
12.1.9 鏡像晉升工作流 170
12.2 基礎設施與網絡 170
12.2.1 集群層負載隔離 170
12.2.2 節(jié)點隔離 172
12.2.3 運行時隔離 172
12.2.4 網絡隔離 173
12.3 身份認證與訪問控制管理(IAM) 176
12.4 審計與安全監(jiān)控 177
12.4.1 安全配置 177
12.4.2 容器與Pod的生命周期事件 178
12.4.3 應用的日志 178
12.4.4 用戶執(zhí)行的操作 178
12.4.5 管理日志數據 179
12.4.6 遷移現有App到Kubernetes 179
12.5 現實例子 179
12.6 總結 180
術語表 181
延伸 184