1.5 部署OpenStack
OpenStack云的开发、运维和使用的前提是安装和部署OpenStack。本节对部署OpenStack做总体介绍,各组件与服务的具体部署将在后续章节中介绍。
1.5.1 选择操作系统平台
OpenStack作为一个云操作系统,可以安装在Linux服务器上。目前OpenStack可以安装在以下操作系统上。
openSUSE和SUSE Linux Enterprise Server。
Red Hat Enterprise Linux和CentOS。
Ubuntu。
全球的OpenStack开发者大部分都使用Ubuntu,不过国内用户更倾向于使用CentOS平台,本书就是以CentOS 7平台为例讲解OpenStack。
1.5.2 部署拓扑
OpenStack是一个分布式系统,由若干不同功能的节点(Node)组成。不同类型的节点是从功能上进行逻辑划分的,在实际部署时可以根据需求灵活配置。
在大规模OpenStack生产环境中,每类节点都分别部署在若干台物理服务器上,各司其职并互相协作。这样的部署具备很好的性能、伸缩性和高可用性。
在最小的实验环境中,可以将各类节点部署到一台物理服务器甚至是虚拟服务器上,这就是所谓的All-in-One部署,又称一体化部署。
1.5.3 OpenStack部署工具
对于有经验的云系统工程师来说,通常会选择手动部署OpenStack。手动部署OpenStack的优点是按需定制,非常灵活,部署的云平台运行效率高。不过由于组件众多,手动部署OpenStack非常烦琐,对于刚刚接触到OpenStack的初学者而言,难度可想而知。好在有许多OpenStack快捷部署工具可供选择,这在很大程度上降低了学习OpenStack云计算的技术门槛,而且有些工具完全可用于生产环境的自动化部署。下面简单介绍一下主要的OpenStack部署工具。
1.DevStack
DevStack 是一系列可扩展的脚本,用于根据 git master 分支上的最新版本快速建立一个完整的OpenStack环境。使用它部署的云系统既可以用作OpenStack开发环境,又可以作为许多OpenStack项目的功能测试的基础。DevStack支持以下3种部署方式。
(1)在虚拟机上运行OpenStack。
(2)在物理机(PC或服务器)上以All-in-One(一体化)方式在单一节点上部署OpenStack。
(3)在物理机(PC或服务器)上以分布式方式部署OpenStack。这需要搭建一个多节点的集群。
DevStack 采用自动化源码安装,用户只需要下载相应的 OpenStack 版本脚本,修改相关的配置文件就可以实现自动化安装,自动化解决依赖关系,非常方便。它还提供了相应的文档、配置文件样例和练习脚本,特别适合初学者使用,初学者可以访问OpenStack官方网站来进一步了解DevStack及其安装方法,其源代码可以从OpenStack官方网站获得。
DevStack 适合部署 OpenStack 开发或教学环境,并不适合生产环境。实际的生产环境需要满足各种硬件、网络和存储的要求,对性能、可靠性和安全性都有严格的要求。
2.Fuel
与DevStack侧重于开发和测试环境不同,Fuel是一种OpenStack工业级的自动化部署方案。作为一款开源的OpenStack部署和管理工具,它由OpenStack社区开发,为OpenStack的部署和管理提供直观的图形化界面体验,还提供相关的社区项目和插件。
Fuel可以简化和加速OpenStack各种配置模板的规模部署、测试和维护,解决耗时、复杂、易错的问题。与其他特色平台的部署或管理工具不同,Fuel是一个上游的OpenStack项目,专注于自动化部署和测试,支持一定范围的第三方选项,这样就不会被捆绑销售或被厂商锁定。
Fuel面向普通用户提供了多种不同需求的简化的OpenStack部署方式,支持CentOS和Ubuntu操作系统,通过扩展也可支持其他发行版本,支持多个 OpenStack 版本。Mirantis 公司将 Fuel 作为OpenStack相关方案的一部分。要想获取更多的信息可以访问Mirantis官方网站。
Fuel的系统框架如图1-11所示。Fuel并非一个整体,而是由多个独立的组件组成。其中一些是Fuel专有的组件,另外一些是第三方服务,如Cobbler、Puppet、MCollective等。一些组件可以单独使用而无须任何修改,另外一些则需要稍做调整。
图1-11 Fuel的系统框架
UI是使用JavaScript编写的网页应用程序,其底层使用了Bootstrap和Backbone框架。Nailgun是整个Fuel项目的核心,实现了REST API和部署数据管理,用来管理磁盘卷、配置数据、网络配置数据,以及其他环境特定的数据。Nailgun使用SQL数据库存储数据,使用AMQP服务来与Worker进程进行交互。用户通过Web UI或 Fuel CLI(命令行界面)与其进行交互。Fuel的CLI比UI提供了更多的操作功能。
Astute是另一个重要的组件,充当Nailgun的Worker进程,具体功能是根据Nailgun提供的指令来执行某些操作。事实上,Astute只是用来封装各种服务(如Cobbler、Puppet、Shell脚本等)交互的所有细节的一个层,并且为这些服务提供通用的异步接口。Astute 通过 AMQP 与 Nailgun交换数据。
Cobbler目前用作置备服务(Provisioning Service),即基于网络的操作系统部署服务。
Puppet目前仅是一个部署服务。它负责创建MCollective代理(Agents)来管理其他的配置管理框架,比如Chef和SaltStack等。
MCollective agents用于执行像硬盘清理和网络连接探查这样的特定任务。
OSTF(OpenStack Testing Framework,OpenStack测试框架)又称为Health Check(健康检查),它是一个独立的组件,主要用来执行OpenStack安装后的检验工作,主要目标是在尽可能短的时间内进行尽可能多的功能测试。
Fuel部署OpenStack的过程中会有Master Node(主节点)、Discovered Node(发现节点)和Managed Node(托管节点)3种角色的节点出现。主节点是Fuel的主要部分,几乎全部的服务都在这个节点上运行,整个部署正是从这个节点上发起的,它实际上是一个部署控制器。主节点上成功启动的Bootstrap系统中有一个Nailgun代理(包含MCollective),该代理负责收集新节点上的硬件信息,通过Nailgun的REST API传回给主节点,这样此新节点就变成了一个发现节点。托管节点是 Fuel 已经分配了角色并安装了系统的节点,发现节点安装系统完成之后就成为托管节点。
3.RDO
RDO是由Red Hat开发的一款部署OpenStack的工具,同DevStack一样,支持单节点和多节点部署。但RDO只支持Red Hat/CentOS系列的操作系统。需要注意的是,该项目并不属于OpenStack官方社区项目。
RDO项目的原理是整合上游的OpenStack版本,然后根据Red Hat的操作系统进行裁剪和定制,帮助用户进行选择,让用户只需简单的几步就能完成OpenStack的部署。RDO是Red Hat Enterprise Linux OpenStack Platform的社区版,作为一款开源的OpenStack部署工具,可以在CentOS、Fedora和Red Hat Enterprise Linux上部署OpenStack,并支持单节点和多节点部署。
对于概念验证(Proof of Concept,PoC)环境,也就是简单的测试环境,可以利用RDO的Packstack安装工具快速部署OpenStack云测试平台。RDO的Packstack为很多OpenStack学习和开发用户提供了一种高效、快速搭建环境的方式。这种方式搭建的OpenStack不适合生产环境,通常是在小型环境(比如PC)上快速开发验证相关特性。
对于生产环境,可以考虑利用 RDO 的 TripleO 产品在裸机上部署生产性云环境。与其他OpenStack 部署工具不同,TripleO 以 OpenStack 本来的云设施为基础来安装、升级和运行OpenStack 云,基于 Nova、Neutron、Ironic 和 Heat 自动化部署和管理数据中心级的云。它是一个官方的OpenStack项目,目标是使用一套现成的OpenStack组件在裸金属物理服务器上部署和管理生产环境的云。
TripleO全称为“OpenStack On OpenStack”,意思即为“云上云”,可以简单理解为利用OpenStack来部署 OpenStack,即首先基于 V2P(将虚拟机的镜像迁移到物理机上)的理念事先准备好一些OpenStack节点(计算、存储、控制节点)的镜像,然后利用已有OpenStack环境的裸金属服务Ironic项目和软件安装部分的diskimage-builder去部署裸机,最后通过Heat项目和镜像内的DevOps工具(Puppet Or Chef)再在裸机上配置运行OpenStack。
通过TripleO,可以从创建一个底层云(Undercloud)开始,如图1-12所示。底层云是一个部署云(Deployment Cloud),包含用于部署和管理上层云(Overcloud)所需的OpenStack组件。上层云是一个工作负载云(Workload Cloud),作为一个部署解决方案,可以充当任何用途的云,如生产环境、模拟环境和测试环境等。
图1-12 底层云与上层云
TripleO的架构如图1-13所示。TripleO利用OpenStack现成的核心组件Nova、Ironic、Neutron、Heat、Glance和Ceilometer在裸机上部署OpenStack。在底层云中使用Nova和Ironic管理基于裸金属的虚拟机实例,以包括上层云的基础设施。Neutron提供部署上层云的网络环境,Glance存储虚拟机镜像,Ceilometer收集关于上层云的计量数据。
图1-13 TripleO的架构
图1-14进一步展示了底层云部署在一台物理服务器上和上层云分布在多个物理服务器上的物理视图。
图1-14 TripleO的物理视图
TripleO的应用程序接口(Application Program Interface,API)就是OpenStack本身的API。它们易于维护,文档完善,提供客户端库和命令行工具。用户了解TripleO的API也就了解了OpenStack。使用OpenStack组件使得TripleO比其他工具的开发更快速,TripleO自动继承Glance、Heat等的新增特性。TripleO的漏洞修复和安全更新与OpenStack同步。
TripleO的部署至少需3台裸机,分别用于底层云、上层云控制节点和上层云计算节点。考虑到使用TripleO的门槛较高,RDO提供了一个基于Ansible的项目TripleO Quickstart,为使用TripleO快速创建一个虚拟环境。这样,用户就可以在虚拟环境而不是实际的物理机中使用TripleO,不过还是需要一台物理机作为虚拟机的主机。TripleO Quickstart仅能用于开发和测试,不能用于实际的生产环境。
4.Puppet
Puppet由Ruby语言编写。应当说,Puppet是进入OpenStack自动化部署中的早期项目,历史比较悠久。目前,它的活跃开发群体是Red Hat、Mirantis、UnitedStack等。Mirantis出品的Fuel部署工具中,大量的模块代码使用的便是Puppet。就国内而言,UnitedStack是Puppet社区贡献和使用的最大用户。
Puppet是目前CMS(Content Management System,内容管理系统)领域中的领头羊,而Puppet Openstack Modules 项目(简称 POM)诞生于2012年,2013年进入 OpenStack 官方孵化项目(Stackforge),随后又成为OpenStack官方项目。POM取得成功的原因主要在于其获得了大量公司和工程师的参与,甚至有一些主流的部署工具直接集成了POM,如Mirantis的Fuel、Red Hat的Packstack、OpenStack官方的TripleO。
5.Ansible
Ansible是2012年出现的自动化运维工具,已被Red Hat收购。它基于Python开发,集合了众多运维工具(如 Puppet、Cfengine、Chef、Saltstack 等)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible一方面总结了Puppet的设计上的得失,另一方面又改进了很多设计。
1.5.4 部署OpenStack的技术需求
学习和部署OpenStack需要掌握以下计算机系统、数据库和网络方面的知识。
Linux操作系统的安装、管理与运维。
SQL数据库系统的安装、配置、管理和优化。
计算机虚拟化技术,重点是KVM与Libvirt套件。
网络设备,包括网桥、交换机、路由器和防火墙。
组网技术,包括DHCP、VLAN和iptables。
存储技术,包括文件系统、LVM、分布式存储。
Shell脚本及其编程。
OpenStack是一个庞大的技术生态系统,包括众多项目和组件,涉及数据中心、运维、高可用、虚拟化技术、存储、网络技术等。要想短时间内精通OpenStack的方方面面是不现实的。对于初学者而言,应重点了解OpenStack平台的实现原理、系统架构和物理部署,熟悉几个核心项目(如Keystone、Glance、Nova、Neutron、Cinder、Swift等)的功能、架构、组件(子服务)和实现机制,掌握命令行和图形界面的配置、管理和使用操作,从而为从事OpenStack相关工作(如运维、开发、测试、市场等)打下基础。本书正是围绕这些主题来组织内容的。