每天5分钟玩转OpenStack(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-06 21:10:27

点击下载

作者:CloudMan,夏毓彦

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

每天5分钟玩转OpenStack

每天5分钟玩转OpenStack试读:

作者简介

CloudMan,云计算技术专家,就职于国际知名IT企业,负责OpenStack相关项目的规划和实施。十多年一直专注IT前沿技术的钻研与实践,目前重点研究OpenStack、容器技术栈、DevOps等技术领域。

内容简介

本书是一本OpenStack的教程和参考。读者在学习的过程中,可以跟着教程进行操作,在实践中掌握OpenStack的核心技能。在之后的工作中,则可以将本教程作为参考书,按需查找相关知识点。

本书共分为两大部分。第一部分介绍虚拟化和云计算基础知识,重点讲解KVM的理论和实践。第二部分首先介绍OpenStack架构,演示如何搭建OpenStack环境,然后逐一详细讲解OpenStack各个核心模块,包括Keystone、Glance、Nova、Cinder和Neutron。

本书适合OpenStack初学者、云计算技术人员、云计算研究人员等使用,也适合高校和培训学校相关专业的师生教学参考。前言

写在最前面

这是一个OpenStack教程,有下面两个特点:● 系统讲解OpenStack。从架构到各个组件;从整体到细节逐一讨

论。● 重实践并兼顾理论。主要从实际操作的角度带着大家学习

OpenStack。

为啥要写这个

简单回答是:因为OpenStack学习难度大,但如果掌握了,价值会很大。

先做一个自我介绍吧。

本人网名CloudMan,在IT这个行当已经摸爬滚打了十多年,2005年之前是搞上层应用开发的,那时候Java比较火,所以J2EE相关的技术搞得比较多。后来入职一家大型IT公司,公司的产品从中间件到操作系统,从服务器到存储,从虚拟化到云计算都有涉及。

本人所在的部门是专门做IT基础设施实施服务的,项目涉及服务器、存储、网络、虚拟化、云各个方面,而且这个部门的重要任务是为公司在IT市场最新和最热门的领域开疆扩土。比如前几年的虚拟化,这两年的云计算和大数据。

可以说部门的这个定位非常符合我的技术偏好。我对新技术长期保持着浓厚的兴趣和学习热情,所以在这个部门一待就是十几年,而且一直搞技术,虽然现在的头衔是架构师,平时还是一直坚持实际动手操作,否则会没有安全感。

好,现在回到OpenStack这个主题。

本人是在2013年开始接触OpenStack,虽然具备比较扎实的技术功底,在经过一段时间的学习后,还是感觉OpenStack这个东西上手不太容易,个人认为有以下几个原因:

1.OpenStack涉及的知识领域极广

可以说涵盖了IT基础设施的所有范围,计算、存储、网络、虚拟化、高可用、安全、灾备无所不包,即便是像我这种每天都在这个领域工作的人也感觉压力颇大。

2.OpenStack是一个平台,不是一个具体的实施方案

OpenStack的各个组件都采用Driver的架构,支持各种具体的实现技术。比如OpenStack的存储服务Cinder只定义了上层抽象API,具体的实现交给下面的各种Driver,比如基于LVM的iSCSI Driver,EMC、IBM等商业存储产品的Driver,或者是开源的分布式存储软件,比如Ceph、GlusterFS的Driver。

正是因为这种架构上的灵活性,使得初学者在学习OpenStack的时候不会像学习其他具体软件产品那样容易上手。

3.OpenStack本身是一个分布式系统

大多数搞IT的对分布式计算都不会太熟悉,直接冲进来会被OpenStack繁多的组件以及它们之间的交互方式搞得云里雾里。

虽然OpenStack学习曲线比较陡峭,掌握起来难度较大,但OpenStack目前已经是IaaS云的事实标准,而且前途一片光明,对于我们搞IT的如果能啃下这个骨头,必定能大大提升自身的竞争力。

写给谁看

这套教程的目标读者包括:

1.OpenStack初学者

我学习OpenStack也是经历了一个艰辛曲折的过程,其主要原因在于没有找到一个系统讲解OpenStack的教程,大部分资料都比较分散,对于初学者无法有机地串起来。也正是因为这个原因,让我萌发了编写这样一套教程的想法,能够让初学者少走弯路,系统地学习、掌握和实践OpenStack。

2.OpenStack实施工程师

之前说了,我在公司的职位是架构师,但骨子里我更把自己定位成一位能到一线攻城拔寨的实施工程师。所以这个教程也是针对OpenStack的实施人员,让他们能够通过学习真正掌握部署OpenStack的知识、技能以及故障排查技巧。

3.我自己

写这个教程同时也是对自己这几年学习和实践OpenStack的一个总结。我觉得:对于知识,只有把它写出来并能够让其他人理解才能真正说明自己掌握了这项知识。

包含哪些内容

本书两大块内容,如下图所示。

1.预备知识

因为面向初学者,首先会有虚拟化和云计算的“预备知识”,会介绍KVM、IaaS等技术。

2.OpenStack核心

这是主要内容,包含OpenStack的架构和各个核心组件。将会通过大量的案例、操作步骤、截图、日志来帮助大家理解OpenStack各组件是如何工作的。其目标是让各位可以根据客户的需求进行配置和调整。

怎样的编写方式

在当下这个共享经济时代,我觉得应该用互联网的方式来分享知识和心得。这个教程会通过我的微信公众号(cloudman6)每周一、周三、周五定期发布。

用公众号我觉得有两个好处:(1)可以随时随地查看和浏览已推送的内容。(2)可以通过公众号跟我互动,提出问题和建议。

为啥叫《每天5分钟玩转OpenStack》

为了降低学习的难度并且考虑到移动端碎片化阅读的特点,每次推送的内容大家只需要花5分钟就能看完(注意,这里说的是看完,有时候要完全理解可能需要更多时间哈),每次的内容只包含1~3个知识点,这也是我把教程命名为《每天5分钟玩转OpenStack》的原因。虽然是碎片化推送,但整个教程是系统、连贯和完整的,只是化整为零了。

好了,今天这5分钟算是开了个头,下面我们正式开始玩转OpenStack。编者2016年10月第一篇预备知识

OpenStack是云操作系统,要学习OpenStack,首先需要掌握一些虚拟化和云计算的相关知识。第1章虚拟化

虚拟化是云计算的基础。简单地说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的CPU、内存、IO硬件资源,但逻辑上虚拟机之间是相互隔离的。

物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么Host是如何将自己的硬件资源虚拟化,并提供给Guest使用的呢?

这个主要是通过一个叫做Hypervisor的程序实现的。

根据Hypervisor的实现方式和所处的位置,虚拟化又分为两种:1型虚拟化和2型虚拟化。1.1 1型虚拟化

Hypervisor直接安装在物理机上,多个虚拟机在Hypervisor上运行。Hypervisor实现方式一般是一个特殊定制的Linux系统。Xen和VMWare的ESXi都属于这个类型,如图1-1所示。图1-11.2 2型虚拟化

物理机上首先安装常规的操作系统,比如Redhat、Ubuntu和Windows。Hypervisor作为OS上的一个程序模块运行,并对虚拟机进行管理。KVM、VirtualBox和VMWare Workstation都属于这个类型,如图1-2所示。图1-2

理论上讲:

1.型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;

2.型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。1.3 KVM

下面重点介绍KVM这种2型虚拟化技术。1.3.1 基本概念

在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和OpenStack的实施人员,virsh和virt-manager是一定要会用的。

今天5分钟差不多了,下一节我们来玩KVM。1.3.2 KVM实操

1.准备KVM实验环境

上一节说了,KVM是2型虚拟化,是运行在操作系统之上的,所以先要装一个Linux。Ubuntu、Redhat、CentOS都可以,这里以Ubuntu14.04为例。

基本的Ubuntu操作系统装好之后,安装KVM需要的包: $ sudo apt-get install qemu-kvm qemu-system libvirt-bin virt-managerbridge-utils vlan

通过这些安装包顺便复习一下上一节介绍的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默认不安装图形界面,手工安装一下: sudo apt-get install xinit sudo apt-get install gdm sudo apt-get installkubuntu-desktop

apt默认会到官网上去下载安装包,速度很慢,我们可以使用国内的镜像站点。

配置/etc/apt/sources.list: deb http://mirrors.163.com/ubuntu/ trusty main restricted universemultiverse deb http://mirrors.163.com/ubuntu/ trusty-security main restricteduniverse multiverse deb http://mirrors.163.com/ubuntu/ trusty-updates main restricteduniverse multiverse deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricteduniverse multiverse deb http://mirrors.163.com/ubuntu/ trusty-backports main restricteduniverse multiverse deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universemultiverse deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricteduniverse multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricteduniverse multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricteduniverse multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricteduniverse multiverse

然后执行下面命令更新安装包index: # apt update

Redhat和CentOS安装相对简单,安装过程中选择虚拟化和图形组件就可以了。

小窍门:Ubuntu默认是不允许root通过ssh直接登录的,可以修改/etc/ssh/sshd_config,设置: PermitRootLogin yes

然后重启ssh服务即可: # service ssh restart ssh stop/waiting ssh start/running, process 27639

在虚拟机上做实验

作为2型虚拟化的KVM,支持虚拟化嵌套,这使得我们可以在虚拟机中实验KVM。

比如我在VMWare Workstation中安装了一个Ubuntu14.04的虚拟机,为了让KVM能创建。

嵌套的虚机,要把CPU的虚拟化功能打开。如图1-3所示,在VMWare中设置以下CPU的模式。图1-3

Ubuntu启动后,用以下命令确认CPU支持虚拟化: # egrep -o '(vmx|svm)' /proc/cpuinfo # vmx

确认Libvirtd服务已经启动: # service libvirt-bin status libvirt-bin start/running, process 1478

2.启动第一个KVM虚机

本节演示如何使用virt-manager启动KVM虚机。

首先通过命令virt-manager启动图形界面,如图1-4所示。 # virt-manager图1-4

单击图1-4中框选的图标创建虚机,如图1-5所示。图1-5

给虚机命名为kvm1,这里选择从哪里启动虚机。如果是安装新的OS,可以选择第一项。如果已经有安装好的镜像文件,选最后一项(如图1-5所示)。

接下来需要告诉virt-manager镜像的位置,如图1-6所示。图1-6

单击“Browser”,打开如图1-7所示的界面。图1-7

在我的系统中存放了一个cirros-0.3.3-x86_64-disk.img镜像文件,单击“Choose Volume”,如图1-8所示。cirros是一个很小的linux镜像,非常适合测试用,大家可以到http://download.cirros-cloud.net/下载,然后放到/var/lib/libvirt/images/目录下,这是KVM默认查找镜像文件的地方。图1-8

单击“Forward”,为虚拟机分配CPU和内存,如图1-9所示。图1-9

单击“Forward”,再确认一下信息,就可以启动虚机了,如图1-10所示。图1-10

单击“Finish”,virt-manager会打开虚机kvm1的控制台窗口,可以看到启动情况,如图1-11所示。图1-11

virt-manager可以对虚机进行各种管理操作,界面直观友好,很容易上手,如图1-12所示。图1-12

同时我们也可以用命令virsh管理虚机,比如查看宿主机上的虚机: root@ubuntu:~# virsh list Id Name State --------------- 8 kvm1 running

至此,第一个虚机已经跑起来了,采用的都是默认设置,后面我们会逐步讨论有关虚机更细节的内容,比如存储和网卡的设置。

3.远程管理KMV虚机

上一节我们通过virt-manager在本地主机上创建并管理KVM虚机。其实virt-manager也可以管理其他宿主机上的虚机。只需要简单地将宿主机添加进来,如图1-13所示。图1-13

填入宿主机的相关信息,确定即可,如图1-14所示。图1-14

接下来,我们就可以像管理本地虚机一样去管理远程宿主机上的虚机了,如图1-15所示。图1-15

这里其实有一个要配置的地方。

因为KVM(准确说是Libvirt)默认不接受远程管理,需要按下面的内容配置被管理宿主机中的两个文件: /etc/default/libvirt-bin start_libvirtd="yes" libvirtd_opts="-d -l" /etc/libvirt/libvirtd.conf listen_tls = 0 listen_tcp = 1 unix_sock_group = "libvirtd" unix_sock_ro_perms = "0777" unix_sock_rw_perms = "0770" auth_unix_ro = "none" auth_unix_rw = "none" auth_tcp = "none"

然后重启Libvirtd服务就可以远程管理了。 service libvirt-bin restart1.4 KVM虚拟化原理

前面我们成功地把KVM跑起来了,有了些感性认识,这个对于初学者非常重要。不过还不够,我们多少得了解一些KVM的实现机制,这对以后的工作会有帮助。1.4.1 CPU虚拟化

KVM的虚拟化是需要CPU硬件支持的。还记得我们在前面的章节讲过用命令来查看CPU是否支持KVM虚拟化吗? root@ubuntu:~# egrep -o '(vmx|svm)' /proc/cpuinfo vmx

如果有输出vmx或者svm,就说明当前的CPU支持KVM。CPU厂商Intel和AMD都支持虚拟化了,除非是非常老的CPU。

一个KVM虚机在宿主机中其实是一个qemu-kvm进程,与其他Linux进程一样被调度。

比如,在我的实验机上运行的虚机kvm1在宿主机中ps能看到相应的进程,如图1-16所示。图1-16

虚机中的每一个虚拟vCPU则对应qemu-kvm进程中的一个线程,如图1-17所示。图1-17

在这个例子中,宿主机有两个物理CPU,上面起了两个虚机VM1和VM2。

VM1有两个vCPU,VM2有4个vCPU。可以看到VM1和VM2分别有两个和4个线程在两个物理CPU上调度。

这里也演示了另一个知识点,即虚机的vCPU总数可以超过物理CPU数量,这个叫CPU overcommit(超配)。

KVM允许overcommit,这个特性使得虚机能够充分利用宿主机的CPU资源,但前提是在同一时刻,不是所有的虚机都满负荷运行。

当然,如果每个虚机都很忙,反而会影响整体性能,所以在使用overcommit的时候,需要对虚机的负载情况有所了解,需要测试。1.4.2 内存虚拟化

KVM通过内存虚拟化共享物理系统内存,动态分配给虚拟机,如图1-18所示。图1-18

为了在一台机器上运行多个虚拟机,KVM需要实现VA(虚拟内存)→ PA(物理内存)→ MA(机器内存)之间的地址转换。虚机OS控制虚拟地址到客户内存物理地址的映射(VA →PA),但是虚机OS不能直接访问实际机器内存,因此KVM需要负责映射客户物理内存到实际机器内存(PA → MA)。具体的实现就不做过多介绍了,大家有兴趣可以查查资料。

还有一点提醒大家,内存也是可以overcommit的,即所有虚机的内存之和可以超过宿主机的物理内存。但使用时也需要充分测试,否则性能会受影响。1.4.3 存储虚拟化

KVM的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。

Storage Pool是宿主机上可以看到的一片存储空间,可以是多种类型,后面会详细讨论。Volume是在Storage Pool中划分出的一块空间,宿主机将Volume分配给虚拟机,Volume在虚拟机中看到的就是一块硬盘。

下面我们学习不同类型的Storage Pool。

1.目录类型的Storage Pool

文件目录是最常用的Storage Pool类型。KVM将宿主机目录/var/lib/libvirt/images/作为默认的Storage Pool。

那么Volume是什么呢?

答案就是该目录下面的文件了,一个文件就是一个Volume。

大家是否还记得我们之前创建第一个虚机kvm1的时候,就是将镜像文件cirros-0.3.3-x86_64-disk.img放到了这个目录下。文件cirros-0.3.3-x86_64-disk.img也就是Volume,对于kvm1来说,就是它的启动磁盘了。如图1-19所示。图1-19

那KVM是怎么知道要把/var/lib/libvirt/images目录当作默认Storage Pool的呢?

实际上KVM所有可以使用的Storage Pool都定义在宿主机的/etc/libvirt/storage目录下,每个Pool一个xml文件,默认有一个default.xml,其内容如图1-20所示。图1-20

注意:Storage Pool的类型是“dir”,目录的路径就是/var/lib/libvirt/images。

下面我们为虚机kvm1添加一个新的磁盘,看看有什么变化。

在virt-manager中打开kvm1的配置页面,右键添加新硬件,如图1-21所示。图1-21

在默认Pool中创建一个8GB的卷,如图1-22所示。图1-22

单击“Finish”,可以看到新磁盘的信息,如图1-23所示。图1-23

在/var/lib/libvirt/images/下多了一个8GB的文件kvm1.img: root@ubuntu:~# ls -l /var/lib/libvirt/images/ total 14044 -rw-r--r-- 1 root root 14417920 Sep 4 11:24cirros-0.3.3-x86_64-disk.img -rw------- 1 root root 8589934592 Sep 4 21:39 kvm1.img

使用文件做Volume有很多优点:存储方便、移植性好、可复制、可远程访问。

前面几个优点都很好理解,这里对“可远程访问”多解释一下。

远程访问的意思是镜像文件不一定都放置到宿主机本地文件系统中,也可以存储在通过网络连接的远程文件系统,比如NFS,或者是分布式文件系统中,比如GlusterFS。

这样镜像文件就可以在多个宿主机之间共享,便于虚机在不同宿主机之间做Live Migration;如果是分布式文件系统,多副本的特性还可以保证镜像文件的高可用。

KVM支持多种Volume文件格式,在添加Volume时可以选择,如图1-24所示。图1-24

raw是默认格式,即原始磁盘镜像格式,移植性好,性能好,但大小固定,不能节省磁盘空间。

qcow2是推荐使用的格式,cow表示copy on write,能够节省磁盘空间,支持AES加密,支持zlib压缩,支持多快照,功能很多。

vmdk是VMWare的虚拟磁盘格式,也就是说VMWare虚机可以直接在KVM上运行。

下一节介绍LVM类型的Storage Pool。

2.LVM类型的Storage Pool

不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上VG中的LV也可以作为虚拟磁盘分配给虚拟机使用。

不过,LV由于没有磁盘的MBR引导记录,不能作为虚拟机的启动盘,只能作为数据盘使用。

这种配置下,宿主机上的VG就是一个Storage Pool,VG中的LV就是Volume。

LV的优点是有较好的性能;不足的地方是管理和移动性方面不如镜像文件,而且不能通过网络远程使用。

下面举个例子。

首先,在宿主机上创建了一个容量为10GB的VG,命名为HostVG,如图1-25所示。图1-25

然后创建了一个Storage Pool的定义文件/etc/libvirt/storage/HostVG.xml,如图1-26所示。图1-26

然后通过virsh命令创建新的Storage Pool“HostVG”,如图1-27所示。图1-27

并启用这个HostVG,如图1-28所示。图1-28

现在我们可以在virt-manager中为虚机kvm1添加LV的虚拟磁盘了。如图1-29所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载