本书与kubernetes架构细节为引子,深入挖掘kubernetes生产化时间过程中所遇到的挑战和方案细节,重点包括:
1. 规划和构建企业级的kubernetes高可用集群
2. 如何解决kubernetes落地过程中与企业生态系统的整合,构建多租户解决方案
3. 基于kubernetes的边缘计算
4. 全方位的性能调优,节点,网络,kubernetes组件
5. 如何保证用户应用的高可用,如何通过监控,告警,自动策略等保证高可用。
在这些话题的基础上,本书的核心目的是,通过以上角度,全方位分享eBay在4年多kubernetes生产化时间之路中的经验,目标是使本书称为kubernetes生产化的案例参考手册。
权威:
由Kubernetes不同领域的专家共同执笔,全方位深入解读技术细节。
实用:
五年多互联网行业Kubernetes生产化实践经验分享,助你不再踩坑。
全视角:
深入剖析Kubernetes架构决策及设计原理。
从长期运维的角度,解析如何构建和运维生产化集群并持续优化。
分享大规模集群、多集群的运维挑战。
基于多租户Kubernetes的应用容器化、高可用部署和多活数据中心流量管理进行案例分享。
推 荐 序
国庆前,老孟跟我说,帮我们的书写个序吧,我开玩笑说,你们怎么不找一个更有名气的人来写呢:)老孟说,已经找了,但是还是想找你写一下序,因为你更了解我们的日常工作。
我自己平时也很喜欢做总结,自己也在写专栏,我深知写一两篇文章容易,要坚持写很多篇,并且汇集成书是很需要毅力的。老孟他们平时的工作强度很大,回家还要照顾孩子,今天能成书实属不易。
老孟,小强,文利还有苏菲,在写这本书的时候就像《Kubernetes 生产化实践之路》的书名一样,把自己这么多年在生产环境摸爬滚打的经验都毫无保留地倾囊分享了,要驾驭eBay这个规模的生产环境,必须了解技术背后的原理,而不能仅仅停留在操作层面,因此,这本书更多的是帮大家梳理系统设计背后的思考和细节。
想要学习云计算,需要学习很多很多的基础知识,我们部门的新人刚加入的时候都觉得不适应密集型的信息轰炸,我觉得以后我们部门有新人加入时,会建议先学习一遍老孟他们的这本书。大家如果经历一两次生产环境的问题,再回来看这本书,估计体会会更深刻。
老孟,我真的觉得,书里面的知识无论从覆盖面还是深度都超越我们内部的文档啊,看来鼓励大家写书才是推进我们内部文档质量提高的出路啊 ?
我看这本书的时候就跟看回忆录差不多的。我记得我们在把eBay的Feature测试环境从Openstack换成Kubernetes的时候,还顺便换掉了原先的负载均衡系统,上线后出了事故被“捅”到了CTO那里,老孟他们通过持续努力,好不容易从坑里爬出来,之后我给老孟团队发了一个奖状,我把奖状交给老孟的时候跟他说,这个奖状外人看上去是个奖状,但是我们自己都知道是一个提醒,提醒我们从开源系统到生产环境高可用之间还有很多路要走。老孟一直把这个奖状摆在他桌子的显眼位置上。
看到书中介绍Contour和Istio的章节,我们部门内部在关于技术选型时选用Contour还是Istio的激烈争吵还历历在目,我们基础架构部全球副总裁为了这个事情,还让老孟写一个详细的分析报告,并且跟副总逐一分析技术细节。书中说CGroup弄的不好,会造成系统性能影响,还有内存水位线的介绍、RSS/RPS/RFS的介绍等,其实我们都是吃了苦头了,内部总结会是在公司3楼的会议室Fencing和Training Room开的,整个会议室坐满了人,一起学习了两个多小时,开完会天都黑了,还是周末,但是我觉得这时间花的值。
Resource Quota的章节,专门解释了资源横向切分和纵向切分的思考,这次国庆放假前最后一天上班,小强还在跟我讨论这个问题,eBay因为历史原因数据中心资源被割裂成很多孤岛,我跟小强说,你的工作就像一条鲶鱼迫使整个公司重新审视过去十多年的资源管理方式,eBay并不做内部部门间的单独财务结算。在这种情况下,我觉得如果真的要在保证资源利用率的前提下,缩短我们交付云计算资源的时间任重而道远。
在看第2章的时候,我就会想起,周末我去公司,看到文利还在那里思考怎么解决Cassini(eBay内部的搜索引擎集群)在 Kubernetes上为什么会出现性能问题,一查就是两个月,最后还是被他“死磕”搞定了。
看到介绍ContainerD的章节就会想起苏菲,我们公司所有Kubernetes集群替换成containerD runtime就是她做的,把NPD从Daemonset换成系统服务也是吃了亏后改的……还有很多很多不能在这里一一例举了,书中轻描淡写的一两句话,背后其实是有我们很多的思考、教训、尝试做支撑的。
我们这5年多来也是起起伏伏,公司做Kubernetes有一点是一直坚持的,就是要往深里做,把系统为什么这么设计搞清楚。一路的教训让我们非常重视系统上线前的压测和失效分析,而这些无不让我们对系统底层有了更深的认识。
老孟,等书正式发售的时候,我不要你送我一本,我得自己花钱买一本,也摆在我办公桌的显眼位置,因为这记录了我们的成长。我还很期待我们可以再写一本生产环境踩坑实录?
许健
2020年10月7日
前 言
扉页之后,来到一个合适的位置,以交待我与这本书的渊缘。一个偶然的机会,编辑老师问我,是否有意愿写一本关于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依然是一个快速迭代的技术,本书分享的内容具有一定的时效性;另外因为成书时间紧,作者眼界和水平有限,如有错漏,敬请广大读者指正。