《Kubernetes in Action》是一本关于Kubernetes和k8s实战的优秀书籍,本书以分布式可伸缩应用和Docker容器集群编排为主题,通过全真案例和保罗万象的高级技术指导,帮助读者从零起步,深入理解Kubernetes技术和应用,篇幅丰富,内容详尽,涵盖了Kubernetes的原理、架构、核心组件以及实战技巧,书中不仅提供了丰富的实例和示例代码,还结合实际场景,给出了解决问题的全面思路和方法,帮助读者更好地应对实际挑战,这是一本理论与实践相结合的优秀指南,对于想要深入学习和应用Kubernetes的读者来说,是一本不可多得的学习资源。
读者评价
非常好的一本书,里面的插图很好,解释的通俗易懂。看完之后,对Kubernetes的了解大大增加,非常建议每位Kubernetes的学习者看一下。
总体翻译质量不错,个别专业术语有瑕疵。看完可以对k8s建立大的框架和基础概念,细节非常详实。k8s本身还在快速发展,有了这本书打基础,后续跟踪官方reference会更加容易些。
当然,看得快完全是因为这本书写的太流畅了。由浅入深,层层递进。而且往往一件事,要来回说几遍:先说一边概念;再画一张图,又解释一遍;再实操一遍。可以说是看一遍顶三遍。
看完后,会让人充满自信:对于k8s,我已经有了一个非常系统的了解。
对于几个进阶性的问题,比如Ingress和自动伸缩,已经超出了这本书的涵盖范围,就点到为止了。基础知识掌握牢固了之后,再去看这些进阶的项目,应该会事半功倍。
内容介绍
本书主要讲解如何在 Kubernetes 中部署分布式容器应用。本书开始部分概要介绍了 Docker 和Kubernetes 的由来和发展,然后通过在 Kubernetes 中部署一个应用程序,一点点增加功能,逐步加深我们对于Kubernetes架构的理解和操作的实践。在本书的后面部分,也可以学习一些高阶的主题,比如监控、调试及伸缩。Kubernetes是希腊文,意思是“舵手”,带领我们安全地到达未知水域。Kubernetes这样的容器编排系统,会帮助我们妥善地管理分布式应用的部署结构和线上流量,高效地组织容器和服务。Kubernetes 作为数据中心操作系统,在设计软件系统时,能够尽量降低在底层网络和硬件设施上的负担。
目录
- 1 Kubernetes 介绍1
- 2 开始使用 Kubernetes 和 Docker 23
- 3 pod :运行于 Kubernetes 中的容器 53
- 4 副本机制和其他控制器 :部署托管的 pod 83
- 5 服务 :让客户端发现 pod 并与之通信121
- 6 卷 :将磁盘挂载到容器 161
- 7 ConfigMap 和 Secret :配置应用程序 195
- 8 从应用访问 pod 元数据以及其他资源 229
- 9 Deployment: 声明式地升级应用 255
- 10 StatefulSet :部署有状态的多副本应用 285
- 11 了解 Kubernetes 机理 315
- 12 Kubernetes API 服务器的安全防护 351
- 13 保障集群内节点和网络安全 381
- 14 计算资源管理 411
- 15 自动横向伸缩 pod 与集群节点 443
- 16 高级调度463
- 17 开发应用的最佳实践 485
- 18 Kubernetes 应用扩展 517
- A 在多个集群中使用 kubectl 543
- B 使用 kubeadm 配置多节点集群 549
- C 使用其他容器运行时 563
- D Cluster Federation 567
1.1 Master Master节点上面主要由四个模块组成:APIServer、scheduler、controller manager、etcd。 APIServer。APIServer负责对外提供RESTful的Kubernetes API服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd。如架构图中所示,kubectl(Kubernetes提供的客户端工具,该工具内部就是对Kubernetes API的调用)是直接和APIServer交互的。 schedule。scheduler的职责很明确,就是负责调度pod到合适的Node上。如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是Pod和一个Node的绑定,即将这个pod部署到这个Node上。Kubernetes目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。 controller manager。如果说APIServer做的是“前台”的工作的话,那controller manager就是负责“后台”的。每个资源一般都对应有一个控制器,而controller manager就是负责管理这些控制器的。比如我们通过APIServer创建一个pod,当这个pod创建成功后,APIServer的任务就算完成了。而后面保证Pod的状态始终和我们预期的一样的重任就由controller manager去保证了。 etcd。etcd是一个高可用的键值存储系统,Kubernetes使用它来存储各个资源的状态,从而实现了Restful的API。 1.2 Node 每个Node节点主要由三个模块组成:kubelet、kube-proxy、runtime。 runtime。runtime指的是容器运行环境,目前Kubernetes支持docker和rkt两种容器。 kube-proxy。该模块实现了Kubernetes中的服务发现和反向代理功能。反向代理方面:kube-proxy支持TCP和UDP连接转发,默认基于Round Robin算法将客户端流量转发到与service对应的一组后端pod。服务发现方面,kube-proxy使用etcd的watch机制,监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响。另外kube-proxy还支持session affinity。 kubelet。Kubelet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,它负责维护和管理该Node上面的所有容器,但是如果容器不是通过Kubernetes创建的,它并不会管理。本质上,它负责使Pod得运行状态与期望的状态一致。 至此,Kubernetes的Master和Node就简单介绍完了。下面我们来看Kubernetes中的各种资源/对象。