一、云原生定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
二、云原生技术栈:
1、容器化:以docker、container为代表的容器运行技术。
2、服务网格:比如Service Mesh等。
3、微服务:在微服务的体系中,一个大的项目是由多个松耦合、可独立部署、较小的组件/服务构成。
4、不可变基础设施:即一个应用运行所需要的基本运行需求,例如计算、网络、存储等。在云原生中的基础设施是不可变、可编程的。即可以通过申明API与策略来进行调配和管理,但是在完成部署后就不能进行更改,只能删旧换新。
5、声明式API:描述应用程序的运行状态,并且由系统来决定如何来创建这个环境。例如,申明一个Pod,会有K8S执行创建并维护副本。
三、云原生特征:
1、符合12要素构建的应用程序。
2、面向微服务架构。
3、自服务敏捷架构。
4、基于API的协作。
5、抗脆弱性。
四、方法论:12要素:
1、基准代码:即一份基准代码,多份部署。(应用对应的代码既可以在测试环境部署,也可以在生产环境,即代码相同)
2、依赖:即显示声明依赖关系。一方面,有利于管理依赖;另一方面,新开发可以通过一条命令安装所有的依赖解决环境配置问题。
3、配置:即在环境中存储配置——>将应用的配置信息存储到环境变量中,便于在不同的部署环境进行配置修改。
4、后端服务:指在应用运行时所需通过网络调用的各种服务。也可看作为附加资源,例如Mysql、Redis、ActiveMQ等,部署时按需伸缩。
5、构建、发布、运行:构建——应用代码打包的过程;发布——在环境中部署代码包;构建——启动应用。强调严格分离构建和运行。
6、进程:正在运行的应用程序,以一个或多个无状态进程的形式存在。
7、端口绑定:即可以通过IP+端口的方式来访问服务。
8、并发:一个应用程序可以有多个计算单元,通过进程模型进行扩展。
9、易处理:应用可以快速启动和停止。
10、开发环境与线上环境等价:减少各环境、环节之间的差异。
11、日志:是记录日期、时间、操作者及动作等相关信息的文件,强调日志是按照时间顺序汇总的事件流。
12、管理进程:执行管理与维护应用的任务。强调一次性运行需要执行的管理与维护应用的任务,并且管理进程需要与应用的环境保持一致。
云原生景观图:https://landscape.cncf.io/
五、云原生应用的构造步骤:
大体来说分为四个步骤:
1、立项思维:核心为Devops,在构建应用之前,改变以往运维、开发分立的局面,促进运维和开发高效协同工作。
2、应用开发:核心为微服务,根据业务需求将整体业务设计为松耦合的服务,以API驱动,满足12要素。
3、基础设施:核心为容器,通过容器去构建不可变基础设施,通过以旧换新,解决环境差异、大规模运维等问题。
4、持续交付:核心为CI/CD,即持续集成、持续部署与持续发布,便于应用的构建、测试和发布变得快捷。