2.1 使用Packstack安装单节点OpenStack云平台

RDO 的 Packstack非常适合使用单一的 All-in-One(一体化)节点来验证OpenStack云部署。

2.1.1 准备安装环境

通常将运行OpenStack的计算机称为主机或主机节点。为方便实验,建议使用虚拟机。本章的实例是在一台真实的Windows计算机(作为宿主机)中通过VMWare Workstation创建一台运行CentOS 7操作系统的虚拟机,作为OpenStack主机。

1.创建虚拟机

这里给出虚拟机的基本要求,创建虚拟机的具体过程不再详述。

建议采用16GB内存,使用8GB也能运行。

CPU双核且支持虚拟化。

硬盘不低于200GB。

网卡(网络适配器)以桥接模式接入主机(物理机)网络。

笔者所举实例中虚拟机硬件配置如图2-1所示(仅供参考)。可见,创建一台这样的虚拟机对主机(物理机)的硬件配置要求不低。

图2-1 CentOS 7虚拟机硬件配置

2.在虚拟机中安装CentOS 7操作系统

在安装过程中语言选择默认的英语,如果对Linux命令行操作很熟悉,建议选择CentOS 7最小化操作系统以降低系统资源消耗,否则选择安装带GUI的服务器(Server with GUI)版本,如图2-2所示。这将有助于初学者查看和编辑配置文件,运行命令行(可打开多个终端界面)。为简化操作,可以考虑直接以root身份登录。如果以普通用户身份登录,执行系统配置和管理操作时需要使用sudo命令。例如关闭防火墙:

sudo systemctl stop firewalld

图2-2 选择带GUI的服务器

3.NetworkManager服务

CentOS 7网络默认由 NetworkManager(网络管理器)负责管理,但是 NetworkManager 与OpenStack网络组件Neutron有冲突,应停用它,改用传统的网络服务Network来管理网络。执行以下命令实现这些目的:

systemctl disable NetworkManager

systemctl stop NetworkManager

systemctl enable network

systemctl start network

4.禁用防火墙与SELinux

为方便测试,应关闭防火墙。

systemctl disable firewalld

systemctl stop firewalld

编辑/etc/selinux/config文件,将“SELINUX”的值设置为“disabled”,重启系统使禁用SELinux生效。

5.设置网络

虚拟机的IP地址应选择静态地址,建议通过桥接模式直接访问外网,以便于测试内外网之间的双向通信。此实例中虚拟机的网络连接如图2-3所示,采用的是桥接模式。

图2-3 网络连接采用桥接模式

例如,虚拟机的主机运行 Windows 操作系统,IP 地址为192.168.199.201,连接的网络是192.168.199.0,默认网关为192.168.199.1,DNS为114.114.114.114;虚拟机运行CentOS 7,IP地址配置为192.168.199.21,默认网关为192.168.199.1,DNS为114.114.114.114。该虚拟机的网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eno16777736的内容如下:

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_PEERDNS=yes

IPV6_PEERROUTES=yes

IPV6_FAILURE_FATAL=no

NAME=eno16777736

UUID=c84d0100-79f6-427b-8ced-0348b5df4ed7

DEVICE=eno16777736

ONBOOT=yes

IPADDR=192.168.199.21

NETNASK=255.255.255.0

GATEWAY=192.168.199.1

DNS1=114.114.114.114

设置完毕,执行以下命令重启network服务使网络接口设置更改生效。

systemctl restart network

提示

CentOS 7的网卡设备命名方式有所变化,它采用一致性网络设备命名,可以基于固件、拓扑、位置信息来设置固定名称,由此带来的好处是命名自动化,名称完全可预测,硬件因故障更换也不会影响设备的命名,可以让硬件更换无缝过渡。但不足之处是比传统的命名格式更难读。这种命名格式为:网络类型+设备类型编码+编号。例如,eno16777736表示一个以太网卡(en),使用的编号是板载设备索引号,类型编码是o,索引号是16777736。前两个字符为网络类型,如en表示以太网(Ethernet),wl表示无线局域网(WLAN),ww表示无线广域网(WWAN)。第3个字符代表设备类型,如o表示板载设备索引号,s表示热插拔插槽索引号,x表示MAC地址,p表示PCI地理位置/USB端口号;后面的编号来自设备。如果要恢复使用传统的网络接口命令方式,则可以编辑/etc/sysconfig/grub 文件,找到 GRUB_CMDLINE_LINUX,为它增加以下两个变量:

net.ifnames=0 biosdevname=0

再使用grub2-mkconfig重新生成GRUB配置并更新内核参数。

grub2-mkconfig -o /boot/grub2/grub.cfg

6.设置主机名

安装好CentOS 7系统后,通常要更改主机名,例如,这里更改为node-a:

hostnamectl set-hostname node-a

一旦更改主机名,就必须将新的主机名追加到/etc/hosts配置文件中:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 node-a

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 node-a

192.168.199.21 node-a node-a.localdomain

否则,在使用RDO安装OpenStack的过程中启动rabbitmq-server服务后失败,从而导致安装不成功。RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统,为OpenStack的计算组件Nova 各个服务之间提供一个中心的消息机制。rabbitmq-server 服务在启动前会解析主机名的地址是否可通。

7.更改语言编码

如果CentOS 7安装的是非英语版本,那么在/etc/environment文件中添加以下定义:

LANG=en_US.utf-8

LC_ALL=en_US.utf-8

8.设置时间同步

整个OpenStack环境中所有节点的时间必须是同步的。在CentOS 7系统中一般使用时间同步软件Chrony,如果没有安装,执行以下命令进行安装。

yum install chrony -y

通常选择一个控制节点作为其他节点的时间同步服务器(简称 NTP)。这里使用虚拟机作为OpenStack主机节点,选择其宿主机(一台物理机)作为所有节点的时间同步服务器比较好。

Windows系统自带时间服务器。考虑到本书实验环境,为便于实验,这里直接在运行OpenStack的虚拟机的宿主机(物理机)上部署一个NTP服务器,统一所有OpenStack实验节点的系统时间。该物理机运行Windows 7操作系统,可以利用其内置的W32Time服务架设一台NTP服务器。默认情况下,Windows计算机作为 NTP客户端工作,必须通过修改注册表使其也作为 NTP服务器运行。

(1)打开注册表编辑器,依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer节点,将Eabled键值由默认的0改为1,表示启用NTP服务器。

(2)在注册表编辑器中继续将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config节点下的AnnounceFlags键值改为5,这样强制该主机将它自身宣布为可靠的时间源,从而使用内置的CMOS时钟。默认值a(十六进制)表示采用外面的时间服务器。

(3)以管理员身份打开命令行,执行命令net stop w32time&&net start w32time,先停止再启动W32Time服务。

(4)在命令行中执行services.msc命令打开服务管理单元(或者从计算机管理控制台中打开该管理单元),设置W32Time服务启动模式为自动。

(5)NTP服务的端口是123,使用的是UDP。如果启用防火墙,则允许UDP 123端口访问。可以打开“高级安全Windows防火墙”对话框,设置相应的入站规则。也可以通过管理员身份打开命令行,执行以下命令来添加该规则:

netsh advfirewall firewall add rule name= NTPSERVER dir=in action=allow protocol=UDP localport=123

至此,设置的NTP服务器可以提供时间服务。

然后在虚拟机(作为 All-in-One 节点)上配置 Chrony,使其与物理机的时间同步。编辑/etc/chrony.conf,加入以下语句(192.168.199.201为NTP服务器地址)。

server 192.168.199.201 iburst

然后重启时间同步服务使设置生效:

systemctl restart chronyd.service

2.1.2 准备所需的软件库

CentOS Extras软件库已连同CentOS 7一并安装,并默认启用。该库能支持OpenStack库,只需执行以下命令即可设置OpenStack库:

yum install -y centos-release-openstack-queens

本例使用的OpenStack的版本为Queens,RDO基本与上游的OpenStack版本同步。如果要安装以前的旧版本,需要更改版本名,例如,Queens的上一版本为Pike,其中的软件包名改为centos-releaseopenstack-pike。

继续执行以下命令,以确保其中的openstack-queens软件库可用:

yum-config-manager --enable openstack-queens

该命令将解析依赖(Resolving Dependencies)并安装所需的依赖(Installing for Dependencies)。完成之后,需要执行以下命令更新当前软件包:

yum update -y

这将升级所有包,改变软件设置和系统设置,并升级系统版本内核。

不过,从Pike开始,核心组件openstack-nova-compute的安装所依赖的qemu-kvm版本不能低于2.9.0,CentOS 7现有的软件库不能提供qemu-kvm较新版本的安装。为此,需要相应的软件库来提供支持,RDO就提供这样的库。具体操作步骤如下。

(1)执行以下命令安装yum-plugin-priorities插件。

yum -y install yum-plugin-priorities

yum-plugin-priorities插件用来设置yum在调用软件源时的顺序。通常官方提供的软件源,都是比较稳定和被推荐使用的,所以官方源的顺序要高于第三方源的顺序。当然这需要在软件源定义文件(.repo)中使用priority参数设置优先级,其值为整数,默认优先级为99,数值越小优先级越高。

(2)执行以下命令切换到用于存放软件源定义文件的目录。

cd /etc/yum.repos.d/

(3)下载RDO官方网站针对CentOS 7提供的软件源定义文件delorean-deps.repo。

curl -O https://trunk.rdoproject.org/centos7/delorean-deps.repo

(4)下载RDO官方网站针对CentOS 7提供的软件源定义文件delorean.repo。

curl -O https://trunk.rdoproject.org/centos7/current-passed-ci/delorean.repo

该文件内容如下,priority参数值为1,说明其优先级最高。

[delorean]

name=delorean-puppet-oslo-e996ecf807ebc4bd3c9ef037bd3722b551ade1bd

baseurl=https://trunk.rdoproject.org/centos7/e9/96/e996ecf807ebc4bd3c9ef037bd3722b55 1ade1bd_fb58e76a

enabled=1

gpgcheck=0

priority=1

(5)升级所有包,改变软件设置和系统设置,并升级系统版本内核。

yum update -y

这样yum首先会访问delorean.repo源,然后再访问其他可用的源。

由于内核更新,需要重启主机之后再执行后续操作。

2.1.3 安装Packstack安装器

执行以下命令安装openstack-packstack及其依赖包:

yum install -y openstack-packstack

安装过程中需要安装许多依赖包,如openstack-packstack-puppet等。

Packstack是RDO的OpenStack安装工具,用于取代手动设置OpenStack。Packstack基于Puppet工具,通过Puppet部署OpenStack各组件。Puppet是一种Linux、UNIX和Windows平台的集中配置管理系统,使用自有的Puppet描述语言,可管理配置文件、用户、任务、软件包、系统服务等。Puppet将这些系统实体称之为资源,其设计目标是简化对这些资源的管理,妥善处理资源间的依赖关系。

2.1.4 运行Packstack安装OpenStack

1.Packstack工具的基本用法

packstack [选项] [--help]

执行packstack --help命令列出选项清单,这里给出部分选项及其说明。

--gen-answer-file=GEN_ANSWER_FILE:产生应答文件模板。

--answer-file=ANSWER_FILE:依据应答文件的配置信息以非交互模式运行该工具。

--install-hosts=INSTALL_HOSTS:在一组主机上一次性安装,主机列表间以逗号分隔。第一台主机作为控制节点,其他主机作为计算节点。如果仅提供一台主机,将集中在单节点上以“All-in-One”方式安装。

--allinone:所有功能都集中安装在单一主机上。

还有许多具体定义安装内容的全局性选项,例如,--ssh-public-key=SSH_PUBLIC_KEY设置安装在服务器上的公钥路径,--default-password=DEFAULT_PASSWORD设置默认密码(会被具体服务或用户的密码所覆盖),--mariadb-install=MARIADB_INSTALL设置是否安装MARIADB数据库。

2.Packstack的安装过程

实际应用中多使用应答文件所提供的配置选项进行部署。首次测试,可以考虑直接使用“All-inOne”方式进行单节点部署。“All-in-One”方式是RDO官方网站上提供的向导模式,只需加上--allinone选项。下面记录了例中的执行过程(#打头的是笔者增加的注释)。

[root@node-a ~]# packstack --allinone

Welcome to the Packstack setup utility

# 提示安装日志文件

The installation log file is available at: /var/tmp/packstack/20180606-112055-8r6isW/openstack-setup.log

Packstack changed given value to required value /root/.ssh/id_rsa.pub

Installing:

Clean Up [ DONE ]

Discovering ip protocol version [ DONE ]

# 设置SSH密钥

Setting up ssh keys [ DONE ]

# 准备服务器

Preparing servers [ DONE ]

# 安装Puppet和探测主机详情之前

Pre installing Puppet and discovering hosts' details [ DONE ]

# 准备预装的项目

Preparing pre-install entries [ DONE ]

# 设置证书

Setting up CACERT [ DONE ]

# 准备AMQP(高级消息队列)项目

Preparing AMQP entries [ DONE ]

# 准备MariaDB(现已代替MySQL)数据库项目

Preparing MariaDB entries [ DONE ]

# 修正Keystone LDAP参数

Fixing Keystone LDAP config parameters to be undef if empty[ DONE ]

# 准备Keystone(认证服务)项目

Preparing Keystone entries [ DONE ]

# 准备Glance(镜像服务)项目

Preparing Glance entries [ DONE ]

# 检查Cinder(卷存储服务)是否有卷

Checking if the Cinder server has a cinder-volumes vg[ DONE ]

# 准备Cinder(卷存储服务)项目

Preparing Cinder entries [ DONE ]

# 准备Nova API(Nova对外接口)项目

Preparing Nova API entries [ DONE ]

# 为Nova迁移创建SSH密钥

Creating ssh keys for Nova migration [ DONE ]

Gathering ssh host keys for Nova migration [ DONE ]

# 准备Nova Compute(计算服务)项目

Preparing Nova Compute entries [ DONE ]

# 准备Nova Scheduler(调度服务)项目

Preparing Nova Scheduler entries [ DONE ]

# 准备Nova VNC(虚拟网络控制台)代理项目

Preparing Nova VNC Proxy entries [ DONE ]

# 准备OpenStack与网络相关的Nova项目

Preparing OpenStack Network-related Nova entries [ DONE ]

# 准备Nova通用项目

Preparing Nova Common entries [ DONE ]

# 以下准备Neutron(网络组件)项目

Preparing Neutron LBaaS Agent entries [ DONE ]

Preparing Neutron API entries [ DONE ]

Preparing Neutron L3 entries [ DONE ]

Preparing Neutron L2 Agent entries [ DONE ]

Preparing Neutron DHCP Agent entries [ DONE ]

Preparing Neutron Metering Agent entries [ DONE ]

Checking if NetworkManager is enabled and running [ DONE ]

# 准备OpenStack客户端项目

Preparing OpenStack Client entries [ DONE ]

# 准备Horizon仪表板项目

Preparing Horizon entries [ DONE ]

# 以下准备Swift(对象存储)项目

Preparing Swift builder entries [ DONE ]

Preparing Swift proxy entries [ DONE ]

Preparing Swift storage entries [ DONE ]

# 准备Gnocchi(用于计费的时间序列数据库作为服务)项目

Preparing Gnocchi entries [ DONE ]

# 准备Redis(用于计费的数据结构服务器)项目

Preparing Redis entries [ DONE ]

# 准备Ceilometer(计费服务)项目

Preparing Ceilometer entries [ DONE ]

# 准备Aodh(警告)项目

Preparing Aodh entries [ DONE ]

# 准备Puppet模块和配置清单

Preparing Puppet manifests [ DONE ]

Copying Puppet modules and manifests [ DONE ]

# 应用控制节点(测试时可能需要较长时间)

Applying 192.168.199.21_controller.pp

192.168.199.21_controller.pp: [ DONE ]

# 应用网络节点(测试时可能需要较长时间)

Applying 192.168.199.21_network.pp

192.168.199.21_network.pp: [ DONE ]

# 应用计算节点(测试时可能需要较长时间)

Applying 192.168.199.21_compute.pp

192.168.199.21_compute.pp: [ DONE ]

# 应用Puppet配置清单

Applying Puppet manifests [ DONE ]

Finalizing [ DONE ]

# 安装成功完成应用并给出其他提示信息

**** Installation completed successfully ******

Additional information:

# 执行命令产生的应答文件

 * A new answerfile was created in: /root/packstack-answers-20180606-112056.txt

# 未安装时间同步。需要确认CentOS 7当前的系统时间正确,如果不正确,则需要修改

 * Time synchronization installation was skipped.Please note that unsynchronized time on server instances might be problem for some OpenStack components.

# 在用户主目录下产生keystonerc_admin文件,使用命令行工具需要用它作为授权凭据

 * File /root/keystonerc_admin has been created on OpenStack client host 192.168.199.21.To use the command line tools you need to source the file.

# 访问OpenStack Dashboard(Web访问接口),请使用keystonerc_admin中的登录凭据

 * To access the OpenStack Dashboard browse to http://192.168.199.21/dashboard .

Please, find your login credentials stored in the keystonerc_admin in your home directory.

# 安装日志文件名及其路径

* The installation log file is available at: /var/tmp/packstack/20180606-112055-8r6isW/openstack-setup.log

# Puppet配置清单路径

 * The generated manifests are available at: /var/tmp/packstack/20180606-112055-8r6isW/manifests

3.Packstack安装典型问题

安装过程中应用控制节点、网络节点和计算节点时都会测试Puppet应用是否完成,如例中3个节点测试的提示依次为:

Testing if puppet apply is finished: 192.168.199.21_controller.pp

Testing if puppet apply is finished: 192.168.199.21_network.pp

Testing if puppet apply is finished: 192.168.199.21_compute.pp

测试过程可能会花费较长时间。安装过程中出现的问题一般也集中在这个阶段。笔者遇到的典型问题有以下两个。

(1)应用控制节点失败。这个问题可以到Puppet配置清单路径中相应日志文件中查找原因,例中为/var/tmp/packstack/20180606-112055-8r6isW/manifests/192.168.199.21_controller.pp.log。最常见的原因是rabbitmq-server服务在启动前要解析主机名的地址,解决方案参见2.1.1节第6点的有关说明。

(2)应用计算节点失败。这个问题可以到Puppet配置清单路径中相应日志文件中查找原因,例中为/var/tmp/packstack/20180606-112055-8r6isW/manifests/192.168.199.21_compute.pp.log。最常见的原因是openstack-nova-compute的安装所依赖的qemu-kvm版本不能低于2.9.0,openstack-queens软件库现不能提供 qemu-kvm 较新版本的安装,其解决方案参见2.1.2节。当然也可以从其他渠道安装qemu-kvm 2.9.0以上版本,需要的软件包括 qemu-img-ev.x86_64、qemu-kvm-common-ev.x86_64和qemu-kvm-ev.x86_64,版本不能低于2.9.0。