一、虚拟化
虚拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、网络、内存、磁盘等)予以抽象和转换后呈现出来,打破实体间不可切割的障碍。在实际的生产环境中,虚拟化主要解决高性能的物理硬件产能过剩和老旧物理硬件产能过低的重组重用两个问题。
常用的虚拟化技术:
Docker:
Docker是容器技术,其是基于进程级别的隔离,是在操作系统内部进程与进程间的隔离。
Docker可以用来做服务应用开发(测试、部署、发版实现可持续发布)和pass、sass等云计算领域
KVM:
KVM是集成在Linux内核中的虚拟化技术,可以使用Linux基于硬件的方式进行隔离,这种隔离方式是直接隔离的硬件,因此隔离的更彻底。
KVM可以用来做公有云、私有云和混合云等虚拟化技术,同时由于KVM隔离的更彻底,因此要构建安全级别更高的私有云,就必须使用KVM。
OpenStack:
OpenStack技术是虚拟机云计算基础设置层管理平台,例如网络、磁盘、CPU、内存等
VMware:
虚拟机的PC端管理平台
二、云原生
(一)云原生
云原生是一种软件架构开发思想,其作用(目的)就是为了让开发的所有程序都运行在容器中。
云原生有容器化、微服务、devops、ci/cd四个特点:
容器化:这也是云原生的目的,就是开发的所有程序都运行在容器中,使各个项目进行隔离。
微服务:实现云原生,最好采用微服务架构(CNCF-云原生计算基金会:微服务 + 容器化 + service mesh)
devops:开发+运维,开发和运维的合体,devops是一种敏捷开发的思想,一种组织形式,可以实现项目的可持续交付、部署。
ci/cd:可持续集成、可持续部署
云架构扩容思维:
云计算的三个层次模型分别为Iaas、Paas、Saas。
iaas:基础设施级服务,例如物理机,kvm
paas:平台级服务,云平台,例如常见的阿里云
saas:软件级服务,在paas的基础上增减软件,例如阿里云的mysql数据库
除了这三个层次模型外,还有Caas、Faas、Service mesh、serviceless等
Caas:容器级服务,所有的服务都运行在容器内
Faas:函数级服务,即微服务架构
Service Mesh:服务网络架构,主要是来做服务治理的,例如链路追踪、服务限流、服务降级、服务监控等
serverless:无服务器开发,开发时开发者只需要关注应用即可,不需要关注服务器。
本地应用部署和云原生对比
对比 | 本地部署 | 云原生 |
代码更新 | 停机更新 | 不需要停机即可更新,始终会保持最新状态,支持频繁的更新 |
扩容 | 不支持动态扩容 | 可以动态伸缩进行扩容 |
环境要求 | 对物理硬件、网络、端口等强依赖 | 对物理硬件、网络、端口等不依赖,其物理资源是隔离的,可以实现服务器无缝迁移 |
运维 | 需要人工运维 | 实现了自动化运维 |
对于云原生的微服务架构,主要使用Spring Cloud,同时利用K8s将服务部署到云端。
(二)服务部署的演变
服务部署的演变分为三个阶段:物理机部署模式、虚拟机部署模式、容器化部署模式。但是随着服务越来越多,容器化部署并不能解决扩容、宕机恢复、容器监控、服务调度、数据安全等问题,因此服务编排工具就应运而生。
目前对于容器进行管理的三大主流平台为Swarm、Mesos、K8s
Swarm:其特点是直接调度Docker容器,并且提供和标准Docker API一致的API。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源,管理者管理的对象不是服务器层面,而是集群层面的,也就是说通过Manager只能笼统的向集群发出指令而不能具体到服务器要干什么。粒度比较粗,对于比较复杂的场景无法支持,例如对同一个服务部署一千个实例,仍然需要手动部署。
Mesos:Mesos针对不同的运行框架采取独立的调度系统,其框架提供了Docker容器的原生支持。Mesos并不负责调度而是负责委派授权,因为很多框架都自己实现了复杂的调度。
K8s:K8s采用了pod和Lable这样的概念把容器组合成一个个互相存在依赖关系的逻辑单元,相关容器被组成pod后会被一起调度和部署,这是K8S和Swarm、Mesos最大的区别,使用K8S可以:
自动化容器的部署和复制
随时扩展和收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易的升级应用程序容器的新版本
提供弹性的容器等