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