OpenStack 涉及的知识领域极广
可以说涵盖了IT基础设施的所有范围。计算、存储、网络、虚拟化、高可用、安全、备。。。。。。无所不包。
OpenStack 是一个平台,不是一个具体的实施方案
OpenStack的各个组件都采用Driver的架构,支持各种具体的实现技术。比如 OpenStack 的存储服务Cinder只定义了上层抽象API,具体的实现交给下面的各种Driver,比如基于LVM的iSCSI Driver,EMC、IBM等商业存储产品的Driver,或者是开源的分布式存储软件,比如Ceph、GlusterFS的Driver。
正是因为这种架构上的灵活性,使得初学者在学习OpenStack的时候不会像学习其他具体软件产品那样容易上手。
OpenStack 本身是一个分布式系统
大多数搞 IT 的对分布式计算都不会太熟悉。直接冲进来会被 OpenStack 繁多的组件以及他们之间的交互方式搞得云里雾里。
虽然 OpenStack 学习曲线比较陡峭,掌握起来难道较大,但 OpenStack 目前已经是 IaaS 云的事实标准,而且前途一片光明,对于我们搞 IT 的如果能啃下这个骨头,必定能大大提升自身的竞争力。
写给谁看
这套教程的目标读者包括:
OpenStack初学者
学习 OpenStack 也是经历了一个艰辛曲折的过程。其主要原因在于没有找到一个系统教授OpenStack的教程,特别是针对初学者。大部分资料都比较分散,对于初学者无法有机地串起来。也正是因为这个原因,编写这样一套教程的想法,能够让初学者能够少走弯路,系统地学习、掌握和实践 OpenStack。
OpenStack 实施工程师
把自己定位成一个能到一线攻城拔寨的实施工程师。所以这个教程也是针对 OpenStack 的实施人员,让他们能够通过学习真正掌握部署OpenStack 的知识、技能以及故障排查技巧。
包含哪些内容?
如下图,两大块:
预备知识
因为面向初学者,首先会有虚拟化和云计算的“预备知识”,会介绍 KVM,IaaS 等技术。
OpenStack核心
这是主要内容,包含OpenStack的架构和和各个核心组件。将会通过大量的案例、操作步骤、截图、日志来帮助大家理解 OpenStack 各组件是如何工作的。
其目标是让各位可以根据客户的需求进行配置和调整。
为啥叫《玩转 OpenStack》?
每次的内容只包3-6个知识点,这也是我把教程命名为《玩转 OpenStack》的原因。虽然是碎片化推送,但整个教程是系统、连贯和完整的,只是化整为零了。
虚拟化
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
1. libvirtd是服务程序,接收和处理 API 请求;
2. API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具,后面我们也会介绍;
3. virsh 是我们经常要用的 KVM 命令行工具,后面会有使用的示例。
作为 KVM 和 OpenStack 的实施人员,virsh 和 virt-manager 是一定要会用的。
准备 KVM 实验环境
KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境
安装 KVM
上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 Linux。Ubuntu、Redhat、CentOS 都可以,这里我们以 Ubuntu14.04 为例。
基本的 Ubuntu 操作系统装好之后,安装 KVM 需要的包
$ sudo apt-get install qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan
通过这些安装包我们顺便复习一下上一节介绍的 KVM 的相关知识。
1. qemu-kvm 和 qemu-system 是 KVM 和 QEMU 的核心包,提供 CPU,内存和 IO 虚拟化功能
2. libvirt-bin 就是 libvirt,用于管理 KVM 等 Hypervisor
3. virt-manager 是 KVM 图形化管理工具
4. bridge-utils 和 vlan,主要是网络虚拟化需要,KVM 网络虚拟化的实现是基于 linux-bridge 和 VLAN,后面我们会讨论。
Ubuntu 默认不安装图形界面,手工安装一下
sudo apt-get install xinit
sudo apt-get install gdms
udo apt-get install kubuntu-desktop
apt 默认会到官网上去下载安装包,速度很慢,我们可以使用国内的镜像站点。
配置/etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
然后执行下面命令更新安装包 index
# apt update
Redhat 和 CentOS 安装相对简单,安装过程中选择虚拟化和图形组件就可以了。
小窍门:Ubuntu 默认是不允许 root 通过 ssh 直接登录的,可以修改 /etc/ssh/sshd_config,设置
PermitRootLogin yes
然后重启 ssh 服务即可
# service ssh restartssh stop/waitingssh start/running, process 27639
在虚拟机上做实验
作为 2型虚拟化的 KVM,是支持虚拟化嵌套,这使得我们可以在虚拟机中实验 KVM。 比如我在 VMWare Workstation 中安装了一个 Ubuntu14.04 的虚拟机,为了能让 KVM 能创建 嵌套的虚机,要把 CPU 的虚拟化功能打开。如下图在 VMWare 中设置以下 CPU 的模式
Ubuntu 启动后,用以下命令确认 CPU 支持虚拟化
# egrep -o '(vmx|svm)' /proc/cpuinfo# vmx
确认 Libvirtd 服务已经启动
# service libvirt-bin statuslibvirt-bin start/running, process 1478
启动第一个 KVM 虚机
本节演示如何使用 virt-manager 启动 KVM 虚机。
首先通过命令 virt-manager 启动图形界面
# virt-manager
点上面的图标创建虚机
给虚机命名为 kvm1,这里选择从哪里启动虚机。如果是安装新的 OS,可以选择第一项。如果已经有安装好的镜像文件,
选最后一项(如上图)
接下来需要告诉 virt-manager 镜像的位置。
点击 “Browser”
在我的系统中存放了一个 cirros-0.3.3-x86_64-disk.img 镜像文件 。cirros 是一个很小的 linux 镜像,非常适合测试用。大家可以到 http://download.cirros-cloud.net/ 下载,然后放到 /var/lib/libvirt/p_w_picpaths/ 目录下,这是 KVM 默认查找镜像文件的地方。
为虚拟机分配 CPU 和内存
点击 “Forward”, 再确认一下信息,就可以启动虚机了。
virt-manager 会打开虚机 kvm1 的控制台窗口,可以看到启动情况
virt-manager 可以对虚机进行各种管理操作,界面直观友好,很容易上手。 同时我们也可以用命令 virsh 管理虚机,比如查看宿主机上的虚机
root@ubuntu:~# virsh list
Id Name State
--------------------------------
8 kvm1 running
至此,第一个虚机已经跑起来了,采用的都是默认设置,后面我们会逐步讨论有关虚