内容简介
本书是管理大规模容器编排的大师级读物,涵盖了所有最新的Kubernetes功能、工具和弃用内容。在本书中,四位在分布式系统、企业应用开发和开源领域有着丰富经验的Kubernetes专家对使用 Kubernetes 容器编排系统构建应用进行了全程指导。本书内容丰富,涵盖开发者工作流、监控和度量指标、配置管理、持续集成和测试、版本控制与发布、应用程序的全球化部署、资源管理、网络、Pod安全、集群策略与治理、多集群管理、外部服务集成、机器学习、在Kubernetes上构建高层应用的模式、状态管理和有状态应用、准入控制与授权、GitOps、安全性、混沌测试、实现Operator等,是一本非常全面的实践指南。
目录
目录
前言1
第1章 搭建一个基本服务7
1.1 应用程序概览 7
1.2 管理配置文件7
1.3 使用Deployment创建多副本服务9
1.3.1 镜像管理的最佳实践9
1.3.2 创建多副本应用程序10
1.4 为HTTP流量配置外部Ingress12
1.5 使用ConfigMap配置应用程序13
1.6 使用Secret管理认证14
1.7 部署简单的有状态数据库17
1.8 使用Service创建TCP负载均衡器20
1.9 使用Ingress将流量路由到静态文件服务器21
1.10 使用Helm将你的应用程序参数化23
1.11 部署服务的最佳实践25
1.12 本章小结25
第2章 开发者工作流26
2.1 目的26
2.2 搭建开发环境集群 27
2.3 为多个开发者搭建共享集群 28
2.3.1 添加用户 28
2.3.2 创建和保护命名空间31
2.3.3 管理命名空间32
2.3.4 集群级服务33
2.4 启用开发者工作流34
2.4.1 环境初始化34
2.4.2 启动开发35
2.4.3 启动测试与调试35
2.5 搭建开发环境的最佳实践36
2.6 本章小结37
第3章 监控和日志38
3.1 指标与日志38
3.2 监控技术38
3.3 监控模式39
3.4 Kubernetes 指标概述40
3.4.1 cAdvisor40
3.4.2 Metrics Server40
3.4.3 kube-state-metrics41
3.5 我应该监控哪些指标42
3.6 监控工具43
3.7 使用Prometheus监控Kubernetes45
3.8 日志概述48
3.9 日志工具50
3.10 使用Loki-Stack记录日志50
3.11 告警53
3.12 监控、日志和告警的最佳实践54
3.12.1 监控54
3.12.2 日志55
3.12.3 告警55
3.13 本章小结55
第4章 配置、Secret和RBAC 56
4.1 通过ConfigMap和Secret配置应用56
4.1.1 ConfigMap56
4.1.2 Secret57
4.2 ConfigMap和Secret API的通用最佳实践58
4.3 Secret 特定的最佳实践62
4.4 RBAC63
4.4.1 RBAC入门64
4.4.2 RBAC最佳实践65
4.5 本章小结66
第5章 持续集成、测试和部署67
5.1 版本控制68
5.2 持续集成68
5.3 测试68
5.4 容器构建69
5.5 为容器镜像打标签70
5.6 持续部署70
5.7 部署策略71
5.8 生产环境中的测试74
5.9 搭建流水线并进行混沌实验76
5.9.1 搭建CI76
5.9.2 搭建CD79
5.9.3 执行滚动升级79
5.9.4 简单的混沌实验79
5.10 CI/CD的最佳实践80
5.11 本章小结81
第6章 版本控制、发布和上线82
6.1 版本控制82
6.2 发布83
6.3 上线83
6.4 综合示例84
6.5 版本控制、发布以及上线的最佳实践 87
6.6 本章小结88
第7章 全球化应用的分发和预演89
7.1 镜像的分发89
7.2 参数化部署91
7.3 全球流量负载均衡91
7.4 可靠的全球化上线91
7.4.1 上线前验证92
7.4.2 金丝雀区域94
7.4.3 识别区域类型95
7.4.4 进行全球上线96
7.5 如何应对出现的问题96
7.6 全球化上线的最佳实践97
7.7 本章小结98
第8章 资源管理99
8.1 Kubernetes Scheduler99
8.1.1 预选99
8.1.2 优选100
8.2 高级调度技术101
8.2.1 Pod的亲和性和反亲和性101
8.2.2 nodeSelector102
8.2.3 污点和容忍102
8.3 Pod资源管理104
8.3.1 资源请求104
8.3.2 资源限制和Pod服务质量105
8.3.3 PodDisruptionBudget106
8.3.4 使用命名空间管理资源108
8.3.5 ResourceQuota109
8.3.6 LimitRange110
8.3.7 集群的扩缩容111
8.3.8 应用程序的扩缩容112
8.3.9 通过HPA进行扩缩容113
8.3.10 自定义指标的 HPA114
8.3.11 Pod垂直自动伸缩114
8.4 资源管理的最佳实践115
8.5 本章小结115
第9章 网络、网络安全与服务网格116
9.1 Kubernetes的网络原则116
9.2 网络插件117
9.2.1 Kubenet118
9.2.2 Kubenet最佳实践118
9.2.3 CNI插件119
9.2.4 CNI最佳实践120
9.3 Kubernetes中的Service120
9.3.1 ClusterIP服务类型121
9.3.2 NodePort服务类型122
9.3.3 ExternalName服务类型122
9.3.4 LoadBalancer 服务类型 123
9.3.5 Ingress和Ingress控制器124
9.3.6 Gateway API126
9.3.7 Service和Ingress控制器的最佳实践128
9.4 网络安全策略128
9.5 网络策略的最佳实践130
9.6 服务网格132
9.7 服务网格的最佳实践1
前言/序言
前言
目标读者
Kubernetes是云原生开发的事实标准。它是一个功能强大的工具,可以使应用程序开发 更容易、部署更快、运行更可靠。但是,只有正确使用Kubernetes才能发挥它最大的价值。本书的目标读者是那些需要将应用程序部署到Kubernetes,以及有兴趣学习可应用于在Kubernetes上构建的应用程序的模式和实践的人员。
需要注意的是,本书并不是Kubernetes的入门指南。我们假设你对Kubernetes API和工具有基本的了解,并且知道如何创建 Kubernetes集群并与之交互。如果你想学习Kubernetes的基础知识,可以找到很多优秀的资源,例如 Kubernetes: Up and Running (O’Reilly)。
本书面向的是那些想要深入了解如何在Kubernetes 上部署特定应用程序和工作负载的 人。无论你是刚准备将第一个应用程序部署到 ubernetes,还是已经使用Kubernetes多年,本书都会对你有帮助。
为什么写这本书
我们对如何帮助人们将应用程序部署到Kubernetes有着丰富的经验。基于这些经验,我们清楚地知道人们的痛点在哪里,可以帮助他们找到成功之道。在编写本书时,我们试 图总结这些经验,以便更多的人可以学习在实践中积累的知识。同时,我们希望能够将这些经验记录下来并且传播出去,使人们能够独立地在Kubernetes上成功地部署和管理 应用程序。
本书概览
很可能你会一口气就把整本书从头到尾浏览完,但这并不是我们真正希望的。相反,我们将本书设计成一个个独立章节的集合。每一章都完整阐述了可能需要使用Kubernetes完成的特定任务。你可以根据需要学习本书某章,以了解某个特定的主题或感兴趣的部 分,然后将它放在一边,直到有新的主题要了解时再拿起它。
尽管采用了这种章节独立的组织方式,但还是会有一些主题贯穿多个章节。有几章是关于 Kubernetes 上的应用程序开发的:第 2 章介绍开发者工作流,第 5 章探讨持续集成、 测试和部署,第 15 章介绍如何在 Kubernetes 上构建更高层的应用程序模式,第 16 章论述管理状态和有状态应用。除了应用程序开发之外,还有几章是关于 Kubernetes 中的服 务运维的:第 1 章介绍如何搭建一个基本服务,第 3 章介绍监控和日志,第 4 章介绍配 置管理,第 6 章介绍版本控制、发布和上线,第 7 章介绍应用程序的全球化部署。
还有几章是关于集群管理的:第 8 章关于资源管理,第 9 章关于网络,第 10 章关于 Pod 和容 器安全,第 11 章关于集群策略与治理,第 12 章关于多集群管理,第 17 章关于准入控制与授 权。最后,有几章是完全独立的,其中包括第 13 章(外部服务集成)和第 14 章(机器学习)。
尽管在付诸实践之前先阅读所有章节可能会很有用,但我们更希望你能将本书当作参考手册来使用。它旨在作为指南,为你在实际工作中实践这些主题时提供指导。
版本更新
我们希望用4个新章来补充第 1 版,这些章涵盖了随着Kubernetes不断成熟并提供最佳 实践而出现的新兴工具和模式:第 18 章关于GitOps,第 19 章关于安全性,第 20 章关于混沌测试、负载测试和试验,第 21 章关于实现 Operator。