基于Kubernetes的云原生DevOps(第二版)
Justin Domingus, John Arundel
马晶慧 译
出版时间:2023年12月
页数:381
“这是一本新手宝典。内容丰富,从技术的角度客观地介绍了Kubernetes,同时展示了具体的使用方法。”
——Adam McPartlan
NYnet的安全经理和高级系统工程师

Kubernetes是云原生世界的操作系统,为运行容器化的工作负载提供了可靠、可伸缩的平台。这本实用教程充分地向你展示了Kubernetes的主要功能,以及Kubernetes的使用方法。
在本书,我们将带领你了解不断发展的Kubernetes生态系统,并针对当前使用软件工具时遇到的日常问题,提供实用的解决方案。你将逐步学习如何在Kubernetes中运行容器化的应用程序,学习如何构建应用程序的开发环境以及持续部署流水线,并探索可用于自己的应用程序的模式。你将学习如何在Kubernetes和开发运维的帮助下,打造精简、快速且高效的开发团队。
● 学习容器和Kubernetes的基本知识,无需任何经验。
● 在托管的云Kubernetes服务或本地环境中运行应用程序。
● 设计自己的云原生服务与基础设施。
● 通过Kubernetes管理资源的使用和容器的生命周期。
● 从成本、性能、弹性、容量和可伸缩性等方面优化集群。
● 学习开发、测试和部署应用程序的最佳工具。
● 应用可观察性与监控方面的最新行业实践。
● 保证生产环境中容器与集群的安全。
  1. 第一版序
  2. 前言
  3. 第1章 云革命
  4. 1.1 云的诞生
  5. 1.1.1 购买时间
  6. 1.1.2 基础设施即服务
  7. 1.2 开发运维拉开序幕
  8. 1.2.1 改善反馈循环
  9. 1.2.2 开发运维的含义
  10. 1.2.3 基础设施即代码
  11. 1.2.4 共同学习
  12. 1.3 容器的到来
  13. 1.3.1 最先进的技术
  14. 1.3.2 箱子带来的启发
  15. 1.3.3 将软件放入容器中
  16. 1.3.4 即插即用的应用程序
  17. 1.4 容器的编排
  18. 1.5 Kubernetes
  19. 1.5.1 从Borg到Kubernetes
  20. 1.5.2 Kubernetes成功的原因
  21. 1.5.3 Kubernetes会消失吗?
  22. 1.5.4 Kubernetes并非万能
  23. 1.6 云原生
  24. 1.7 运维的未来
  25. 1.7.1 分布式开发运维
  26. 1.7.2 有些系统仍然是中心式
  27. 1.7.3 开发人员生产力工程
  28. 1.7.4 你就是未来
  29. 1.8 小结
  30. 第2章 Kubernetes简介
  31. 2.1 运行第一个容器
  32. 2.1.1 安装Docker桌面版
  33. 2.1.2 什么是Docker?
  34. 2.1.3 运行容器镜像
  35. 2.2 演示应用程序
  36. 2.2.1 查看源代码
  37. 2.2.2 Go简介
  38. 2.2.3 演示应用程序的原理
  39. 2.3 建立容器
  40. 2.3.1 了解Dockerfile
  41. 2.3.2 最低限度的容器镜像
  42. 2.3.3 运行Docker image build
  43. 2.3.4 命名镜像
  44. 2.3.5 端口转发
  45. 2.4 容器仓库
  46. 2.4.1 镜像仓库的身份验证
  47. 2.4.2 命名和推送镜像
  48. 2.4.3 运行镜像
  49. 2.5 Kubernetes入门
  50. 2.5.1 运行演示应用
  51. 2.5.2 如果容器无法启动
  52. 2.6 Minikube
  53. 2.7 小结
  54. 第3章 获取Kubernetes
  55. 3.1 集群架构
  56. 3.1.1 控制平面
  57. 3.1.2 节点组件
  58. 3.1.3 高可用性
  59. 3.2 自托管Kubernetes的成本
  60. 3.2.1 超出预期的工作量
  61. 3.2.2 不仅仅是初始设置
  62. 3.2.3 不能完全依赖工具
  63. 3.2.4 Kubernetes the Hard Way
  64. 3.2.5 Kubernetes很难
  65. 3.2.6 管理费用
  66. 3.2.7 从托管服务开始
  67. 3.3 托管Kubernetes服务
  68. 3.3.1 Google Kubernetes Engine(GKE)
  69. 3.3.2 集群自动伸缩
  70. 3.3.3 Autopilot
  71. 3.3.4 亚马逊的Elastic Container Service for Kubernetes(EKS)
  72. 3.3.5 Azure Kubernetes Service(AKS)
  73. 3.3.6 IBM Cloud Kubernetes Service
  74. 3.3.7 DigitalOcean Kubernetes
  75. 3.4 Kubernetes安装程序
  76. 3.4.1 kops
  77. 3.4.2 Kubespray
  78. 3.4.3 kubeadm
  79. 3.4.4 Rancher Kubernetes Engine(RKE)
  80. 3.4.5 Puppet Kubernetes模块
  81. 3.5 买还是构建:我们的建议
  82. 3.5.1 运行更少软件
  83. 3.5.2 尽可能使用托管Kubernetes
  84. 3.5.3 如何应对提供商锁定呢?
  85. 3.5.4 裸金属与内部服务器
  86. 3.5.5 多云Kubernetes集群
  87. 3.5.6 OpenShift
  88. 3.5.7 Anthos
  89. 3.5.8 根据需要使用标准的Kubernetes自托管工具
  90. 3.6 无集群容器服务
  91. 3.6.1 AWS Fargate
  92. 3.6.2 Azure Container Instances(ACI)
  93. 3.6.3 谷歌Cloud Run
  94. 3.7 小结
  95. 第4章 Kubernetes对象
  96. 4.1 部署
  97. 4.1.1 监督与调度
  98. 4.1.2 重启容器
  99. 4.1.3 创建部署
  100. 4.2 Pod
  101. 4.3 副本集
  102. 4.4 维持所需状态
  103. 4.5 Kubernetes调度器
  104. 4.6 YAML格式的资源清单
  105. 4.6.1 资源就是数据
  106. 4.6.2 部署清单
  107. 4.6.3 使用kubectl apply
  108. 4.6.4 服务资源
  109. 4.6.5 使用kubectl查询集群
  110. 4.6.6 资源的高级使用方式
  111. 4.7 Helm:Kubernetes包管理器
  112. 4.7.1 安装Helm
  113. 4.7.2 安装Helm Chart
  114. 4.7.3 Chart、Repository与Release
  115. 4.7.4 查看Helm Release
  116. 4.8 小结
  117. 第5章 资源管理
  118. 5.1 了解资源
  119. 5.1.1 资源单位
  120. 5.1.2 资源请求
  121. 5.1.3 资源约束
  122. 5.1.4 服务质量
  123. 5.2 管理容器的生命周期
  124. 5.2.1 存活探针
  125. 5.2.2 探针延迟及频率
  126. 5.2.3 其他类型的探针
  127. 5.2.4 就绪探针
  128. 5.2.5 启动探针
  129. 5.2.6 gRPC探针
  130. 5.2.7 基于文件的就绪探针
  131. 5.2.8 minReadySeconds
  132. 5.2.9 Pod中断预算
  133. 5.3 命名空间
  134. 5.3.1 命名空间的使用
  135. 5.3.2 应该使用哪些命名空间?
  136. 5.3.3 服务地址
  137. 5.3.4 资源配额
  138. 5.3.5 默认资源请求和约束
  139. 5.4 优化集群的成本
  140. 5.4.1 Kubecost
  141. 5.4.2 优化部署
  142. 5.4.3 优化Pod
  143. 5.4.4 Pod垂直自动伸缩
  144. 5.4.5 优化节点
  145. 5.4.6 优化存储
  146. 5.4.7 清理未使用的资源
  147. 5.4.8 检查备用容量
  148. 5.4.9 使用预留实例
  149. 5.4.10 抢占式(Spot)实例
  150. 5.4.11 保持工作负载平衡
  151. 5.5 小结
  152. 第6章 集群运维
  153. 6.1 集群的规模与伸缩
  154. 6.1.1 容量规划
  155. 6.1.2 节点与实例
  156. 6.1.3 集群伸缩
  157. 6.2 一致性检查
  158. 6.2.1 CNCF认证
  159. 6.2.2 Sonobuoy一致性测试
  160. 6.2.3 Kubernetes审计日志
  161. 6.3 混乱测试
  162. 6.3.1 生产环境是无法复制的
  163. 6.3.2 Chaoskube
  164. 6.3.3 kube-monkey
  165. 6.3.4 PowerfulSeal
  166. 6.4 小结
  167. 第7章 强大的Kubernetes工具
  168. 7.1 掌握kubectl
  169. 7.1.1 Shell别名
  170. 7.1.2 使用缩写标志
  171. 7.1.3 缩写资源类型
  172. 7.1.4 自动补齐kubectl命令
  173. 7.1.5 获取帮助
  174. 7.1.6 获取有关Kubernetes资源的帮助
  175. 7.1.7 显示更详细的输出
  176. 7.1.8 使用JSON数据和jq
  177. 7.1.9 监视对象
  178. 7.1.10 描述对象
  179. 7.2 处理资源
  180. 7.2.1 命令式的kubectl命令
  181. 7.2.2 何时不应该使用命令式的命令
  182. 7.2.3 生成资源清单
  183. 7.2.4 导出资源
  184. 7.2.5 对比资源
  185. 7.3 处理容器
  186. 7.3.1 查看容器的日志
  187. 7.3.2 附加到容器
  188. 7.3.3 利用kubespy监视Kubernetes资源
  189. 7.3.4 转发容器端口
  190. 7.3.5 在容器上执行命令
  191. 7.3.6 用于故障排除的容器
  192. 7.3.7 BusyBox命令
  193. 7.3.8 将BusyBox添加到容器
  194. 7.3.9 在容器上安装程序
  195. 7.4 上下文与命名空间
  196. 7.4.1 kubeconfig文件
  197. 7.4.2 kubectx与kubens
  198. 7.4.3 kube-ps1
  199. 7.5 Kubernetes shell与工具
  200. 7.5.1 kube-shell
  201. 7.5.2 Click
  202. 7.5.3 Kubed-sh
  203. 7.5.4 Stern
  204. 7.6 Kubernetes IDE
  205. 7.6.1 Lens
  206. 7.6.2 VS Code的Kubernetes扩展
  207. 7.7 构建自己的Kubernetes工具
  208. 7.8 小结
  209. 第8章 运行容器
  210. 8.1 容器与Pod
  211. 8.1.1 什么是容器?
  212. 8.1.2 Kubernetes中的容器运行时
  213. 8.1.3 容器中有什么?
  214. 8.1.4 Pod中有什么?
  215. 8.2 容器清单
  216. 8.2.1 镜像标识符
  217. 8.2.2 latest标签
  218. 8.2.3 容器摘要
  219. 8.2.4 基础镜像标签
  220. 8.2.5 端口
  221. 8.2.6 资源请求和约束
  222. 8.2.7 镜像拉取策略
  223. 8.2.8 环境变量
  224. 8.3 容器安全
  225. 8.3.1 以非root用户身份运行容器
  226. 8.3.2 阻止Root容器
  227. 8.3.3 设置只读文件系统
  228. 8.3.4 禁用权限升级
  229. 8.3.5 能力
  230. 8.3.6 Pod安全上下文
  231. 8.3.7 Pod服务账号
  232. 8.4 卷
  233. 8.4.1 emptyDir卷
  234. 8.4.2 持久卷
  235. 8.5 重启策略
  236. 8.6 ImagePullSecret
  237. 8.7 初始化容器
  238. 8.8 小结
  239. 第9章 管理Pod
  240. 9.1 标签
  241. 9.1.1 什么是标签?
  242. 9.1.2 选择器
  243. 9.1.3 高级选择器
  244. 9.1.4 标签的其他用途
  245. 9.1.5 标签与注释
  246. 9.2 节点亲和性
  247. 9.2.1 硬亲和性
  248. 9.2.2 软亲和性
  249. 9.3 Pod的亲和性与反亲和性
  250. 9.3.1 将Pod调度到一起
  251. 9.3.2 分开Pod
  252. 9.3.3 软反亲和性
  253. 9.3.4 何时使用Pod亲和性
  254. 9.4 污点与容忍
  255. 9.5 Pod控制器
  256. 9.5.1 守护进程集
  257. 9.5.2 状态集
  258. 9.5.3 作业
  259. 9.5.4 定时作业
  260. 9.5.5 Pod水平自动伸缩器
  261. 9.5.6 操作器与自定义资源定义(CRD)
  262. 9.6 Ingress资源
  263. 9.6.1 Ingress控制器
  264. 9.6.2 Ingress规则
  265. 9.6.3 通过Ingress终止TLS
  266. 9.7 服务网格
  267. 9.7.1 Istio
  268. 9.7.2 Linkerd
  269. 9.7.3 Consul Connect
  270. 9.7.4 NGINX服务网格
  271. 9.8 小结
  272. 第10章 配置与Secret
  273. 10.1 ConfigMap
  274. 10.1.1 创建ConfigMap
  275. 10.1.2 利用ConfigMap设置环境变量
  276. 10.1.3 利用ConfigMap设置整个环境
  277. 10.1.4 使用环境变量指定命令的参数
  278. 10.1.5 利用ConfigMap创建配置文件
  279. 10.1.6 配置发生变化后更新Pod
  280. 10.2 Kubernetes Secret
  281. 10.2.1 利用Secret设置环境变量
  282. 10.2.2 将Secret写入文件
  283. 10.2.3 读取Secrest
  284. 10.2.4 Secret的访问权
  285. 10.2.5 静态加密
  286. 10.2.6 防止Secret和ConfigMap被修改
  287. 10.3 Secret管理策略
  288. 10.3.1 在版本控制中加密机密
  289. 10.3.2 使用专业的机密管理工具
  290. 10.4 使用Sops加密机密数据
  291. 10.4.1 使用Sops加密文件
  292. 10.4.2 使用KMS后端
  293. 10.5 Sealed Secrets
  294. 10.6 小结
  295. 第11章 安全、备份与集群健康
  296. 11.1 访问控制与权限
  297. 11.1.1 按集群管理访问权限
  298. 11.1.2 基于角色的访问控制(RBAC)
  299. 11.1.3 角色
  300. 11.1.4 将角色绑定到用户
  301. 11.1.5 我需要哪些角色?
  302. 11.1.6 保护集群管理员的权限
  303. 11.1.7 应用程序与部署
  304. 11.1.8 RBAC故障排除
  305. 11.2 集群的安全扫描
  306. 11.2.1 Gatekeeper/OPA
  307. 11.2.2 kube-bench
  308. 11.2.3 Kubescape
  309. 11.3 容器安全扫描
  310. 11.3.1 Clair
  311. 11.3.2 Aqua
  312. 11.3.3 Anchore Engine
  313. 11.3.4 Synk
  314. 11.4 备份
  315. 11.4.1 Kubernetes需要备份吗?
  316. 11.4.2 备份etcd
  317. 11.4.3 备份资源状态
  318. 11.4.4 备份集群状态
  319. 11.4.5 大小灾害
  320. 11.4.6 Velero
  321. 11.5 监视集群状态
  322. 11.5.1 Kubectl
  323. 11.5.2 CPU和内存利用率
  324. 11.5.3 云提供商控制台
  325. 11.5.4 Kubernetes仪表板
  326. 11.5.5 Weave Scope
  327. 11.5.6 kube-ops-view
  328. 11.5.7 node-problem-detector
  329. 11.6 延伸阅读
  330. 11.7 小结
  331. 第12章 部署Kubernetes应用程序
  332. 12.1 使用Helm构建清单
  333. 12.1.1 Helm Chart包含什么?
  334. 12.1.2 Helm模板
  335. 12.1.3 插值变量
  336. 12.1.4 引用模板中的值
  337. 12.1.5 指定依赖项
  338. 12.2 部署Heml Chart
  339. 12.2.1 设置变量
  340. 12.2.2 在Helm Release中指定值
  341. 12.2.3 使用Helm更新应用程序
  342. 12.2.4 回滚到以前的版本
  343. 12.2.5 创建Helm Chart库
  344. 12.2.6 使用Sops管理Helm Chart的机密数据
  345. 12.3 使用Helmfile管理多个Chart
  346. 12.3.1 Helmfile中有什么?
  347. 12.3.2 Chart元数据
  348. 12.3.3 应用Helmfile
  349. 12.4 高级清单管理工具
  350. 12.4.1 kustomize
  351. 12.4.2 Tanka
  352. 12.4.3 Kapitan
  353. 12.4.4 kompose
  354. 12.4.5 Ansible
  355. 12.4.6 kubeval
  356. 12.5 小结
  357. 第13章 开发流程
  358. 13.1 开发工具
  359. 13.1.1 Skaffold
  360. 13.1.2 Telepresence
  361. 13.1.3 Waypoint
  362. 13.1.4 Knative
  363. 13.1.5 OpenFaaS
  364. 13.1.6 Crossplane
  365. 13.2 部署策略
  366. 13.2.1 滚动更新
  367. 13.2.2 重建
  368. 13.2.3 maxSurge和maxUnavailable
  369. 13.2.4 蓝绿部署
  370. 13.2.5 彩虹部署
  371. 13.2.6 金丝雀部署
  372. 13.3 使用Helm处理迁移
  373. 13.3.1 Helm的钩子
  374. 13.3.2 处理失败的钩子
  375. 13.3.3 其他钩子
  376. 13.3.4 钩子链
  377. 13.4 小结
  378. 第14章 Kubernetes的持续部署
  379. 14.1 什么是持续部署?
  380. 14.2 CD工具
  381. 14.3 托管CI/CD工具
  382. 14.3.1 Azure流水线
  383. 14.3.2 谷歌云构建
  384. 14.3.3 Codefresh
  385. 14.3.4 GitHub Actions
  386. 14.3.5 GitLab CI
  387. 14.4 自托管CI/CD工具
  388. 14.4.1 Jenkins
  389. 14.4.2 Drone
  390. 14.4.3 Tekton
  391. 14.4.4 Concourse
  392. 14.4.5 Spinnaker
  393. 14.4.6 Argo
  394. 14.4.7 Keel
  395. 14.5 谷歌云构建的CD流水线
  396. 14.5.1 设置谷歌云和GKE
  397. 14.5.2 分叉demo代码库
  398. 14.5.3 创建 Artifact Registry容器存储库
  399. 14.5.4 配置云构建
  400. 14.5.5 构建测试容器
  401. 14.5.6 运行测试
  402. 14.5.7 构建应用程序容器
  403. 14.5.8 替换变量
  404. 14.5.9 Git SHA标签
  405. 14.5.10 验证Kubernetes清单
  406. 14.5.11 发布镜像
  407. 14.5.12 创建第一个构建触发器
  408. 14.5.13 测试触发器
  409. 14.5.14 利用CI/CD流水线部署
  410. 14.5.15 创建部署触发器
  411. 14.5.16 调整示例流水线
  412. 14.6 GitOps
  413. 14.7 小结
  414. 第15章 可观察性与监控
  415. 15.1 什么是可观察性?
  416. 15.1.1 什么是监控?
  417. 15.1.2 黑盒监控
  418. 15.1.3 “正常”指什么?
  419. 15.1.4 日志
  420. 15.1.5 指标
  421. 15.1.6 跟踪
  422. 15.1.7 可观察性
  423. 15.2 可观察性流水线
  424. 15.3 Kubernetes中的监控
  425. 15.3.1 外部的黑盒检查
  426. 15.3.2 内部健康检查
  427. 15.4 小结
  428. 第16章 Kubernetes的指标
  429. 16.1 什么是指标?
  430. 16.1.1 时间序列数据
  431. 16.1.2 计数器和计量器
  432. 16.1.3 指标可以告诉我们什么?
  433. 16.2 选择指标
  434. 16.2.1 服务:RED模式
  435. 16.2.2 资源:USE模式
  436. 16.2.3 业务指标
  437. 16.2.4 Kubernetes指标
  438. 16.3 分析指标
  439. 16.3.1 简单的平均值有什么问题?
  440. 16.3.2 均值、中位数和离群值
  441. 16.3.3 百分位数
  442. 16.3.4 将百分位数应用于指标数据
  443. 16.3.5 最坏的情况
  444. 16.3.6 比百分位数更好的方式
  445. 16.4 通过仪表板显示指标的图表
  446. 16.4.1 所有服务都使用相同的标准布局
  447. 16.4.2 利用主仪表板构建信息发射源
  448. 16.4.3 在仪表板上显示故障
  449. 16.5 根据指标发出警报
  450. 16.5.1 警报有什么问题?
  451. 16.5.2 值班不应该成为地狱
  452. 16.5.3 紧急、重大且需要付诸行动的警报
  453. 16.5.4 跟踪警报、工作时间外的呼叫
  454. 16.6 指标工具和服务
  455. 16.6.1 Prometheus
  456. 16.6.2 谷歌的 Operations Suite
  457. 16.6.3 AWS Cloudwatch
  458. 16.6.4 Azure Monitor
  459. 16.6.5 Datadog
  460. 16.6.6 New Relic
  461. 16.7 小结
  462. 后记
书名:基于Kubernetes的云原生DevOps(第二版)
译者:马晶慧 译
国内出版社:中国电力出版社
出版时间:2023年12月
页数:381
书号:978-7-5198-8382-9
原版书书名:Cloud Native DevOps with Kubernetes, 2nd Edition
原版书出版商:O'Reilly Media
Justin Domingus
 
Justin Domingus是CareZone.com的开发运维工程师,专门从事Kubernetes和云计算。
 
 
John Arundel
 
John Arundel是一位顾问和作家,拥有30多年计算机行业的从业经验。他为全世界各大公司提供有关Kubernetes、云,以及基础设施的咨询。
 
 
本书封面的动物是一只阿岛军舰鸟(学名:Fregata aquila,英文名:Ascension Frigatebird),这种海鸟分布在南大西洋的阿森松岛和附近的水手长鸟岛上,大约在安哥拉和巴西之间。这种鸟类的繁殖地是阿森松岛(Ascension Island),这个小岛被发现那天是基督教日历上的耶稣升天节(Ascension Day),所以该岛因此而得名。
阿岛军舰鸟翼展超过2米,但体重不足1.25公斤,可以毫不费力地在海洋上滑行,捕捉到游近水面的鱼,尤其是飞鱼。有时也以鱿鱼和小乌龟为食,还会掠夺其他海鸟。阿岛军舰鸟全身黑色且有光泽,略带绿色和紫色。成年雄鸟喉囊呈鲜红色,求偶期会鼓胀。成年雌鸟毛色略暗,下侧有褐色或白色的斑点。和其他军舰鸟一样,阿岛军舰鸟有深叉形尾巴,嘴尖弯曲,尖翅显著。
阿岛军舰鸟觅食于阿森松岛顶峰的裸露岩层。这种鸟类不会筑巢,它们会在地上挖洞,并用羽毛、鹅卵石和骨头做保护。雌鸟每次产卵一枚,然后由双亲喂食至六七个月,直到学会飞翔。由于繁殖成功率低且栖息地有限,因此该物种被列入了易危物种。
19世纪早期,英国人出于军事目的而定居在阿森松岛上。如今,该岛上有美国国家航空航天局(NASA)和欧洲航天局(European Space Agency)的观测基地,英国广播公司(BBC)世界服务站的中继站,同时这里也是GPS四大地面卫星监控站之一。在19世纪和20世纪期间,由于流浪猫捕杀雏鸟,因此阿岛军舰鸟只能在阿森松海岸外的水手长鸟岛上繁殖。2002年,英国皇家鸟类保护协会在岛上发起了一场消灭野猫的运动。几年后,阿岛军舰鸟又开始在阿森松岛上筑巢。
O’Reilly出版的图书,封面上很多动物都濒临灭绝。这些动物都是地球的至宝。如果你想知道如何保护这些动物,请访问animals.oreilly.com。
购买选项
定价:128.00元
书号:978-7-5198-8382-9
出版社:中国电力出版社