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。