05.OpenStack计算服务Nova

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208

1.Nova计算服务概述

Nova-api组件实现了RESTful API功能,是外部访问Nova的唯一途径。
接收外部的请求并通过Message Queue将请求发送给其他的服务组件,同时也兼容EC2 API,所以也可以用EC2的管理工具对nova进行日常管理。

Nova Scheduler模块在OpenStack中负责决策虚拟机创建在那台主机(计算节点)上。
决策一个虚拟机应该调度到某物理节点,需要分两个步骤:
1.过滤(Fliter) 首先获取过未过滤的主机列表,根据过滤属性,选择服务条件的计算节点主机。
2.计算权值(Weight) 经过主机过滤,需要对主机进行权值的计算,根据策略选择相应的某一台主机。

Nova相关名词介绍:
API:负责接收和响应外部请求。支持OpenStackAPI
Cert:负责身份认证。
Scheduler:用于云主机调度。
Conductor:计算节点访问数据的中间件。
Consoleauth:用于控制台的授权验证。
Novncproxy:VNC代理。

2.安装和配置Nova控制器节点

2.1计算服务先决条件

配置OpenStack的认证服务之前,你必须创建一个数据库和管理令牌。

1.创建Keystone数据库,赋予数据库梯形权限,完成以下操作

mysql -u root -p123456 -e "CREATE DATABASE nova;"
mysql -u root -p123456 -e "CREATE DATABASE nova_api;"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON \
nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON \
nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES \
ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES \
ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';"

2.source admin来访问管理

[root@linux-node1 ~]# source admin-openrc

3.创建服务的凭证,完成下列步骤:

创建nova用户

[root@linux-node1 ~]# openstack user create --domain default \
--password=nova nova
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 18eb6d0edf28432dbe60237cac0b6a6b |
| name                | nova                             |
| password_expires_at | None                             |
+---------------------+----------------------------------+

nova用户赋予管理角色

[root@linux-node1 ~]# openstack role add --project service --user nova admin

创建Nova服务实体

[root@linux-node1 ~]# openstack service create --name nova \
--description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 106313ac218743b19fcdcbcb54e1c9f8 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

4.创建计算服务API端点

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
compute public http://192.168.56.11:8774/v2.1/%\(tenant_id\)s
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| enabled      | True                                         |
| id           | 6946a6e65de14a75a4b328e00cca81dd             |
| interface    | public                                       |
| region       | RegionOne                                    |
| region_id    | RegionOne                                    |
| service_id   | 106313ac218743b19fcdcbcb54e1c9f8             |
| service_name | nova                                         |
| service_type | compute                                      |
| url          | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
+--------------+----------------------------------------------+


[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
compute internal http://192.168.56.11:8774/v2.1/%\(tenant_id\)s
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| enabled      | True                                         |
| id           | 0b13978937e245bd90da4d1bbc1e358b             |
| interface    | internal                                     |
| region       | RegionOne                                    |
| region_id    | RegionOne                                    |
| service_id   | 106313ac218743b19fcdcbcb54e1c9f8             |
| service_name | nova                                         |
| service_type | compute                                      |
| url          | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
+--------------+----------------------------------------------+


[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
compute admin http://192.168.56.11:8774/v2.1/%\(tenant_id\)s
+--------------+----------------------------------------------+
| Field        | Value                                        |
+--------------+----------------------------------------------+
| enabled      | True                                         |
| id           | d3ca97a8c2b84c10bfb18ee98d112b89             |
| interface    | admin                                        |
| region       | RegionOne                                    |
| region_id    | RegionOne                                    |
| service_id   | 106313ac218743b19fcdcbcb54e1c9f8             |
| service_name | nova                                         |
| service_type | compute                                      |
| url          | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
+--------------+----------------------------------------------+

2.2安装和配置Nova组件

默认的配置文件由分布有所不同。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,在配置片段省略号(...)表示您应保留潜在的默认配置选项。

1.安装Nova计算服务

[root@linux-node1 ~]# yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler -y

2.编辑/etc/nova/nova.conf文件,并完成以下操作:

[DEFAULT]部分,启用计算机和元数据的API

[DEFAULT]
...
enabled_apis = osapi_compute,metadata

[api_database][database]部分,配置数据库访问

[api_database]
...
connection = mysql://nova:nova@192.168.56.11/nova_api

[database]
...
connection=mysql://nova:nova@192.168.56.11/nova

[DEFAULT][oslo_messaging_rabbit]部分,配置RabbitMQ的消息队列访问

[DEFAULT]
...
rpc_backend = rabbit

[oslo_messaging_rabbit]
...
rabbit_host = 192.168.56.11
rabbit_userid = openstack
rabbit_password = openstack

[DEFAULT][keystone_authtoken]部分,配置认证服务

[DEFAULT]
...
auth_strategy = keystone

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

[DEFAULT]部分,启用对网络服务支持

[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

默认情况下,计算使用内部防火墙驱动程序。
由于网络服务包括防火墙驱动程序,您必须使用nova.virt.firewall.NoopFirewallDriver防火墙驱动程序禁用计算防火墙驱动程序。

[VNC]部分,配置VNC代理使用控制器节点的管理接口IP地址

[vnc]
...
vncserver_listen = 192.168.56.11
vncserver_proxyclient_address = 192.168.56.11

[glance]部分,配置镜像服务API

[glance]
...
api_servers = http://192.168.56.11:9292

[oslo_concurrency]部分,配置锁路径

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

3.初始化Nova数据库,并验证 (忽视此输出任何消息。)

[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage db sync" nova
[root@linux-node1 ~]# mysql -h192.168.56.11 -unova -pnova -e "use nova;show tables;"|wc -l
111
[root@linux-node1 ~]# mysql -h192.168.56.11 -unova -pnova -e "use nova_api;show tables;"|wc -l
21

2.3控制节点安装完成

启动nova服务和配置系统启动时启动

[root@linux-node1 ~]# systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service 
  
[root@linux-node1 ~]# systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service 

验证Nova服务状态

[root@linux-node1 ~]# openstack host list
+----------------------------+-------------+----------+
| Host Name                  | Service     | Zone     |
+----------------------------+-------------+----------+
| linux-node1.xuliangwei.com | consoleauth | internal |
| linux-node1.xuliangwei.com | scheduler   | internal |
| linux-node1.xuliangwei.com | conductor   | internal |
+----------------------------+-------------+----------+

3.安装和配置Nova计算节点

nova-compute通常运行在计算节点上,通过Message Queue接收并管理VM的生命周期
nova-compute通过Libvirt管理KVN,通过XenAPI管理Xen等

本节将介绍如何安装和计算节点上配置的计算服务。该服务支持多种虚拟机管理程序部署实例或虚拟机。为简单起见,这个配置使用QEMU管理程序上支持虚拟机的硬件加速计算节点的KVM。在旧式硬件上,该配置使用通用的QEMU管理程序。您可以按照稍作修改,以水平这些说明额外计算节点扩展您的环境。

  • 注意 本节假定您遵循本指南中的指示一步一步来配置第一个计算节点。如果要配置其他计算节点,以类似的方式他们准备在这个例子结构部分的第一个计算节点。每个附加计算节点需要一个唯一的IP地址。

3.1安装和配置组件

默认的配置文件由分布有所不同。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,在配置片段省略号(...)表示您应保留潜在的默认配置选项。

1.计算节点和控制节点保持时间同步

[root@linux-node2 ~]# yum install -y chrony
[root@linux-node2 ~]# cat /etc/chrony.conf
server 192.168.56.11 iburst
[root@linux-node2 ~]# timedatectl set-timezone Asia/Shanghai
[root@linux-node2 ~]# systemctl enable chronyd.service
[root@linux-node2 ~]# systemctl start chronyd.service
[root@linux-node2 ~]# chronyc sources

2.安装Nova-compute计算服务

yum install https://rdoproject.org/repos/rdo-release.rpm -y
yum install openstack-nova-compute python-openstackclient -y

3.编辑/etc/nova/nova.conf文件,并完成以下操作:

[DEFAULT]部分,配置metadata元数据的接口

[DEFAULT]
...
enabled_apis = osapi_compute,metadata

[DEFAULT][oslo_messaging_rabbit]部分,配置RabbitMQ的消息队列访问

[DEFAULT]
...
rpc_backend = rabbit


[oslo_messaging_rabbit]
...
rabbit_host = 192.168.56.11
rabbit_userid = openstack
rabbit_password = openstack

[DEFAULT][keystone_authtoken]部分,配置认证服务(注意:注释掉[keystone_authtoken]其他任何部分)

[DEFAULT]
...
auth_strategy = keystone

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

[DEFAULT]部分,启用对网络服务支持

[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[VNC]部分,启用和配置远程控制台访问

[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 192.168.56.12
novncproxy_base_url = http://192.168.56.11:6080/vnc_auto.html

[glance]部分,配置镜像服务API

[glance]
...
api_servers = http://192.168.56.11:9292

[oslo_concurrency]部分,配置锁路径

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

3.2计算节点安装完成

1.确定你的计算节点是否支持虚拟机的硬件加速

[root@linux-node2 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
1
如果此命令返回的值为零,你的计算节点不支持虚拟化功能,你需要开启CPU虚拟化功能,可自行谷歌。
或者配置[libvirt],virt_type=qemu而不是使用virt_type=kvm

2.编辑在/etc/nova/nova.conf文件中的[libvirt]部分如下:

[libvirt]
...
virt_type=kvm

3.启动计算机服务,包括它的依赖和配置并在系统启动时启动

[root@linux-node2 ~]# systemctl enable libvirtd.service openstack-nova-compute.service
[root@linux-node2 ~]# systemctl start libvirtd.service openstack-nova-compute.service

4.Nova控制节点验证操作

注意: 验证计算服务的运行,需在控制器节点上执行这些命令。

1.source admin来访问管理

[root@linux-node1 ~]# source admin-openrc

2.列出服务组件,以验证每个进程的成功和注册信息

[root@linux-node1 ~]# openstack host list
+----------------------------+-------------+----------+
| Host Name                  | Service     | Zone     |
+----------------------------+-------------+----------+
| linux-node1.xuliangwei.com | consoleauth | internal |
| linux-node1.xuliangwei.com | scheduler   | internal |
| linux-node1.xuliangwei.com | conductor   | internal |
| linux-node2.xuliangwei.com | compute     | nova     |
+----------------------------+-------------+----------+