这个教程有下面两个特点:系统讲解OpenStack从架构到各个组件;从整体到细节逐一讨论重实践并兼顾理论主要从实际操作的角度带着大家学习OpenStack。为啥要写这个?简单回答是:因为OpenStack学习难度大,但如果掌握了价值会很大本人是在2013年开始接触OpenStack,虽然具备比较扎实的技术功底,在经过一段时间的学习后,还是感觉OpenStack这个东西上手不太容易,个人认为有以下几个原因:OpenStack涉及的知识领域极广可以说涵盖了IT基础设施的所有范围。计算、存储、网络、虚拟化、高可用、安全、灾备。。。。。。无所不包。即便是像CloudMan这种每天都在这个领域工作的人也感觉压力颇大OpenStack是一个平台,不是一个具体的实施方案OpenStack的各个组件都采用Driver的架构,支持各种具体的实现技术。比如OpenStack的存储服务Cinder只定义了上层抽象API,具体的实现交给下面的各种Driver,比如基于LVM的iSCSIDriver,EMC、IBM等商业存储产品的Driver,或者是开源的分布式存储软件,比如Ceph、GlusterFS的Driver。正是因为这种架构上的灵活性,使得初学者在学习OpenStack的时候不会像学习其他具体软件产品那样容易上手。OpenStack本身是一个分布式系统大多数搞IT的对分布式计算都不会太熟悉。直接冲进来会被OpenStack繁多的组件以及他们之间的交互方式搞得云里雾里。虽然OpenStack学习曲线比较陡峭,掌握起来难道较大,但OpenStack目前已经是IaaS云的事实标准,而且前途一片光明,对于我们搞IT的如果能啃下这个骨头,必定能大大提升自身的竞争力。写给谁看这套教程的目标读者包括:OpenStack初学者CloudMan学习OpenStack也是经历了一个艰辛曲折的过程。其主要原因在于没有找到一个系统教授OpenStack的教程,特别是针对初学者。大部分资料都比较分散,对于初学者无法有机地串起来。也正是因为这个原因,让我萌发了编写这样一套教程的想法,能够让初学者能够少走弯路,系统地学习、掌握和实践OpenStack。OpenStack实施工程师之前说了,CloudMan在公司的职位是架构师,但骨子里我更把自己定位成一个能到一线攻城拔寨的实施工程师。所以这个教程也是针对OpenStack的实施人员,让他们能够通过学习真正掌握部署OpenStack的知识、技能以及故障排查技巧。我自己写这个教程同时也是对自己这几年学习和实践OpenStack的一个总结。我觉得:对于知识,只有把它写出来并能够让其他人理解才能真正说明自己掌握了这项知识。包含哪些内容?如下图,两大块:预备知识因为面向初学者,首先会有虚拟化和云计算的“预备知识”,会介绍KVM,IaaS等技术。OpenStack核心这是主要内容,包含OpenStack的架构和和各个核心组件。将会通过大量的案例、操作步骤、截图、日志来帮助大家理解OpenStack各组件是如何工作的。其目标是让各位可以根据客户的需求进行配置和调整。为啥叫《每天5分钟玩转OpenStack》?为了降低学习的难度并且考虑到移动端碎片化阅读的特点,每次推送的内容大家只需要花5分钟就能看完(注意这里说的是看完,有时候要完全理解可能需要更多时间哈),每次的内容只包含1-3个知识点,这也是我把教程命名为《每天5分钟玩转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和VMWareWorkstation都属于这个类型。理论上讲:1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。KVM下面重点介绍KVM这种2型虚拟化技术。基本概念在x86平台上最热门运用最广泛的虚拟化方案莫过于KVM了。OpenStack对KVM支持得也最好,我们的教程也理所当然选择KVM作为实验环境的Hypervisor。KVM全称是Kernel-BasedVirtualMachine。也就是说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库和命令行工具virshlibvirtd是服务程序,接收和处理API请求;API库使得其他人可以开发基于Libvirt的高级工具,比如virt-manager,这是个图形化的KVM管理工具,后面我们也会介绍;virsh是我们经常要用的KVM命令行工具,后面会有使用的示例。作为KVM和OpenStack的实施人员,virsh和virt-manager是一定要会用的。KVM是OpenStack使用最广泛的Hypervisor,本节介绍如何搭建KVM实验环境安装KVM上一节说了,KVM是2型虚拟化,是运行在操作系统之上的,所以我们先要装一个Linux。Ubuntu、Redhat、CentOS都可以,这里我们以Ubuntu14.04为例。基本的Ubuntu操作系统装好之后,安装KVM需要的包1$sudoapt-getinstallqemu-kvmqemu-systemlibvirt-binvirt-managerbridge-utilsvlan通过这些安装包我们顺便复习一下上一节介绍的KVM的相关知识。qemu-kvm和qemu-system是KVM和QEMU的核心包,提供CPU、内存和IO虚拟化功能libvirt-bin就是libvirt,用于管理KVM等Hypervisorvirt-manager是KVM图形化管理工具bridge-utils和vlan,主要是网络虚拟化需要,KVM网络虚拟化的实现是基于linux-bridge和VLAN,后面我们会讨论。Ubuntu默认不安装图形界面,手工安装一下123sudoapt-getinstallxinitsudoapt-getinstallgdmsudoapt-getinstallkubuntu-desktopapt默认会到官网上去下载安装包,速度很慢,我们可以使用国内的镜像站点。配置/etc/apt/sources.list12345678deb://mirrors.163.com/ubuntu/trusty-securitymainrestricteduniversemultiversedeb://mirrors.163.com/ubuntu/trusty-proposedmainrestricteduniversemultiversedeb://mirrors.163.com/ubuntu/trustymainrestricteduniversemultiversedeb-src://mirrors.163.com/ubuntu/trusty-updatesmainrestricteduniversemultiverse910deb-src://mirrors.163.com/ubuntu/trusty-backportsmainrestricteduniversemultiverse然后执行下面命令更新安装包index?1#aptupdateRedhat和CentOS安装相对简单,安装过程中选择虚拟化和图形组件就可以了。小窍门:Ubuntu默认是不允许root通过ssh直接登录的,可以修改/etc/ssh/sshd_config,设置1PermitRootLoginyes然后重启ssh服务即可123#servicesshrestartsshstop/waitingsshstart/running,process27639在虚拟机上做实验作为2型虚拟化的KVM,是支持虚拟化嵌套,这使得我们可以在虚拟机中实验KVM。比如我在VMWareWorkstation中安装了一个Ubuntu14.04的虚拟机,为了能让KVM能创建嵌套的虚机,要把CPU的虚拟化功能打开。如下图在VMWare中设置以下CPU的模式Ubuntu启动后,用以下命令确认CPU支持虚拟化?12#egrep-o'(vmx|svm)'/proc/cpuinfo#vmx确认Libvirtd服务已经启动?12#servicelibvirt-binstatuslibvirt-binstart/running,process1478KVM准备就绪,下一节我们将创建虚拟机本节演示如何使用virt-manager启动KVM虚机。首先通过命令virt-manager启动图形界面#virt-manager点上面的图标创建虚机给虚机命名为kvm1,这里选择从哪里启动虚机。如果是安装新的OS,可以选择第一项。如果已经有安装好的镜像文件,选最后一项(如上图)接下来需要告诉virt-manager镜像的位置。点击“Browser”在我的系统中存放了一个cirros-0.3.3-x86_64-disk.img镜像文件。cirros是一个很小的linux镜像,非常适合测试用,大家可以到下载,然后放到/var/lib