CNCF 官方大使张磊:什么是云原生?

做者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使git

编者说:github

从 2015 年 Google 牵头成立 CNCF 以来,云原生技术开始进入公众的视线并取得快速的发展,到 2018 年包括 Google、AWS、Azure、Alibaba Cloud 等大型云计算供应商都加入了云原生基金会 CNCF,云原生技术也从原来的应用容器化发展出包括容器、Service Mesh、微服务、不可变基础设施、Serverless、FaaS 等众多技术方向,CFCF 旗下也囊括了越来多的开源项目。web

Kubernetes 做为 CNCF 的第一个项目从诞生之初就就使人瞩目,Kubernetes 由 Google 工程师基于 Google 内部多年集群管理系统 Borg 的设计经验,结合云计算时代的基础设施特色从新设计而得,旨在帮助企业解决大规模 IT 基础设施的应用容器编排难题。Google 在 2014 年 6 月开源 Kubernetes 之后,在 Redhat、Microsoft、Alibaba 等厂商和众多开源爱好者共同的努力下,成长为现在容器编排领域的事实标准,极大的推进了云原生领域的发展。数据库

在系统介绍什么是云原生,云原生对开发者来讲意味着什么,咱们先从云原生技术发展简史开始讲起。设计模式

云原生技术发展简史

1

  • 2004 年— 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术;
  • 2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干;
  • 2013 年,Docker 项目正式发布。
  • 2014 年,Kubernetes 项目也正式发布。这样的缘由也很是容易理解,由于有了容器和 Docker 以后,就须要有一种方式去帮助你们方便、快速、优雅地管理这些容器,这就是 Kubernetes 项目的初衷。在 Google 和 Redhat 发布了 Kubernetes 以后,这个项目的发展速度很是之快。
  • 2015 年,由Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了 CNCF 云原生基金会。CNCF 成立之初,就有 22 个创始会员,并且 Kubernetes 也成为了 CNCF 托管的第一个开源项目。在这以后,CNCF 的发展速度很是迅猛;
  • 2017 年,CNCF 达到 170 个成员和 14 个基金项目;
  • 2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速度在整个云计算领域都是很是罕见的。

云原生技术生态现状

所以,现在咱们所讨论的云原生技术生态是一个庞大的技术集合。CNCF 有一张云原生全景图(https://github.com/cncf/landscape),在这个全景图里已经有 200 多个项目和产品了,这些项目和产品也都是和 CNCF 的观点所契合的。安全

2

因此,若是以这张全景图做为背景,加以思考就会发现,咱们今天所讨论的云原生其实主要谈论了如下几点:服务器

  1. 云原生基金会 —— CNCF;

CNCF (云原生基金会)是目前云计算领域最成功的
开源基金会之一,是 Kubernetes,containerd,etcd
,Envoy 等知名开源项目的托管基金会微信

  1. 云原生技术社区

CNCF 目前托管的 20 正式项目共同构成了现代云
计算生态的基石。其中 Kubernetes 项目是全世界第
四活跃的开源项目网络

  1. 云原生技术产业

除了前面两点以外,如今全球各大公有云厂商都已经支持了 Kubernetes。此外,还有 100 多家技术创业公司也在持续地进行投入,整体市场于2021年逼近 1000 亿美圆。如今阿里巴巴也在全面上云,并且上云就要上云原生,这也是各大技术公司拥抱云原生的一个例子。架构

咱们正处于时代的关键节点

3
2019 年正是云原生时代的关键节点,为何这么说?咱们这里就为你们简单梳理一下。

从 2013 年 Docker 项目发布开始提及,Docker 项目的发布使得全操做系统语义的沙盒技术唾手可得,使得用户可以更好地、更完整地打包本身的应用,使得开发者能够垂手可得的得到了一个应用的最小可运行单位,而不须要依赖任何 PaaS 能力。这对经典 PaaS 产业实际上是一个“降维打击”。

2014 年的时候,Kubernetes 项目发布,其意义在于 Google 将内部的 Borg/Omega 系统思想借助开源社区实现了“重生”,而且提出了“容器设计模式”的思想。而 Google 之因此选择间接开源 Kubernetes 而不是直接开源 Borg 项目,其实背后的缘由也比较容易理解:Borg/Omega 这样的系统太复杂了,是没办法提供给 Google 以外的人使用,可是 Borg/Omega 这样的设计思想却能够借助 Kubernetes 让你们接触到,这也是开源 Kubernetes 的重要背景。

这样到了 2015 年到 2016 年,就到了容器编排“三国争霸”的时代,当时 Docker、Swarm、Mesos、Kubernetes 都在容器编排领域展开角逐,他们竞争的缘由其实也比较容易理解, 那就是 Docker 或者容器自己的价值虽然大,可是若是想要让其产生商业价值或者说对云的价值,那么就必定须要在编排上面占据一个有利的位置。

Swarm 和 Mesos 的特色,那就是各自只在生态和技术方面比较强,其中,Swarm 更偏向于生态,而 Mesos 技术更强一些。相比之下, Kubernetes 则兼具了二者优点,最终在 2017 年“三国争霸”的局面中得以胜出,成为了当时直到如今的容器编排标准。这一过程的表明性事件就是 Docker 公司宣布在核心产品中内置了 Kubernetes 服务,而且 Swarm 项目逐渐中止维护。

到了 2018 年的时候,云原生技术理念开始逐渐萌芽,这是由于此时 Kubernetes 以及容器都成为了云厂商的既定标准,以“云”为核心的软件研发思想逐步造成。

而到了 2019 年,状况彷佛又将发生一些变化。

4

什么是“云原生”?云原生该怎么落地?

云原生的定义

5

不少人都会问“到底什么是云原生?”

实际上,云原生是一条最佳路径或者最佳实践。更详细的说,云原生为用户指定了一条低心智负担的、敏捷的、可以以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径。

所以,云原生实际上是一套指导进行软件架构设计的思想。按照这样的思想而设计出来的软件:首先,自然就“生在云上,长在云上”;其次,可以最大化地发挥云的能力,使得咱们开发的软件和“云”可以自然地集成在一块儿,发挥出“云”的最大价值。

因此,云原生的最大价值和愿景,就是认为将来的软件,会从诞生起就生长在云上,而且遵循一种新的软件开发、发布和运维模式,从而使得软件可以最大化地发挥云的能力。说到了这里,你们能够思考一下为何容器技术具备革命性?

其实,容器技术和集装箱技术的革命性很是相似,即:容器技术使得应用具备了一种“自包含”的定义方式。因此,这样的应用才能以敏捷的、以可扩展可复制的方式发布在云上,发挥出云的能力。这也就是容器技术对云发挥出的革命性影响所在,因此说,容器技术正是云原生技术的核心底盘。

云原生的技术范畴

6

云原生的技术范畴包括了如下几个方面:

  • 第一部分是云应用定义与开发流程。这包括应用定义与镜像制做、配置 CI/CD、消息和 Streaming 以及数据库等。
  • 第二部分是云应用的编排与管理流程。这也是 Kubernetes 比较关注的一部分,包括了应用编排与调度、服务发现治理、远程调用、API 网关以及 Service Mesh。
  • 第三部分是监控与可观测性。这部分所强调的是云上应用如何进行监控、日志收集、Tracing 以及在云上如何实现破坏性测试,也就是混沌工程的概念。
  • 第四部分就是云原生的底层技术,好比容器运行时、云原生存储技术、云原生网络技术等。
  • 第五部分是云原生工具集,在前面的这些核心技术点之上,还有不少配套的生态或者周边的工具须要使用,好比流程自动化与配置管理、容器镜像仓库、云原生安全技术以及云端密码管理等。
  • 最后则是 Serverless。Serverless 是一种 PaaS 的特殊形态,它定义了一种更为“极端抽象”的应用编写方式,包含了 FaaS 和 BaaS 这样的概念。而不管是 FaaS 仍是 BaaS,其最为典型的特色就是按实际使用计费(Pay as you go),所以 Serverless 计费也是重要的知识和概念。

云原生思想的两个理论

7

在了解完云原生的技术范畴以后你就会发现,其所包含的技术内容仍是不少的,可是这些内容的技术本质倒是相似的。云原生技术的本质是两个理论基础。

  • 第一个理论基础是:不可变基础设施。这一点目前是经过容器镜像来实现的,其含义就是应用的基础设施应该是不可变的,是一个自包含、自描述能够彻底在不一样环境中迁移的东西;
  • 第二个理论基础就是:云应用编排理论。当前的实现方式就是 Google 所提出来的“容器设计模式”,这也是 Kubernetes 部分文章中所需主要讲述的内容。

基础设施向云演进的过程

8

首先为你们介绍一下“不可变基础设施”的概念。其实,应用所依赖的基础设施也在经历一个向云演进的过程,举例而言,对于传统的应用基础设施而言,其实每每是可变的。

你们可能常常会干这样一件事情,好比须要发布或者更新一个软件,那么流程大体是这样的,先经过 SSH 连到服务器,而后手动升级或者降级软件包,逐个调整服务器上的配置文件,而且将新代码直接都部署到现有服务器上。所以,这套基础设施会不断地被调整和修改。

可是在云上,对“云”友好的应用基础设施是不可变的。

这种场景下的上述更新过程会这么作:一旦应用部署完成以后,那么这套应用基础设施就不会再修改了。若是须要更新,那么须要现更改公共镜像来构建新服务直接替换旧服务。而咱们之因此可以实现直接替换,就是由于容器提供了自包含的环境(包含应用运行所需的全部依赖)。因此对于应用而言,彻底不须要关心容器发生了什么变化,只须要把容器镜像自己修改掉就能够了。所以,对于云友好的基础设施是随时能够替换和更换的,这就是由于容器具备敏捷和一致性的能力,也就是云时代的应用基础设施。

因此,总结而言,云时代的基础设施就像是能够替代的“牲口”,能够随时替换;而传统的基础设施则是独一无二的“宠物”,须要细心呵护,这就体现出了云时代不可变基础设施的优势。

基础设施向云演进的意义

9

因此,像这样的基础设施向“不可变”演进的过程,为咱们提供了两个很是重要的优势。

    1. 基础设施的一致性和可靠性。一样一个镜像,不管是在美国打开,在中国打开,仍是在印度打开都是同样的。而且其中的 OS 环境对于应用而言都是一致的。而对于应用而言,它就不须要关心容器跑在哪里,这就是基础设施一致性很是重要的一个特征。
    1. 这样的镜像自己就是自包含的,其包含了应用运行所须要的全部依赖,所以也能够漂移到云上的任何一个位置。

此外,云原生的基础设施还提供了简单、可预测的部署和运维能力。因为如今有了镜像,应用仍是自描述的,经过镜像运行起来的整个容器其实能够像 Kubernetes 的 Operator 技术同样将其作成自运维的,因此整个应用自己都是自包含的行为,使得其可以迁移到云上任何一个位置。这也使得整个流程的自动化变得很是容易。

应用自己也能够更好地扩容,从 1 个实例变成 100 个实例,进而变成 1 万个实例,这个过程对于容器化后的应用没有任何特殊的。最后,咱们这时也可以经过不可变的基础设施来地快速周围的管控系统和支撑组件。由于,这些组件自己也是容器化的,是符合不可变基础设施这样一套理论的组件。

以上就是不可变基础设施为用户带来的最大的优势。

2019 年——云原生技术普及元年

为何说 2019 年极可能是一个关键节点呢?咱们认为 2019 年是云原生技术的普及元年。

首先你们能够看到,在 2019 年,阿里巴巴宣布要全面上云,并且“上云就要上云原生”。咱们还能够看到,以“云”为核心的软件研发思想,正逐步成为全部开发者的默认选项。像 Kubernetes 等云原生技术正在成为技术人员的必修课,大量的工做岗位正在涌现出来。

这种背景下,“会 Kubernetes”已经远远不够了,“懂 Kubernetes”、“会云原生架构”的重要性正日益凸显出来。 从 2019 年开始,云原生技术将会大规模普及,这也是为何你们都要在这个时间点上学习和投资云原生技术的重要缘由。

10

阿里云和 CNCF 联合发布了《云原生技术公开课》,但愿经过 29 节课程设置让开发者对云原生有全局的认知。

阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,作最懂云原生开发者的技术公众号。