前言

这部分内容主要介绍如何部署nova-compute组件。

一、介绍

nova-compute是openstack里面一个非常重要的服务,它负责对VM实例生命周期的各个过程进行管理,它作为一组守护进程运行在linux服务器上。

nova-compute主要由下面几部分组成:

  • api组件:

组件名称

功能

nova-api

过REST API与外部进行交互

nova-api-metadata

nova-api的子服务,为VM实例的创建提供元信息

  • core组件:

组件名称

功能

nova-scheduler

负责VM实例的资源调度

nova-compute

管理VM实例,借助于nova-conductor实现db访问

nova-Conductor

负责db的访问

  • console interface组件:

组件名称

功能

nova-cert

负责身份认证

nova-consoleauth

控制台授权认证

nova-novncproxy

VNC代理,支持浏览器VNC客户端

  • scheduler组件:

组件名称

功能

nova-scheduler

通过过滤和权重计算,来决定在哪个计算节点上创建VM实例。默认情况下nova-scheduler根据空闲内存计算节点的权重值,空闲内存越多,权重越大

  • placement组件:

组件名称

功能

placement

负责资源记录的变动跟踪

如果要使用nova-compute的基本功能,还需要额外提供以下四种服务:

服务名

功能

keystone

它为所有OpenStack服务提供身份认证

glance

镜像仓库,所有VM实例都是基于镜像文件启动起来

neutron

为VM实例提供网络支持

placement

监控VM实例资源变动情况,并在创建VM时选择哪些资源提供商提供帮助

二、准备工作

1. 创建数据库

  • 创建数据库:nova-api、nova、nova_cell0、placement
  • 给nova和placement用户授权访问数据库
mysql -u root -proot

# 创建数据库
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
CREATE DATABASE placement;

# 数据库授权
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'placement';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'placement';
exit;

# 验证 
mysql -h 192.168.88.14 -unova -pnova -e "show databases;";
mysql -h 192.168.88.14 -uplacement -pplacement -e "show databases;";
exit

2. 安装软件

yum install -y openstack-nova-api  --nogpgchec 
yum install -y openstack-nova-conductor  --nogpgchec
yum install -y openstack-nova-console  --nogpgchec
yum install -y openstack-nova-novncproxy  --nogpgchec
yum install -y openstack-nova-scheduler  --nogpgchec
yum install -y openstack-placement-api --nogpgchec

三、配置服务

1. 配置nova

  • 配置数据库连接
  • 配置rabbitmq
  • 配置keystone认证
  • 配置网络
  • 配置vnc
  • 配置placement
cp /etc/nova/nova.conf{,bak}
vim /etc/nova/nova.conf

[DEFAULT]
use_neutron=true
firewall_driver=nova.virt.firewall.NoopFirewallDriver
enabled_apis=osapi_compute,metadata
transport_url=rabbit://openstack:openstack@192.168.88.14:5672

[api]
auth_strategy=keystone

[api_database]
connection=mysql+pymysql://nova:nova@192.168.88.14/nova_api

[database]
connection=mysql+pymysql://nova:nova@192.168.88.14/nova

[glance]
api_servers=http://192.168.88.14:9292

[keystone_authtoken]
auth_uri=http://192.168.88.14:5000
auth_url=http://192.168.88.14:35357
memcached_servers=192.168.88.14:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=nova

[oslo_concurrency]
lock_path=/var/lib/nova/tmp

[placement]
region_name=RegionOne
project_domain_name=default
project_name=service
auth_type=password
user_domain_name=default
auth_url=http://192.168.88.14:35357/v3
username=placement
password=placement

[vnc]
enabled=true
server_listen=192.168.88.14
server_proxyclient_address=192.168.88.14

2. 配置placement-api

cp /etc/httpd/conf.d/00-placement-api.conf{,.bak}
vim /etc/httpd/conf.d/00-placement-api.conf

# 在<VirtualHost *:8778>节点中添加:
<Directory /usr/bin>
  <IfVersion >= 2.4>
    Require all granted
  </IfVersion>
  <IfVersion < 2.4>
    Order allow,deny
    Allow from all
  </IfVersion>
</Directory>

配置完成后,重启一下httpd服务。

systemctl restart httpd

3. 配置placement

  • 配置数据库连接
  • 配置keystone认证
cp /etc/placement/placement.conf{,.bak}
vim /etc/placement/placement.conf

[api]
auth_strategy = keystone

[keystone_authtoken]
memcached_servers=192.168.88.14/11211
region_name=RegionOne
project_domain_name=default
project_name=service
auth_type=password
user_domain_name=default
auth_url=http://192.168.88.14:35357/v3
username=placement
password=placement

[placement_database]
connection = mysql+pymysql://placement:placement@192.168.88.14/placement

4. 信息初始化

# 同步nova-api数据库信息
su -s /bin/sh -c "nova-manage api_db sync" nova
# 同步cell0数据库信息
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
# 创建cell1记录
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
# 同步nova数据库信息
su -s /bin/sh -c "nova-manage db sync" nova
# 同步placement数据库信息
su -s /bin/sh -c "placement-manage db sync" placement
# 验证效果
nova-manage cell_v2 list_cells

执行完成后,分别查看nova、nova_api、nova_cell0、placement数据库,可以看到下面会自动生成一些数据库表。

# 数据库验证结果
mysql -h 192.168.88.14 -u nova -pnova -e "use nova; show tables"
mysql -h 192.168.88.14 -u nova -pnova -e "use nova_api; show tables"
mysql -h 192.168.88.14 -u nova -pnova -e "use nova_cell0; show tables"
mysql -h 192.168.88.14 -u placement -pplacement -e "use placement; show tables"

5. 创建service和endpoint

# 创建nova服务
openstack service create --name nova --description "OpenStack Compute" compute
# 配置nova服务的api地址记录
openstack endpoint create --region RegionOne compute public http://192.168.88.14:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://192.168.88.14:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://192.168.88.14:8774/v2.1

6. 创建用户

# 增加用户nova
openstack user create --domain default --password nova nova
# 将nova用户加入到Service项目的admin角色组
openstack role add --project service --user nova admin

四、计算节点部署

1. 安装软件

yum install -y openstack-nova-compute --nogpgchec
yum install -y libguestfs-tools --nogpgchec

安装openstack-nova-compute时候可能出现的问题:

Error: Package: 1:openstack-nova-compute-16.1.1-1.el7.noarch (centos-openstack-pike)
Requires: qemu-kvm-rhev >= 2.9.0
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

导致上面问题的原因是之前设置源时有些地址是国外导致有些软件安装失败,系统自动删除了一些源文件,其中就有包含一个CentOS-QENU-EV.repo。

解决办法:重新下载CentOS-QENU-EV.repo源文件。

# replacepkgs参数代表重装软件,否则因为之前已安装过会报错。
rpm -ivh http://mirrors.163.com/centos/7/extras/x86_64/Packages/centos-release-virt-common-1-1.el7.centos.noarch.rpm  --replacepkgs
rpm -ivh http://mirrors.163.com/centos/7/extras/x86_64/Packages/centos-release-qemu-ev-1.0-4.el7.centos.noarch.rpm  --replacepkgs

安装完成后,还需要检查一下主机是否支持虚拟化技术。

egrep '(vmx|svm)' /proc/cpuinfo

如果有出现vmx关键字,代表CPU支持虚拟化。

2. 修改nova配置

  • 配置rabbitmq连接
  • 配置keystone认证
  • 配置网络类型
  • 配置vnc
  • 配置placment
cp /etc/nova/nova.conf{,.bak}
vim /etc/nova/nova.conf

[DEFAULT]
# 调整计算节点提供的资源参数
vif_plugging_is_fatal=false
vif_plugging_timeout=10
# 配置网络功能
use_neutron=true
firewall_driver=nova.virt.firewall.NoopFirewallDriver
# 开启 nova-api 的功能
enabled_apis=osapi_compute,metadata
# 配置 rabbitmq 的连接地址
transport_url=rabbit://openstack:openstack@192.168.88.14:5672

[api]
auth_strategy=keystone

[glance]
api_servers=http://192.168.88.14:9292

[keystone_authtoken]
api_servers=http://192.168.88.14:9292
auth_uri=http://192.168.88.14:5000
auth_url=http://192.168.88.14:35357
memcached_servers=192.168.88.14:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=nova

[libvirt]
# 生产中用kvm
virt_type=qemu

[oslo_concurrency]
lock_path=/var/lib/nova/tmp

[placement]
region_name=RegionOne
project_domain_name=default
project_name=service
auth_type=password
user_domain_name=default
auth_url=http://192.168.88.14:35357/v3
username=placement
password=placement

[vnc]
enabled=true
server_listen=0.0.0.0
server_proxyclient_address=192.168.88.15
novncproxy_base_url=http://192.168.88.14:6080/vnc_auto.html

配置完成后,先启动控制节点,然后再重启libvirtd和openstack-nova-compute服务。

# 重启服务
systemctl start libvirtd openstack-nova-compute
systemctl status libvirtd openstack-nova-compute
systemctl enable libvirtd openstack-nova-compute

3. 测试效果

# 切换到control节点上检查效果
source openstack-admin.sh
# 重点关注nova-compute记录是否正常
openstack compute service list
# 新增计算节点记录,增加到nova数据库中
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
# 验证所有API是否正常
nova-status upgrade check
# 检查日志
egrep ERROR /var/log/nova/nova-compute.log

总结

这部分介绍了nova-compute组件的部署。接下来介绍另外一个非常重要的组件,网络组件的部署。