新鲜枣教室 | 来源
相信大家对于“云计算”这个词都非常熟悉。
作为IT行业的热门技术,它频繁出现在各大媒体的新闻报道中,BAT等互联网公司也经常提及它。
相信很多人都想学习云计算,跟上技术潮流,如果对云计算有一定的了解,应该或多或少听过这些名词——OpenStack、Hypervisor、KVM、Docker、K8S……
所有这些术语都属于云计算类别。
对于自学的初学者来说,了解这些名词的具体含义以及它们之间的关系并不容易。
网络上的资料虽然很多,但是杂乱无章,晦涩难懂,对于新手来说很不友好,容易让人头晕目眩,甚至放弃。
因此本文作为云计算的第一堂入门课,给大家做一个通俗易懂的宏观介绍,重点讲解最重要的几个名词以及它们之间的关系,希望对大家的入门有所帮助。
什么是云计算
在介绍那些奇怪的术语之前,我先来简单介绍一下云计算。
当计算机被发明的时候,还没有互联网,每台计算机(PC)都是一台独立的机器。
这个单机里面包含了CPU、内存、硬盘、显卡等硬件,用户在单机上安装操作系统和应用软件来完成工作。
后来,随着互联网的出现,独立的机器之间可以交换信息,协同工作。
后来随着单机的性能越来越强,服务器就应运而生了,人们发现可以把一些服务器集中起来放在一个机房里,然后让用户通过互联网来访问和使用机房里的计算机资源。
后来小网络变成了大网络,互联网诞生了;小机房变成了大机房,IDC(互联网数据中心)诞生了。
当越来越多的计算机资源和应用服务(比如浏览网页、下载电影)集中起来,就变成了“云计算”,无数个大型机房就变成了“云”。
云计算
是不是觉得太简单了?别担心,我们开始探索吧。
云计算的原理很简单,简单来说就是把计算机资源集中起来,放到互联网上,但是云计算的实现却比较复杂。
比如你只是在公司的小型机房里架设一台服务器,开通一个FTP下载服务,然后利用它在几个同事之间共享电影,这当然是非常简单的。
如是“双11”淘宝购物节,全球数十亿用户访问阿里巴巴的淘宝网站,每天有几十PB(1PB=1024TB=1024×1024GB)的访问量,每秒几百GB的流量……这不是几条网线、几台服务器就能解决的。
需要设计超大容量、超高并发(同时访问)、超快速度、超强安全性的云计算系统,满足业务流畅运行的要求。
这就是云计算的复杂性。
我刚才说了,我们把计算机资源放到云端,其实这些计算机资源分为几个层级:
第一级是最低级别的硬件资源,主要包括CPU(计算资源)、硬盘(存储资源)、网卡(网络资源)。
第二个层次比较高级,我不打算直接用CPU、硬盘、网卡,希望大家在我使用之前先安装好操作系统(比如Windows、Linux)和数据库软件。
第三级就比较高级了,你不但要安装操作系统等基础软件,还要安装具体的应用软件,比如FTP服务器软件,在线。。服务器软件等等,我才能直接使用服务。
这三个层次就是我们经常听到的IaaS、Paas、SaaS。
SaaS:软件即服务
PaaS:平台即服务
IaaS:基础设施即服务
再来一张图,可能更直观一些:
目前主流的云计算服务商,比如亚马逊AWS、阿里云、华为云等,简单来说都是提供以上三个层次的云资源,你想要什么他们就提供什么。
继续前进。
阿里巴巴和华为如何提供如此多样化、多层次的云计算服务?
难道这是人为安排的?
如果你想要一台八核CPU,16GB内存,500GB硬盘的服务器,阿里会安排工程师帮你组装吗?如果你要安装CentOS 7.2(类Linux操作系统)和MySQL 5.5.60(数据库系统),阿里会安排工程师帮你安装配置吗?
这显然是不可能的,耗费人力和时间。
因此,有各种负责调用和管理资源的软件和平台。
什么是虚拟化
如果要管理物理资源,第一步就是“虚拟化”。
虚拟化是云计算的基础,简单来说,虚拟化就是在一台物理服务器上运行多个“虚拟服务器”,这种虚拟服务器又称为虚拟机(VM)。
从表面上看,这些虚拟机是独立的服务器,但实际上,它们共享物理服务器的CPU、内存、硬件、网卡等资源。
物理机通常称为宿主机,虚拟机称为客户机。
谁来完成物理资源虚拟化的工作?
它就是大名鼎鼎的Hypervisor。
Hypervisor,中文翻译为“监控器”,又叫VMM(Virtual Machine Monitor),它并不是一种具体的软件,而是一类软件的统称。
虚拟机管理程序分为两类:
第一类是Hypervisor直接运行在物理机上,虚拟机在Hypervisor上运行;第二类是在物理机上安装普通操作系统(比如Linux或者Windows),然后在普通操作系统上安装Hypervisor来生成和管理虚拟机。
VMware、KVM、Xen 和 Virtual Box 都是虚拟机管理程序。
VMware大家应该很熟悉了,也就是VMware Workstation,很多人在学习Linux的时候,都是在Windows系统下安装WMware,然后创建一个Linux虚拟机。
不过真正强大的还是KVM(基于内核的虚拟机),它是目前最流行、最受追捧的虚拟化解决方案。
KVM 等 Hypervisor 软件其实提供的是模拟 CPU 运行的虚拟化能力,更加底层,但其用户交互性不佳,使用起来也不太方便。
因此,为了更好地管理虚拟机,需要OpenStack这样的云管理平台。
OpenStack 之前介绍过()。它有点像一个商店,负责管理产品(计算资源、存储资源、网络资源等)并销售给用户,但它自己并不制造产品(它没有虚拟化能力)。它的产品来自于 KVM。当然,如果你不使用 KVM,也可以使用其他的 hypervisor,比如 Xen。
OpenStack的管理界面比命令行好多了,对吧?
请记住,上面提到的概念,包括VM、KVM、OpenStack等,主要都是IaaS(Infrastructure as a Service,基础设施即服务)。这个不难理解吧?
容器与虚拟机
继续。
那么,什么是容器、Docker 和 K8S?
针对上面提到的虚拟化方法,人们使用了一段时间之后,发现了一些问题:
有时候不同的用户只是想运行一些简单的程序或者小的进程,为了避免互相干扰,就需要创建虚拟机,如果创建虚拟机显然有些浪费,而且操作也比较复杂,耗时。
而且有时候,如果你要迁移你的服务程序,你就得迁移整个虚拟机,显然这个迁移过程也会很复杂。
有没有什么办法可以更加灵活和快捷呢?
是的,这介绍了“容器”。
容器也是一种虚拟化,不过是“轻量级”的虚拟化,其目的和虚拟机一样,都是为了打造一个“隔离环境”。不过,容器和虚拟机又有很大的不同——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级别的资源隔离。
大家经常听到的Docker是一个创建容器的工具,也是一个应用程序容器引擎。
Docker的中文意思为码头工人,它的标志是一头背着很多集装箱的鲸鱼。
相比传统的虚拟机,Docker 的优势非常明显,启动速度非常快,秒级即可启动,资源利用率高(一台主机可以同时运行上千个 Docker 容器),占用空间非常小,虚拟机一般占用几 GB 到几十 GB,而容器仅占用几 MB 甚至几 KB。
除了Docker创建容器之外,我们还需要一个工具来编排容器。
这个工具就是K8S。
K8S 即 Kubernetes,中文意思为舵手或者领航员。Kubernetes 这个单词很长,所以人们就把中间的八个字母缩写为 8,就变成了 K8S。
K8S是一个容器集群管理系统,主要职责是容器编排——启动容器,自动化部署、扩展和管理容器应用,以及回收容器。
简单来说,K8S有点像容器的保姆,负责管理容器运行在哪台机器上、监控容器有没有问题、控制容器与外界的通信等等。
从下面的K8S体系结构图可以看出K8S与容器的关系。
除了K8S之外,还有很多其他的容器管理平台,比如Compose、Marathon、Swarm、Mesos等等。
Docker、K8S不再关注基础设施和物理资源,而是关注应用层,所以属于PaaS,明白了吗?
不管怎样,理清最关键的术语和概念,对云计算有一个框架性的理解,是学好云计算的第一步,祝大家好运!