玩转OpenStack
一、OpenStack包含那些内容
1、预备知识
首先会有虚拟化和云计算的“预备知识”,会介绍 KVM,IaaS 等技术。
2、OpenStack核心
包含OpenStack的架构和和各个核心组件。
二、虚拟化的介绍
虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。
根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:
1型虚拟化和2型虚拟化
1型虚拟化
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。
2型虚拟化
物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。
理论上讲:
1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;
2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。
三、KVM
下面重点介绍KVM这种2型虚拟化技术。
基本概念
在 x86 平台上最热门运用最广泛的虚拟化方案莫过于 KVM 了。OpenStack 对 KVM 支持得也最好,我们的教程也理所当然选择 KVM 作为 实验环境的 Hypervisor。
KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。
那 IO 的虚拟化,比如存储和网络设备由谁实现呢?
这个就交给 Linux 内核和Qemu来实现。
说白了,作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。
Libvirt
大家在网上看 KVM 相关文章的时候肯定经常会看到 Libvirt 这个东西。
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
KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境
KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 Linux。Ubuntu、Redhat、CentOS 都可以,这里我们以 Ubuntu14.04 为例。
基本的 Ubuntu 操作系统装好之后,安装 KVM 需要的包
1
|
$ sudo apt-get install qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan -y |
通过这些安装包我们顺便复习一下上一节介绍的 KVM 的相关知识。
-
qemu-kvm 和 qemu-system 是 KVM 和 QEMU 的核心包,提供 CPU、内存和 IO 虚拟化功能
-
libvirt-bin 就是 libvirt,用于管理 KVM 等 Hypervisor
-
virt-manager 是 KVM 图形化管理工具
-
bridge-utils 和 vlan,主要是网络虚拟化需要,KVM 网络虚拟化的实现是基于 linux-bridge 和 VLAN,后面我们会讨论。
Ubuntu 默认不安装图形界面,手工安装一下
1
2
3
|
sudo apt-get install xinit sudo apt-get install gdm sudo apt-get install kubuntu-desktop |
小提示:
Redhat 和 CentOS 安装相对简单,安装过程中选择虚拟化和图形组件就可以了。
在虚拟机上做实验
作为 2型虚拟化的 KVM,是支持虚拟化嵌套,这使得我们可以在虚拟机中实验 KVM。 比如我在 VMWare Workstation 中安装了一个 Ubuntu14.04 的虚拟机,为了能让 KVM 能创建 嵌套的虚机,要把 CPU 的虚拟化功能打开。如下图在 VMWare 中设置以下 CPU 的模式。
Ubuntu 启动后,用以下命令确认 CPU 支持虚拟化
1
2
|
# egrep -o '(vmx|svm)' /proc/cpuinfo # vmx |
确认 Libvirtd 服务已经启动
1
2
|
# service libvirt-bin status libvirt-bin start /running , process 1478 |
启动第一个KVM虚拟机
使用 virt-manager 启动 KVM 虚机
首先通过命令 virt-manager 启动图形界面
# sudo virt-manager #在root用户下执行这条命令需要加上sudo否则报错
Error: (注意这个坑)
点上面的图标创建虚机
给虚机命名为 kvm1,这里选择从哪里启动虚机。如果是安装新的 OS,可以选择第一项。如果已经有安装好的镜像文件,选最后一项(如上图)
接下来需要告诉 virt-manager 镜像的位置。
点击 “Browser”
在我的系统中存放了一个 cirros-0.3.3-x86_64-disk.img 镜像文件 。cirros 是一个很小的 linux 镜像,非常适合测试用,大家可以到 http://download.cirros-cloud.net/ 下载,然后放到 /var/lib/libvirt/images/ 目录下,这是 KVM 默认查找镜像文件的地方。
镜像文件下载地址:
wget -P /tmp/images http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
为虚拟机分配 CPU 和内存
点击 “Forward”, 再确认一下信息,就可以启动虚机了。
virt-manager 会打开虚机 kvm1 的控制台窗口,可以看到启动情况
virt-manager 可以对虚机进行各种管理操作,界面直观友好,很容易上手。 同时我们也可以用命令 virsh 管理虚机,比如查看宿主机上的虚机
1
2
3
4
|
root@ubuntu:~ # virsh list Id Name State -------------------------------- 8 kvm1 running |
至此,第一个虚机已经跑起来了,采用的都是默认设置,后面我们会逐步讨论有关虚机更细节的内容,比如存储和网卡的设置。