云原生应用管理:原理与实践
上QQ阅读APP看书,第一时间看更新

前言

为什么要写这本书

云原生可谓当下最火热的项目开发技术之一,各种传统应用都在向云原生应用的方向靠拢。但是到底什么是云原生应用,云原生应用的开发标准是什么,至今还没有一个统一的规范与定义。这就造成了云原生社区百家争鸣的局面,各大厂商争先发布自己的云原生应用定义。

我是2014年开始接触容器技术的,最早从Docker镜像入门,当时的使用体验是,Docker镜像能够很好地隔离环境差异,做到一次构建、到处运行,为应用的打包与发布操作带来极大便利。

随着微服务理念的发展,应用开始变得越来越庞大,功能也越来越复杂,这时Docker Compose编排模板便应运而生了。通过它,技术人员可以方便地编辑模板以实现应用的打包与发布。后来随着Kubernetes的诞生与发展,声明式定义又开始风靡技术圈,大家逐渐倾向于使用面向终态的架构设计。现在的Kubernetes基本奠定了容器编排领域的标准。

可是随之而来的问题就是,Kubernetes原生的部署方式比较凌乱,部署资源散落在各处,没办法统一归拢管理,这给应用的发布与部署带来了前所未有的困难。第一个尝试解决这个问题的管理工具就是Helm——一个构建在Kubernetes上的包管理工具,它通过将Kubernetes应用的部署模板统一压缩成包并标明版本号的方式进行管理,是首个能够进行版本管理的云原生应用管理器。

随着Kubernetes应用的增多,很多复杂的有状态应用也开始部署在集群中,这给Helm运行带来了很大的困难。Helm初期只是用于管理一些简单的无状态应用部署,对于复杂的有状态应用则有些力不从心。鉴于此,又诞生了Operator,Operator赋予应用管理者巨大的权限,可以让管理者自己编写运维脚本,以便管理者能够更好地发布与管理应用。

在应用管理器层出不穷的时候,应用定义这一领域也没有停下发展的脚步。微软推出的CNAB和阿里巴巴集团推出的Open Application Model(OAM),都旨在定义云原生应用的标准。这些理念超越了Kubernetes的界限,更加抽象和广泛地定义了未来云原生应用的标准与风格。

因此我们想写一本书,介绍目前市面上各大社区与厂商推出的云原生管理工具与理念,让大家对云原生应用目前的状态有一个清晰的认识,从而根据自己的需求来挑选适合自己的云原生应用管理工具。

本书的内容

本书内容从逻辑上主要分为以下四部分。

第一部分Helm(第1~4章)

主要介绍Helm的历史与发展过程。我们将从Chart开始讲解,经过抽丝剥茧,帮助读者厘清Chart的各种写法。同时提供了目前主流社区生产使用的Chart供读者学习。后面将以安装Chart为例,从源码角度介绍Helm的整个安装过程,让读者能够更加深入地理解Helm这个包管理工具的原理及其使用方法。

第二部分Kustomize(第5~8章)

主要介绍Kustomize诞生的原因。我们将从Kustomize的概念入手,详细了解Kustomize的各个功能,同时结合Kustomize的各个插件来理解其覆盖的领域与功能。最后从源码角度入手,详细讲解Kustomize各个命令的执行过程。

第三部分CNAB和Porter(第9~12章)

主要介绍CNAB的概念、CNAB推出的背景与意义。这部分内容从概念入手,详细介绍管理工具Porter是如何实践CNAB概念的。最后从源码角度对Porter进行分析。

第四部分Operator(第13~16章)

主要介绍Operator的概念和工作原理,以及Operator Framework目前涵盖的组件。我们将以一个具体示例为模板,详细介绍Operator在有状态应用管理中的作用,最后从源码角度分析各个功能的实现原理。

适用读者

·希望深入理解Kubernetes上的应用管理的读者

·已经使用过Helm等应用管理工具,希望探查更多细节的读者

·希望了解如何使用Go语言编写应用管理工具的程序员

·云原生爱好者

如何阅读

本书内容是实战与源码分析相结合,因此仅仅靠阅读是无法体会所有要点的。本书所有分析的源码均是开源项目[1],希望读者能够根据内容,寻找到对应的源码,边看源码边解析。最好能够根据自己的理解,在本机运行一下,以便了解整个代码的运行流程。

关于勘误

由于写作时间和水平有限,本书难免存在一些纰漏和错误。如果读者发现了问题,请及时与我们联系,我们也会在后面的版本中加以改正,联系邮箱:xianlubird@gmail.com。非常希望与大家共同学习云原生技术。

致谢

最后,向在本书编写过程中给予巨大帮助的人们表示诚挚的感谢。感谢妻子的支持,编写此书期间,恰逢妻子怀孕,感谢她的理解和包容,很多时候忽略了她。希望此书也能作为给未来的新生命的贺礼。

感谢阿里云容器服务团队在本书编写期间给予的理解与包容。

最后,感谢杨福川编辑,在他的帮助与支持下,本书由一个想法变成了实体展现给各位读者;感谢张锡鹏编辑的辛苦付出,帮助我们多次改稿,修复各种低级错误,极大地提升了本书的文字质量。

陈显鹭
2020年4月

[1] 源码链接:https://github.com/helm/helm、https://github.com/coreos/prometheus-operator、https://github.com/cnabio/duffle