云原生(Cloud Native)
,当前是一个陌生且抽象的概念,但不影响我们先去了解云原生的起源及发展历程。
2006年 Google 的工程师开始研究 process containers
相关的技术功能研究,2007年,为避免与 Linux 中 container
概念的混淆,process containers
术语更改为 control groups
,该功能于 2008 年 1 月正式合并到 Linux 内核。Linux 内核 Cgroups
功能特性,旨在限制和隔离进程的使用,例如CPU、内存、磁盘I/O等,这为后面的容器技术及云原生的发展奠定了最根本的技术基础。
2013年云计算的发展如日中天,AWS、OpenStack、Cloud Foundry 这些公司作为领头兵,正见证和期待着 PaaS 时代的真正到来,却不知一场“容器”技术变革正在生根发芽。如果有心去查一下容器技术的发展历程,你会发现容器从来不是一个新概念和新技术,早在 1979 年 Unix V7 的开发过程中,chroot
事实上已经应用了“容器”的理念。在云计算时代,Cloud Foundry 为提供更好的“上云”服务,已经超前的提供了应用打包及分发机制,用户只需要执行少量的命令就可以部署和启动应用。同年,Docker 项目首次发布。与 Docker 项目一样使用了 Cgroups
、namespace
这样的技术的 Cloud Foundry 不可避免的与 Docker 产生竞争,的这场竞争中,Docker 使用了镜像机制,彻底解决了应用打包和发布环境不一致问题,而镜像也成为后来的事实标准。
2014年围绕 Docker 项目发起了众多的周边项目,Fig 项目中首次提出了“容器编排”的概念,随着 compose、swarm 项目的发布,重新定义后的 PaaS 平台雄心壮志的试图占领平台化服务市场。2014年6月,google 公司正式发布 Kubernetes。
2015年由于 Docker 项目在容器运行时方面的强硬态度,饱受社区诟病。同年6月22日,由 Docker 公司牵头,CoreOS、google、Red Hat 等公司共同宣布,Docker 公司将 libcontainer 捐出,更名为 RunC 项目,由一个中立的基金会管理,以 RunC 为依据,制定一套容器和镜像的标准和规范,这套标准和规范就是 OCI(open container initiative)。容器运行时和镜像标准正式剥离 Docker 公司。
在随后的反展中,OCI 并没有改变 Docker 一家独大的局势,于是 google、Red Hat 等开源基础设施领域的公司于2016年7月21日共同牵头成立 CNCF(Cloud Native Computing Foundation)元原生计算基金会。由 Red Hat 支撑 Kubernetes 项目同 Docker 的 swarm 展开了竞争,Kubernetes 避免了和 swarm 同质化的竞争,将 google 内部 Borg 系统的技术移植到 Kubernetes 项目,这就是后来的 Pod、siadcar 等功能特性。
2016年 docker 公司为了应对外部的竞争,放弃当前 swarm 项目,孤注一掷的将容器编排和集群管理功能全部内置集成到 docker 项目。Kubernetes 项目则采用“民主化”架构,即从API到容器运行时的每一层,都鼓励用户采用代码的方式插入。这种鼓励二次创新、开放的方式很快受到社区的欢迎及响应。
2017年 Docker 公司将容器运行时部分 containerd 捐赠给 CNCF 社区;宣布将 Docker 项目改名为 Moby。10月,Docker 公司宣布将在企业版 Docker 中内置 Kubernetes 项目。至此,宣告 Docker 在这场竞争中全面败退,但 Docker 对云原生领域创新的贡献,将被铭记。
最终的胜出者 CNCF 继续在云原生领域开疆扩土,截止2024年4月,CNCF 共有175个项目,毕业项目26个,孵化项目36个,沙箱测试项目113个。
云原生是一种用于在云计算环境中构建、部署和管理应用程序的一种理念,其中包含软件构建模式、技术体系、方法论,甚至是一种文化。在云原生迅猛发展的今天,其定义不断迭代更新,每个人厂商及实践者在不同的场景和维度都有着不同的理解和定义,因此将其称为更抽象的 “理念” 大概可以概括。
CNCF 对云原生定义: Approved by TOC: 2018-06-11
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
2013年,任职于 Pivotal 公司的 Matt Stine 首次提出了
Cloud Native
的概念,其发布于 2015 年的 《Migrating to Cloud-Native Application Architectures》中说明了云原生应用架构的主要特征。
- 12 因素。云原生应用架构原则或模式。
代码库
、依赖
、配置
、后端服务
、编译、发布、运行
、进程
、端口绑定
、并发
、可任意处置性
、开发/生产平等
、日志
、管理进程
。- 微服务架构。微服务是一种软件架构风格,使用单一的功能模块组成一个复杂的大型应用,各模块功能之间与编程语言无关,各模块之间使用API通信。与去相对应的是单体式应用程序,其包含了应用程序的所有功能模块。
- 自服务敏捷架构。自动化、自服务、按需扩展的运行平台。
- 基于 API 的协作。弱耦合性的单一功能应用间的协作。
- 抗脆弱性。抵御故障并能够修复的能力。
云原生是一种利用云计算方法和工具开发、部署和运行应用程序的方法。从根本上讲,云原生是通过组织团队、文化和技术,以利用现代架构和先进自动化来管理复杂性,并提高软件开发速度。
采用云原生架构构建和运营应用程序的组织能够更快地将新想法推向市场,并更早地响应客户需求。云原生应用程序旨在利用容器、Kubernetes 以及 Kubernetes 生态系统等核心技术。云原生开发(现代开发)融合了 DevOps、持续集成和持续交付(CI/CD)等概念,并采用了微服务和无服务器等现代架构。
云原生开发关注的是应用程序的创建和部署方式,而不是具体部署在何处。无论是部署在本地、公共云上,还是采用混合或多云模型,都需要按需计算能力以及现代数据服务和应用服务来取得成功。
云原生计算基金会(CNCF)鼓励组织“在公共、私有和混合云等现代动态环境中构建和运行可扩展的应用程序”。构建和运行云原生应用程序需要根据云原生架构原则重新思考应用程序交付的方法。云原生应用程序开发基于容器、Kubernetes和其他基础设施元素,利用云原生开发工具和云原生架构构建代码,主要原则包括: