标签(空测试用例格分隔):OpenStack Train 系列


一:Nova 的介绍

Nova 是 OpenStack 中的计算服务。OpenStack 中虚拟机实例(instance)生命周期都是由 Nova 服务来管理完成,包括实例创建、调度、删除等。

nova 服务包含一系列组件,其中有 nova-api、nova-conductor、nova-scheduler、nova-novncproxy 、nova-compute

nova-scheduler:把 nova-api 调用请求映射为 OpenStack 将要调度哪个服务器来响应运行实例的请求,会根据诸如 CPU 构架、可用域、内存、负载等作
出调度决策。

nova-api:对外提供 API 接口来管理内部基础设施,例如启动停止实例。

nova-conductor:nova-compute 和数据库之间的一个组件,nova-conductor 建立的初衷是基于安全考虑,避免 nova-compute 直接访问数据库。

nova-novncproxy:提供控制台服务,允许最终用户以 vnc 方式访问实例控制台,后续如果使用 spice-server,需要停止。

nova-compute:用于管理实例生命周期。通过消息队列接收请求,并承担操作工作。

综合对上面组件的介绍,可以看出 Nova 也是一个非常重要的核心组件,且对应子模块非常多,配置也会变得杂。

二:Nova 控制节点的安装

1、登录数据库创建 nova,nova_api,nova_cell0 数据库
MariaDB [(none)]> CREATE DATABASE nova_api default character set utf8;
MariaDB [(none)]> CREATE DATABASE nova default character set utf8;
MariaDB [(none)]> CREATE DATABASE nova_cell0 default character set utf8;
创建并授予 nova 用户完全操作 nova,nova_api,nova_cell0 库权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
/*
说明:OpenStack Rocky 版本需添加 Placement 数据库,在 Stein 版本之后已在单独的 Placement 组件添加,请忽略以下操作。
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'openstack';
*/

OpenStack Train(七):业务组件NOVA装安装_openstack

2、创建用户和 API 服务端点
# source /etc/keystone/admin-openrc.sh
# openstack user create --domain default --password-prompt nova
密码: openstack2022
将 nova 加入到 service 项目以及 admin 角色
# openstack role add --project service --user nova admin
创建 nova 服务实体
# openstack service create --name nova --description "OpenStack Compute" compute
创建 nova API 服务端点。
# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
使用命令查看
# openstack endpoint list

/*
说明:OpenStack Rocky 版本需添加 placement 用户,Stein 版本已在单独的 Placement 组件添加,请忽略以下操作(可以使用 openstack endpoint list 查
看)。
创建用户 placement 并设置密码。
openstack user create --domain default --password-prompt placement
添加角色。
openstack role add --project service --user placement admin
创建 Placement API 用户和服务端点。
openstack service create --name placement --description "Placement API" placement
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778
*/

OpenStack Train(七):业务组件NOVA装安装_虚拟化_02OpenStack Train(七):业务组件NOVA装安装_openstack_03OpenStack Train(七):业务组件NOVA装安装_openstack_04OpenStack Train(七):业务组件NOVA装安装_虚拟化_05

三:安装nova 配置文件

安装组件
# yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

/*
说明:
OpenStack Rocky 版本需在这里安装 placement,Stein 版本之后已在单独的 placement 组件安装,请忽略。
yum -y install openstack-nova-placement-api
*/

修改配置文件/etc/nova/nova.conf
# vim /etc/nova/nova.conf

说明:在配置 neutron 时已经配置过 nova.conf,所以此处直接修改 nova.conf
[DEFAULT]部分,开启计算和元数据 API,配置 RabbitMQ 消息队列访问以及启用网络服务的支持
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:openstack@controller
my_ip = 192.168.59.20
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
allow_resize_to_same_host = true
说明:my_ip 为控制节点的管理 IP。 在[api_database]部分,配置数据库访问
[api_database]
connection = mysql+pymysql://nova:openstack@controller/nova_api
[database]部分,配置数据库访问
[database]
connection = mysql+pymysql://nova:openstack@controller/nova
[api]部分,配置身份认证服务
[api]
auth_strategy = keystone
token_cache_time=3600
[keystone_authtoken]部分,配置身份认证信息
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack2022
token_cache_time=3600
[neutron]部分,启用元数据代理并配置密码
说明:此部分在安装配置 neutron 时已经配置,只需检查确认。

[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack2022
service_metadata_proxy = true
metadata_proxy_shared_secret = openstack2022

[vnc]部分,配置 VNC 代理以使用控制器节点的管理接口 IP 地址
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
novncproxy_host=0.0.0.0
novncproxy_port=6080
novncproxy_base_url=http://controller:6080/vnc_auto.html
说明:访问者本地要写 hosts,将 controller 的 IP 写到本地 hosts 文件中

[glance]部分,配置 glance 服务 API 地址
[glance]
api_servers = http://controller:9292
[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]部分,配置对 Placement 服务的访问。
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = openstack2022
[scheduler]部分,配置周期性发现计算节点间隔
[scheduler]
discover_hosts_in_cells_interval = 180
说明:如果未加上述参数,则在控制节点需要执行以下命令:nova-manage cell_v2 discover_hosts

OpenStack Train(七):业务组件NOVA装安装_openstack_06OpenStack Train(七):业务组件NOVA装安装_Nova_07OpenStack Train(七):业务组件NOVA装安装_openstack_08OpenStack Train(七):业务组件NOVA装安装_Nova_09

修改配置文件/etc/neutron/metadata_agent.ini
说明:此部分在安装配置 neutron 时已经配置,只需检查确认。
vim /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = openstack2022

OpenStack Train(七):业务组件NOVA装安装_Nova_10

4、同步 nova 数据库并验证
# su -s /bin/sh -c "nova-manage api_db sync" nova
# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
# su -s /bin/sh -c "nova-manage db sync" nova
说明:忽略 Warning
验证 cell0 和 cell1 是否正确注册。
# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

OpenStack Train(七):业务组件NOVA装安装_虚拟化_11OpenStack Train(七):业务组件NOVA装安装_openstack_12

6、启动 nova 服务并设置为开机自启动
# systemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl status openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

OpenStack Train(七):业务组件NOVA装安装_虚拟化_13OpenStack Train(七):业务组件NOVA装安装_openstack_14OpenStack Train(七):业务组件NOVA装安装_Nova_15

四:在计算节点computer01/computer02上安装Nova

在计算节点执行以下操作
1、安装组件
# yum -y install openstack-nova-compute
2、修改配置文件/etc/nova/nova.conf
# cd /etc/nova/ && mv nova.conf nova.conf.source && cat nova.conf.source |grep -Ev "^#|^$" > nova.conf && chown nova:root nova.conf
# vi /etc/nova/nova.conf
[DEFAULT]部分,配置计算和元数据 API、RabbitMQ 消息队列
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:openstack@controller
my_ip = 172.16.10.12
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
说明:
此处的 my_ip 设置为 计算节点的管理 IP。 在[api]部分,配置身份认证服务
[api]
auth_strategy = keystone
[keystone_authtoken]部分,配置身份认证服务
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack2022
token_cache_time=3600
[neutron]部分,配置访问参数
[neutron]
url = http://controller:9696
auth_url = http://controller:5000/v3
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = openstack2022
[vnc]部分,启用并配置远程访问控制台。
[vnc]
enabled = true
# 此处监听 ip 不能写当前计算节点 ip,因为如果要做实例迁移,迁移后实例 vnc 地址会发生变化
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
vncserver_proxyclient_address = $my_ip

[glance]部分,配置 glance 服务 API
[glance]
api_servers = http://controller:9292
[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]部分,配置 Placement API
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = openstack2022
[scheduler]部分,配置周期性发现计算节点间隔
[scheduler]
discover_hosts_in_cells_interval = 180

[libvirt]部分,配置虚拟化类型。
# 虚拟机模拟 openstack 可能需要将 virt_type 设置为 qemu,否则创建虚拟机后,一直停在 GRUB Loading stage2
[libvirt]
# virt_type = qemu
virt_type = kvm
num_pcie_ports=10
#说明:num_pcie_ports 为虚拟机的 pci 数量,最多支持设置 28 个

scp /etc/nova/nova.conf root@compute02:/etc/nova/
修改compute02的myip 地址:
vim /etc/nova/nova.conf
----
my_ip=172.16.10.13
----
3、安装并配置 kvm 组件
# yum -y install qemu-kvm-common-ev qemu-kvm-tools qemu-kvm-ev libvirt-daemon-kvm qemu-guest-agent qemu-img-ev
修改配置文件/etc/libvirt/libvirtd.conf
# vim /etc/libvirt/libvirtd.conf

# cat libvirtd.conf |grep -v "^#" |grep -v "^$"
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
# 计算节点 compute02 上要修改成 172.16.10.13
listen_addr = "172.16.10.12"
auth_tcp = "none"

修改 /etc/sysconfig/libvirtd
# vim /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"
4、启动 libvirtd、nova-compute 服务,并设置成开机自启动
# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl restart libvirtd.service openstack-nova-compute.service
# systemctl status libvirtd.service openstack-nova-compute.service
# netstat -atnp |grep 16509
# virsh version
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0
Running hypervisor: QEMU 2.12.0

OpenStack Train(七):业务组件NOVA装安装_Nova_16OpenStack Train(七):业务组件NOVA装安装_Nova_17OpenStack Train(七):业务组件NOVA装安装_openstack_18OpenStack Train(七):业务组件NOVA装安装_openstack_19

五:验证Nova

在控制节点执行以下操作进行验证。
# source /etc/keystone/admin-openrc.sh
查看计算服务组件状态
# openstack compute service list

OpenStack Train(七):业务组件NOVA装安装_虚拟化_20

查看已注册的计算节点
# openstack compute service list --service nova-compute

OpenStack Train(七):业务组件NOVA装安装_虚拟化_21

/*
说明:执行 openstack compute service list --service nova-compute 可能会遇到以下报错:
[23:35:07]The server is currently unavailable. Please try again at a later time.


[23:35:07]The Keystone service is temporarily unavailable.
原因是在创建 nova 用户时少执行了一步操作:
没有给 nova 用户授予 admin 角色。
openstack role add --project service --user nova admin
在增加新的计算节点时,需要在控制器节点手动执行以下命令,用于发现新计算节点
# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
如果已经配置了 discover_hosts_in_cells_interval = 180,则会周期性注册新增的计算节点,不需要手动执行上述命令
[scheduler]
discover_hosts_in_cells_interval = 180
*/

列出 keystone 服务中的 API 端点以验证与 Identity 服务的连接。
# openstack catalog list

OpenStack Train(七):业务组件NOVA装安装_虚拟化_22OpenStack Train(七):业务组件NOVA装安装_虚拟化_23

创建指定规格的 flavor
# openstack flavor create n1.nano --vcpus 1 --ram 128 --disk 1
创建虚拟机实例
# openstack server create --flavor n1.nano \
--image cirros-0.4.0-x86_64 \
--nic net-id=public \
--security-group default vm01
查看所有实例
# openstack server list

OpenStack Train(七):业务组件NOVA装安装_openstack_24OpenStack Train(七):业务组件NOVA装安装_openstack_25OpenStack Train(七):业务组件NOVA装安装_虚拟化_26

查看某一个实例的详细信息
# openstack server show

OpenStack Train(七):业务组件NOVA装安装_openstack_27OpenStack Train(七):业务组件NOVA装安装_openstack_28

登录实例
# virsh console instance-00000001
说明:使用 cirros 镜像创建的实例没有 ssh 服务,所以要到对应的计算节点(compute02)上使用 virsh console 命令进行登录

OpenStack Train(七):业务组件NOVA装安装_Nova_29

关闭实例
# openstack server stop vm01
启动实例
# openstack server start vm01
删除所选的实例
# openstack server delete vm01