【本节课目标】了解云原生的由来及基本概念
【云原生的发展历史】
2004年开始,Google已在内部大规模地使用容器技术。
2008年,Google将Cgroups合并进入了Linux内核。
2013年,Docker项目正式发布。
2014年,Kubernetes项目正式发布。
2015年,由Google、Redhat以及微软等大型云计算厂商以及一些开源公司共同牵头成立了CNCF(Cloud Native Computing Foundation)云原生计算基金会。
2017年,CNCF达到170个成员和14个基金项目;
2018年,CNCF成立三周年有了195个成员,19个基金会项目和11个孵化项目。
一、云原生定义
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。
我们通过将最前沿的模式民主化,让这些创新为大众所用。
github地址:
https://github.com/cncf/toc/blob/main/DEFINITION.md#%E4%B8%AD%E6
%96%87%E7%89%88%E6%9C%AC
中文文档
https://kubernetes.io/zh-cn/docs/home/
二、云原生技术栈
①容器化:以docker,containerd为代表的容器运行技术。
②服务网格:比如service Mesh等。
③微服务:在微服务体系结构中,一个项目是由多个松耦合且可独立部署的较小组件或服务组成。
④不可变基础设施:不可变基础设施可以理解为一个应用运行所需要的基本运行需求,不可变最基本的就是指运行服务的服务器在完成部署后,就不在进行更改,比如镜像等。
⑤声明式API:描述应用程序的运行状态,并且由系统来决定如何来创建这个环境,例如声明一个pod,会有k8s执行创建并维持副本。
三、云原生特征及12要素
符合12因素应用,12要素应用程序是一种构建应用程序的方法.
面向微服务架构.自服务敏捷架构.
基于 API 的协作.
抗脆弱性
12 因素应用:
1、基准代码:一份基准代码,多份部署(用同一个代码库进行版本控制,并可进行多次部署)。
2、依赖:显式地声明和隔离相互之间的依赖。
3、配置:在环境中存储配置。
4、后端服务:把后端服务当作一种附加资源。
5、构建,发布,运行:对程序执行构建或打包,并严格分离构建和运行。
6、进程:以一个或多个无状态进程运行应用。
7、端口绑定:通过端口绑定提供服务。
8、并发:通过进程模型进行扩展。
9、易处理:快速地启动,优雅地终止,最大程度上保持健壮性。
10、开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同。
11、日志:将所有运行中进程和后端服务的输出流按照时间顺序统一收集存储和展示。
12、管理进程:一次性管理进程(数据备份等)应该和正常的常驻进程使用同样的运行环境。
四、CNCF基金会发展
1、CNCF介绍
CNCF:全称Cloud Native Computing Foundation(云原生计算基金会)
成立于2015年12月11日,是一个开源软件基金会,它致力于云原生(Cloud Native)1技术的普及和可持续发展。
成立CNCF这个组织的初衷或者愿景,简单说:
推动云原生计算可持续发展;帮助云原生技术开发人员快速地构建出色的产品;
【官网】https://www.cncf.io/
2、CNCF Landscape路线图
CNCF Landscape最重要的产出包括一个路线图和一个全景图。
路线图(Trail Map)
是CNCF对云原生用户使用开源项目以及云原生技术的推荐过程。
在路线图的每个步骤中,用户都可以选择供应商支持的产品或自己动手使用开源项目。
资源链接
CNCF组织介绍
Cloud Native Computing Foundation,云原生计算基金会(以下简称CNCF)是一个开源软件基金会,它致力于云原生(Cloud Native)技术的普及和可持续发展。云原生技术是通过一系列的软件、规范和标准帮助企业和组织,在现代的动态环境(如公共云、私有云和混合云)中构建和运行敏捷的、可扩展的应用程序。容器、微服务、微服务治理、声明式API等都是代表性的云原生技术。这些技术使松散耦合的系统具有更好的弹性、可管理性,同时更容易被监控和观察。这些技术通过与强大的自动化工具相结合,允许工程师频繁地、可预见地对系统进行任意的更改,并尽可能减少由此带来的工作量(在这些云原生技术和框架被采用之前,相信大家都有过针对系统任何一个小改动,都需要整个开发、测试、运维团队投入大量工作的痛苦经历),而这就是云原生技术最希望为技术团队以及业务带来的价值。
在每年的CNCF年度报告中都会提及CNCF Landscape,CNCF Landscape是CNCF中的一个重要项目,它始于2016年11月,旨在为云原生应用者提供一个资源地图,帮助企业和开发人员快速了解云原生体系的全貌。CNCF Landscape项目在Github上已经获得超过5000颗星,表明广大开发者和使用者对该项目的关注和重视。CNCF Landscape通过对云原生技术中的大多数项目和产品进行分类,来追踪整个生态中的大量应用。
整个路线图分成了十个步骤,每个步骤都是用户或平台开发者将云原生技术在实际环境一中落地时,需要循序渐进思考和处理的问题:
1.容器化
目前最流行的容器化技术是Docker,你可以将任意大小的应用程序和依赖项,甚至在模拟器上运行的一些程序,都进行容器化。随着时间的推移,你还可以对应用程序进行分割,并将未来的功能编写为微服务。
创建CI/CD环境,从而使源代码上的任意修改,都能够自动通过容器进行编译、测试,并被部署到预生产甚至生产环境中。
3,应用编排(Kubernetes)
Kubernetes是目前市场上应用编排领域被最广泛应用的工具,Helm Charts可以用来帮助应用开发和发布者用于升级Kubernetes上运行的应用。
4.监控和分析
在这一步中,用户需要为平台选择监控、日志以及跟踪的相关工具,例如将Prometheus用于监控、Fluentd用于日志、Jaeger用于整个应用调用链的跟踪。
5.服务代理、发现和治理
CoreDNS、Envoy和LInkerd可以分别用于服务发现和服务治理,提供服务的健康检查、请求路由、和负载均衡等功能。
6,网络
Calico、Flannel以及weave Net等软件用于提供更灵活的网络功能。
7.分布式数据库和存储
分布式数据库可以提供更好的弹性和伸缩性能,但同时需要专业的容器存储予以支持。
8,流和消息处理
当应用需要比JSON-REST这个模式更高的性能时,可以考虑使用gRPC或者NATS,gRPC是一个通用的RPC(远程调用)框架。 (类似各种框架中的RPC调用),NATS是一个发布/订阅和负载均衡的消息队列系统。
9·容器镜像库和运行环境
Harbor是目前最受欢迎的容器镜像库,同时,你也可以选择使用不同的容器运行环境用于运行容器程序。
10.软件发布
最后可以借助Notary等软件用于软件的安全发布。
3、云原生景观图
CNCF Landscape路线图从实践步骤上帮助用户梳理了整个云原生应用的最佳流程。 然而整个实践过程中的每个环节,用户都需要了解有哪些具体的软件和产品选择, 这就是CNCF Landscape全景图发挥作用的地方了(https://landscape.cncf.io/)。
4、总结
我们可以简单地把云原生理解为
云原生 = 容器化(docker+k8s)
+ 微服务(Microservices)
+无服务(Serverless)
+ Devops
+ Service Mesh(服务网格)
+云(cloud)