云计算真的那么“高大上”?

作为IT行业的热门技术,云计算越来越受欢迎,如果对云计算有一定了解的话,应该或多多少听到过这些词:

Openstack,

Hypervisor

Kvm

Docker

K8s

这些名词,全都属于云计算的范畴。

 

什么是云计算?

以前电脑被发明的时候,还没有网络,每个电脑(pc)就是一台单机。这台单机包括cpu,mem,disk,显卡等硬件。用户在单机上,安装操作系统和应用软件,完成自己的工作。

后来,有了网络,单机与单机之间,可以交换信息,协同工作。

再后来,单机性能越来越强,就有了服务器(server),人们发现,可以把一些服务器集中起来,放在机房中,让用户通过网络,去访问和使用机房里的计算机资源。

再再后来,小型网络变成了大型网络,就有了互联网(internet)。小型机房变成了大型机房,就有了IDC(internet data center)。当越来越多的计算机资源和应用服务(application,例如看网页,下电影)被集中起来,就成了“云计算”。无数的大型机房,就成了“云端”。

云计算的道理是简单的,说白了,就是把计算机资源集中起来,放在网络上。但是,云计算的实现方式就复杂了。

例子:

如果你只是在公司小机房摆了一个服务器,开了ftp下载服务,然后用于几个同事之间的电影分享,当然是很简单的。但是如果是双11的淘宝购物节,全球几十亿用户访问阿里巴巴的淘宝网站,单日几十PB(1PB=1024TB=1024*1024GB)的访问量,每秒几百GB的流量,这就不是几根网线几台服务器能解决的了。

这时就需要设计一个超大容量,超高并行(同时访问),超快速度,超强安全的云计算系统,而这正是云计算的复杂之处。我们把计算机资源放在云端。这个计算机资源实际分为好几种层次:

第一层次,是最底层的硬件资源,主要包括CPU(计算资源),硬盘(存储资源),网卡(网络资源)等。

第一层次IaaS: Infrastructure-as-a-Service(基础设施即服务)

第二层次,要高级一些,我不打算直接使用cpu,硬盘,网卡,我希望你把操作系统(例如windows,linux)装好,把数据库软件装好,我直接再来使用。

第二层次PaaS: Platform-as-a-Service(平台即服务)

第三层次,更高级一点,你不但要装好操作系统这些基本的,还要把具体的应用软件装好,例如FTP服务端软件,在线视频服务端软件等,我可以直接使用服务。

第三层次SaaS: Software-as-a-Service(软件即服务)

 

目前主流的云计算服务提供商,例如亚马逊AWS,阿里云,华为云,说白了,都是为大家提供以上三个层次的云资源,你要什么他们就提供什么。

那么这些云计算服务提供商又如何提供多层次的云计算服务?

难道是人工安排,这显然是不可能的,耗不起人力,也等不起时间。

于是,就有了各种软件和平台,负责对资源调用和管理。

如果要对物理资源进行管理,第一步,就是“虚拟化”。

虚拟化是云计算的基础,简单来说,虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”,这些虚拟服务器从表面看都是独立的服务器,但实际上他们共享物理服务器的CPU,内存,硬件,网卡等资源。

物理机,通常称为“宿主机(host)”,虚拟机,则称为“客户机”。

那么怎样来完成物理资源虚拟化的工作,就是Hypervisor.

什么是Hypervisor(超级监督者)

首先,我们要明确的是Hypervisor不是一款具体的软件,而是一类软件的统称。Hypervisor是一种运行在物理服务器和操作系统之间的软件层,可允许多个操作系统和应用共享一套基础物理硬件,它可以协调访问服务器上所有物理设备和虚拟机,也叫虚拟监视器(virtual machine monitor)。Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,会给每一台虚拟机分配适量的内存,cpu,网络和磁盘,并加载所有虚拟机的客户操作系统。

 

Hypervisir的特点:

软硬件架构和管理更高效,更灵活,硬件的效能能够更好的发挥出来。

Hypervisor分为两大类:

(1) Hypervisor直接运行在物理机上,虚拟机运行在Hypervisor上。Hypervisor实现方式一般是一个特殊定制的linux系统。Xen和VMware的ESXI都属于这个类型。

 

(2)物理机上安装正常的操作系统,比如Redhat,Ubuntu和Windows。Hypervisor作为OS上一个程序模块运行,然后在正常操作系统上安装Hypervisor,生成和管理虚拟机。

 

理论上讲:1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

像vmware,kvm,xen,virtual box等都属于Hypervisor。

Hypervisor优点:

(1) 提高主机硬件的使用效率:因为一个主机可以运行多个虚拟机,这样主机的硬件资源能被高效充分的利用起来。

(2) 虚拟机移动性强:传统软件强烈捆绑在硬件上,转移一个软件至另一个服务器上耗时耗力(比如重新安装);然而,虚拟机与硬件是独立的,这样使得虚拟机可以在本地或远程虚拟服务器上低消耗转移。

(3) 虚拟机彼此独立:一个虚拟机的损毁不会影响其他分享同一硬件资源的虚拟机,大大提升安全性。

(4) 易于保护与恢复。Snapshot(快照)技术可以记录下某一时间点下的虚拟机状态,这使得虚拟机在错误发生后能快速恢复。

在Hypervisor软件中,最厉害的是KVM(kernel-based virtual machine.基于linux内核的虚拟机),它是目前最热门最受追捧的虚拟化方案。

 

KVM:Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。

 

KVM所支持的功能包括:

(1)支持cpu和memory超分;

(2)支持半虚拟化I/O;

(3)支持热插拔(cpu,块设备,网络设备)

(4)支持对称多处理(symmetric multi-processing)

(5) 支持实时迁移(live migration)

(6) 支持PCI设备直接分配和单根I/O虚拟化(SR-IOV)

(7) 支持内核同页合并(KSM)

(8) 支持NUMA(NOn-uniform memory access,非一致存储访问结构)

KVM工具集合

(1)libvirt:操作和管理KVM虚拟机的虚拟化API,使用C语言编写,可以由python,ruby,perl,PHP,java等语言调用。可以操作包括KVm,vmware,XEN,HYPER-v等Hyprtvisor.

(2)Virsh:基于libvirt的命令行工具;

(3)Virt-manager:基于libvirt的GUI工具;

(4)Virt-v2v:虚拟机格式迁移工具;

(5)Virt-*工具:包括virt-install(创建KVM虚拟机的命令行工具),virt-viewer(连接到虚拟屏幕的工具),virt-clone(虚拟机克隆工具),virt-top等。

(6)sVirt:安全工具。

KVM缺点:

KVM提供了一种虚拟化能力,模拟cpu的运行,但是它的用户交互并不良好,不方便使用。

于是,为了更多的管理虚拟机,就需要openstack这样的云管理平台。

 

openstack

Openstack有点像商城,负责管理商品(计算资源,存储资源,网络资源),卖给用户,但它本身不制造商品(不具备虚拟化能力),它的商品,来自于KVM,当然,如果不用KVM,也可以用Xen等其他Hypervisor。

OPenstack支持几乎所有类型的云计算,项目目标是提供实施简单,可大规模扩展,丰富,标准统一的云计算管理平台。它通过各种互补的服务提供了基础设施即服务(Iaas)的解决方案,每个服务提供API以进行集成。Openstack包含两个主要模块:

Nova和Swift。前者是NASA开发的虚拟服务器部署和业务计算模块;后者是Rackspace开发的分布式云存储模块。两者可以一起用,也可以分开单独用。

Openstack是laas(基础设施即服务)组件,让任何人都可以自行建立和提供云端运算服务。

此外,openstack也用于建立防火墙内的“私有云”(private cloud),提供机构或企业内各部门共享资源。

 

Openstack覆盖了网络,虚拟化,操作系统,服务器等各个方面。它是一个正在开发中的云计算平台项目,下面列出10个核心项目(即openstack服务)

(1)计算:Nova。一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建,开机,关机,挂起,暂停,调整,迁移,销毁等操作,配置cpu,内存等信息规格。

(2)对象存储:swift。一套用于在大规模可扩充系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供卷备份服务。

(3)镜像服务:Glance。一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKI,AMI,ARI,ISO,RAW,VDI,VHD,VMDK),有创建上传镜像,删除镜像,编辑镜像基本信息的功能。

(4)身份服务:keystone。为openstack其他服务提供身份验证,服务规则和服务令牌的功能,管理Domains,projects.Users,Groups,Roles.

(5)网络&地址管理:Neutron.提供云计算的网络虚拟化技术,为OPenstack其他服务提供网络连接服务。为用户提供接口,可以定义network,subnet,router,配置DHCP,DNS,负载均衡,L3服务,网络支持GRE,VLAN。插件架构支持许多主流的网络厂家和技术,如openvswitch。

(6)块存储:Cinder。为运行实例提供稳定的数据块存储服务,它的插件驱动架构有利于块设备的创建和管理,如创建卷,删除卷,在实例上挂载和卸载卷。

(7)UI界面:Horizon。Openstack中各种服务的web管理门户,用于简化用户对服务的操作,例如:启动实例,分配IP地址,配置访问控制等。

(8)测量:Ceilometer像一个漏斗一样,能把openstack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其他服务提供数据支撑。

(9)部署编排:Heat。提供了一种通过模板定义的协同部署方式,实现云基础设施软件运行环境(计算,存储和网络资源)的自动化部署。

(10)数据库服务:trove,为用户在openstack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。

 

可是在我们一直采用虚拟化方式一段时间后,我们发现了一些问题:

不同的用户,有时候只是希望运行各自的一些简单程序,跑一个小进程。为了不相互影响,就要建立虚拟机。如果建立虚拟机,显然浪费就会有点大,而且操作也比较复杂,花费时间也会比较长。而且有时候想要迁移自己的服务程序,就要迁移整个虚拟机,显然,迁移过程也会很复杂。

这时候容器就出现了。容器也是虚拟化,但是属于“轻量级”的虚拟化。它的目的和虚拟机一样,都是为了创造“隔离环境”。但是,它又和虚拟机有很大的不同----------虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。

 

Docker用于创建容器,K8s(Kubernotes,由于单词太长,所以大家把中间的8个字母缩写成8,就成了k8s)是一个容器集群管理系统,主要职责是容器编排(container orchestration)----启动容器,自动化部署,扩展和管理容器应用,还有回收容器。

简单来说,K8s有点像容器的保姆,它负责管理容器在那个机器上运行,监控容器是否存在问题,控制容器和外界的通信等。

 

除了k8s之外,还有很多种容器管理平台,例如:compose,marathon,swarm,mesos等。

这里需要注意的是:Docker和K8s不再关注的是基础设施和物理资源,而是应用层,所以就属于Paas(平台即服务)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值