OpenStack 基础知识
前言
了解openstack之前需要掌握虚拟化、云计算等基础知识
一、虚拟化
首先我们先了解一下什么是虚拟化,虚拟化是云计算的基础。简单来说,虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也叫虚拟机(VM,Virtual Machine)。
从表面来看,这些虚拟机都是独立的服务器,但实际上,它们共享物理服务器的CPU、内存、硬件、网卡等资源。物理机,通常称为“宿主机(Host)”。虚拟机,则称为“客户机(Guest)”。
虚拟化使用软件来模拟硬件并创建虚拟计算机系统。这样一来,企业便可以在单台服务器上运行多个虚拟系统,也就是运行多个操作系统和应用,而这可以实现规模经济以及提高效益。
在云计算上虚拟化技术能为我们解决很多以前解决不了的技术:
服务器整合技术:这个技术在没有虚拟化技术之前是很难完成的。因为什么东西都是实际存在的,想把两个工作相对较少的服务器整合到一起是很困难的。然而当有了虚拟化技术以后使这种服务器整合技术变得非常容易。
灵活的资源调派:通过虚拟化技术,我们可以动态调配资源给VM,并让它在不同的实体主机之间做到不停机地移转(VMotion),避免硬件因为计划性的停机维护而不能提供服务。当虚拟机无法在实体机中取得足够硬件资源的时候,我们还可以让它自动去找寻闲置有足够资源的实体机,并在线转移过去,进行服务器的资源负载平衡(DRS 功能)。经过虚拟化之后,原本困难费心的事情变得很轻松容易实现。
快速大量部署、降低维护工作:要快速产生一台或多台合乎标准的虚拟机是非常容易的,这省下了采购硬件的流程、安装软件时间、后续硬件维护等多道麻烦手续,非常快速与方便地用于开发、测试、维运等环境上面。
增加可用性与备份:使用虚拟快照技术是将虚拟机此时的状态像照片一样保存下来,当然我说的很容易,其实现原理需要非常复杂,包括cpu运行状态,内存中的数据等等。这样保存下这些虚拟技术当发生灾难或者某些失误导致虚拟机出问题时,可以很快恢复。
虚拟化技术最早是IBM公司在上世纪60年代末所提出的,当时 IBM 公司为实现多用户对大型计算机同时交互访问而开发的一套被称之为虚拟机监视器(Virtual Machine Monitor 简称为 VMM)的软件。在现在的虚拟化技术中,VMM 是运行在硬件服务器和操作系统中间层的软件,它方便同时有多个相同或不同的操作系统和应用共享底层硬件基础设施。在云计算中常提及的Hypervisor与 VMM 具有相同含义,其实质是一种资源配置的管理技术。
Hypervisor,汉译过来是“超级监督者”,也叫做VMM(Virtual Machine Monitor,虚拟机监视器)。它不是一款具体的软件,而是一类软件的统称。
Hypervisor分为两大类:
第一类,hypervisor直接运行在物理机之上。虚拟机运行在hypervisor之上。第二类,物理机上安装正常的操作系统(例如Linux或Windows),然后在正常操作系统上安装hypervisor,生成和管理虚拟机。
像VMware、KVM、Xen、Virtual Box,都属于Hypervisor。
VMware大家应该很熟悉,就是VMware Workstation。学习Linux的话,很多人都是在windows系统下安装WMware,然后创建Linux虚拟机。
但是,真正厉害的,是 KVM(kernel-based virtual machine,基于Linux内核的虚拟机)。它是目前最热门最受追捧的虚拟化方案,在云计算领域目前用的虚拟机技术最多的也是KVM。
1.I型虚拟化
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。
2.II型虚拟化
物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。
理论上讲:
I型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;
II型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。
二、KVM & Libvirt
在 x86 平台上最热门运用最广泛的虚拟化方案莫过于 KVM 了。OpenStack 对 KVM 支持得也最好。
KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。
那 IO 的虚拟化,比如存储和网络设备由谁实现呢?
这个就交给 Linux 内核和Qemu来实现。说白了,作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。
Libvirt简单说就是 KVM 的管理工具。
其实,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。OpenStack 底层也使用 Libvirt,所以很有必要学习一下。
Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh
libvirtd是服务程序,接收和处理 API 请求;
API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;
virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。
作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。