云原生应用管理:原理与实践

陈显鹭 阚俊宝 匡大虎 等
前言 为什么要写这本书 云原生可谓当下最火热的项目开发技术之一,各种传统应用都在向云原生应用的方向靠拢。但是到底什么是云原生应用,云原生应用的开发标准是什么,至今还没有一个统一的规范与定义。这就造成了云原生社区百家争鸣的局面,各大厂商争先发布自己的云原生应用定义。 我是2014年开始接触容器技术的,最早从Docker镜像入门,当时的使用体验是,Docker镜像能够很好地隔离环境差异,做到一次构建、到处运行,为应用的打包与发布操作带来极大便利。 随着微服务理念的发展,应用开始变得越来越庞大,功能也越来越复杂,这时Docker Compose编排模板便应运而生了。通过它,技术人员可以方便地编辑模板以实现应用的打包与发布。后来随着Kubernetes的诞生与发展,声明式定义又开始风靡技术圈,大家逐渐倾向于使用面向终态的架构设计。现在的Kubernetes基本奠定了容器编排领域的标准。 可是随之而来的问题就是,Kubernetes原生的部署方式比较凌乱,部署资源散落在各处,没办法统一归拢管理,这给应用的发布与部署带来了前所未有的困难。第一个尝试解决这个问题的管理工具就是Helm——一个构建在Kubernetes上的包管理工具,它通过将Kubernetes应用的部署模板统一压缩成包并标明版本号的方式进行管理,是首个能够进行版本管理的云原生应用管理器。 随着Kubernetes应用的增多,很多复杂的有状态应用也开始部署在集群中,这给Helm运行带来了很大的困难。Helm初期只是用于管理一些简单的无状态应用部署,对于复杂的有状态应用则有些力不从心。鉴于此,又诞生了Operator,Operator赋予应用管理者巨大的权限,可以让管理者自己编写运维脚本,以便管理者能够更好地发布与管理应用。 在应用管理器层出不穷的时候,应用定义这一领域也没有停下发展的脚步。微软推出的CNAB和阿里巴巴集团…