前言
在这个合适的位置,交待一下我与这本书的渊源。一个偶然的机会,编辑老师问我,是否有意愿写一本关于Kubernetes 生产化经验的书。没有太多犹豫,我回复道:“好的。” 这回复是我发自内心的本能直觉。
从Kubernetes 项目开源至今已五载有余,我和我的小伙伴们,有幸从第一个版本开始,就参与基于容器平台和Kubernetes 技术栈的架构、开发、规模化生产落地、运维等一系列工作。在此期间,我们积累了一些值得分享的经验,也踩了不少关于新技术栈的 “坑”。
相比于虚拟化技术,容器技术更轻量、优雅,也更符合微服务时代应用的构建与部署需求。基于容器技术的Kubernetes 并不是一个孤立的云平台,它有成为云计算规范的野心。与此同时,它已俨然成为云计算的事实标准。
● Kubernetes 可以被看作一个云计算控制平面的框架,而云计算三要素——计算、网络和存储,均以插件形式与Kubernetes 集成。这样做的好处是,使用者可以选择自己的插件实现来落地。因此,当计算技术、网络技术或存储技术更新换代时,Kubernetes 能够很容易地集成。于是在容器技术 “能打” 的今天,Kubernetes 将对其提供全面支持;明天容器技术被其他技术取代,Kubernetes 作为管理平台,只需要替换一个运行时插件即可,因此其地位不可撼动。
● 在容器技术基础之上,Kubernetes 还做了更精妙的模型抽象。以规范后的模型作为统一的API,Kubernetes 打破了集群管理者和应用开发者的边界。它用统一的语言将不同角色进行关联,通过特定的语义来实现平台层和应用层的协商。
● Kubernetes 的扩展性非常强。基于自定义模型,围绕着Kubernetes 形成了丰富的生态圈,并且扩展的项目非常活跃。这些项目通常有大厂背书,同时以构建业界标准为方向,其中包括小到辅助应用构建的Helm,大到服务网格解决方案Istio,再到立项之初就尝试走标准化之路的开放应用模型(Open Application Model),都是按照相同的模式成长起来的。
写这本书的一个最重要的初衷,其实很纯粹,就是满足一种倾诉欲——当看到这些精妙的设计,分享欲会喷薄而出。因此,本书不会罗列大量代码、示例、配置,或者教读者如何执行Kubernetes 命令,而是尝试去介绍这些精巧设计背后的细节,比如它的设计考量、设计选择,以及选择这样的设计所付出的代价。
除此之外,由于新技术的生产化落地并非一帆风顺,必然会遇到这样或那样的问题。因此,我们希望从生产化落地的角度,分享生产系统中面临的挑战和可实施的最佳方案,还包括如何规避风险、优化系统以获得最优性能。
经历了五年的摸爬滚打,Kubernetes 在eBay 历史上成为了唯一一个统管大数据、搜索后台和云业务的支撑平台。截至目前,Kubernetes 已经管理了上百个集群和数万台物理机,其最终目标是管理所有共计十多万台计算节点,其历程不可谓不艰辛。本书更多是从互联网公司的角度探讨Kubernetes 生产化过程中,面对超大规模集群和海量应用,需要解决哪些问题。所谓生产化最佳实践经验,无非是一个又一个坑踩过来以后的心路历程。
本书共分12 章,每个章节自成体系,尝试从不同侧面阐述生产化过程中带来的挑战。
第1 章:介绍Kubernetes 架构基础,了解Kubernetes 架构基础是学习本书的根本。本章介绍容器技术的优势、Kubernetes 对象设计的原则、Kubernetes 控制平面组件的协同工作原理,并对控制面板组件作简要介绍。
第2 章:通过以点带面的方式,聚焦单个节点,展开介绍容器技术的技术细节,以及与节点相关的调优方案,包括Kubernetes 如何利用Namespace 和CGroups 技术、如何选择和构建存储方案,以及如何对CPU、内存、磁盘和网络进行调优,以使集群获得最优性能。
第3 章:介绍如何构建高可用的Kubernetes 集群,旨在提供生产化集群管理的思路。保证高可用是核心要义,其中包括如何构建高可用的Kubernetes 平台、如何确保平台支撑的应用高可用,以及如何管理高可用的Kubernetes 平台。
第4 章:介绍如何构建生产化镜像仓库及镜像的安全保证。无论选择哪种镜像仓库,需要解决的本质问题都离不开Metadata 的管理、镜像的块文件管理,以及镜像的分发。因此,本章介绍了镜像仓库的实现,以及基于容器镜像扫描和准入的安全保证方案。
第5 章:Kubernetes 作为开放式平台,需要多租户的支持,而其本身并未提供租户的概念,因而本章尝试从不同层面描述多租户集群需要解决的问题,以及Kubernetes 提供的备选方案,包括认证集成、授权管理、隔离和配额管理等。
第6 章:介绍网络接入方案,包括不同层级的网络协议、负载均衡原理,以及Kubernetes的网络接入支持。
第7 章:介绍API 网关和服务网格,API 网关是集群的流量入口。本章分析了Ingress的设计缺陷、社区相应的替代方案、轻量级的入站流量管理扩展项目Contour,以及尝试将入站流量和服务网格统一管理的Istio,同时剖析了时下热门的数据面组件Envoy 的架构与实现。
第8 章:社区的集群联邦历经多次迭代,本章重点阐述V2 版本的设计与实现原理,以及如何基于集群联邦技术,构建跨数据中心的高可用应用。
第9 章:边缘计算是随着物联网而出现的一种计算模式,基于Kubernetes 架构的边缘计算项目 KubeEdge 已在孵化中。本章分享边缘数据中心的构建案例,并展开分析KubeEdge 的架构和其尝试解决的问题,以及在边缘网络中面临的挑战和设计考量。
第10 章:从虚拟机技术到容器化技术是一个巨大的转变,因此,应用本身需要适应并积极拥抱这些变化,才能避免应用落地时可能面临的陷阱。本章记录了应用落地时面临的问题及应对方案,如 “为什么我的应用容器化以后不工作了?性能下降了?资源开销大了?” 问题的答案都将在本章揭晓。
第11 章:在分布式系统中,监控指标是一个衡量系统功能是否达到运维标准的重要因素。本章介绍基于Kubernetes 的监控要素,包括指标收集、日志管理、系统运维流程上遵循的最佳实践,以及基于监控系统指标数据的集群自动恢复的方法。
第12 章:容器技术和Kubernetes 及相应的工具链打通了DevOps 的所有环节。工具链的发展是非常迅速的,比如持续集成工具从最初的Jenkins,演进到Prow,再到Tekton,只用了数年时间。然而本章未从工具链的角度展开,更多着力于从流程和职能划分的角度分析DevOps 该如何做。
Kubernetes 是一个超大的话题,限于篇幅,本书内容进行了一定的取舍;Kubernetes依然是一个快速迭代之中的技术,本书分享的内容具有一定的时效性。另外,因为写书时间紧,作者眼界和水平有限,如有错漏,敬请广大读者指正。
孟凡杰
2020 年10 月20 日
读者服务
微信扫码回复:39917
·获取各种共享文档、线上直播、技术分享等免费资源
·加入本书读者交流群,与作者互动
·获取博文视点学院在线课程、电子书20 元代金券