OpenStack之计算服务(Nova)

一、Nova的基本概念

Nova负责管理OpenStack中云主机实例的创建、删除、启动、停止等。Nova位于OpenStack架构的中心,其他服务或者组件(如Glance、Placement、Cinder、Neutron等)对它提供支持。Nova自身并没有任何虚拟化能力,它通过虚拟机管理器(Hypervisor)来创建和管理云主机。Hypervisor为多种虚拟化程序(如KVM、Xen、VMware ESX、QEMU)提供统一接口服务。

1、Nova的组件架构——Nova的模块构成

Nova这一组件功能强大且结构复杂,由多种模块组成,这些模块分属若干单元(Cell)。每个单元又是若干计算节点的集合。

| **模块 **
| 功能介绍 |
| — | — |
| nova-scheduler | 该模块负责虚拟机调度服务,与Placement合作,负责从计算机集群中选择某一主机创建虚拟机 |
| nova-api | 该模块用于接收和响应外部请求,也是外部可用于管理Nova的唯一入口 |

image.png

2、Nova的组件架构——Nova的单元管理模式

OpenStack中的计算节点被分成若干小单元进行管理,除了顶层管理单元“cell0”外,每个单元都有自己的消息队列和数据库,“cell0”只有数据库。其中单元“cell0”包含接口模块(nova-api)和调度模块(nova-scheduler)。而其余的单元如“cell1”“cell2”负责具体的云主机实例的创建与管理。
为Nova各个单元服务的数据库一共有3个,分别是“nova_api”“nova_cell0”“nova”。顶层管理单元“cell0”使用了“nova_api”“nova_cell0”数据库。“nova_api”数据库存放的是全局信息,如单元的信息、实例类型(创建云主机的模板)信息等。“nova _cell0”数据库的作用是当某台云主机调度失败时,此时云主机的信息将不属于任何一个单元,而只能存放到“nova_cell0”数据库中,因此“nova_cell0”数据库用于存放云主机调度失败的数据以集中管理。而“nova”数据库为其他所有单元服务,存储单元中云主机的相关信息。
image.png

3、Nova的基本工作流程

image.png

  • 第1步,nova-api接收到用户通过管理界面或命令行发起的云主机创建请求,并将其发送到消息队列中。
  • 第2步,nova-conductor从消息队列获得请求,从数据库获得如Cell单元的相关信息,再将请求和获得的数据放入消息队列。
  • 第3步,nova-scheduler从消息队列获得请求和数据以后,与Placement组件配合选择创建云主机的物理机,选择完成后,请求转入消息队列等待nova-compute处理。
  • 第4步,nova-compute从消息队列获得请求后,分别与Glance、Neutron和Cinder交互以获取镜像资源、网络资源和云存储资源。一切资源准备就绪后,nova-compute通过Hypervisor调用具体的虚拟化程序,如KVM、QEMU、Xen等,来创建虚拟机。

二、项目实施

1、在控制节点安装与配置Nova
安装Nova软件包
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-scheduler openstack-nova-novncproxy
  • “openstack-nova-api”:Nova与外部的接口模块。
  • “openstack-nova-conductor”:Nova传导服务模块,提供数据库访问。
  • “nova-scheduler”:Nova调度服务模块,用以选择某台主机进行云主机创建。
  • “openstack-nova-novncproxy”:Nova的虚拟网络控制台( Virtual Network Console,VNC)代理模块,支持用户通过VNC访问云主机。
创建Nova的数据库并授权
#第1步,用下面的方法进入MariaDB数据库服务器。
mysql -uroot -p123456

#第2步,新建“nova_api”“nova_cell0”“nova”数据库。
CREATE DATABASE nova_api;
CREATE DATABASE nova_cell0;
CREATE DATABASE nova;

#第3步,给用户授权使用新建数据库。
GRANT ALL PRIVILEGES ON 数据库名.* TO 'nova'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON 数据库名.* TO 'nova'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'controller' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'controller' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456';
#注意:这里数据库名分别是“nova_api”“nova_cell0”“nova”,即6条语句。

#退出数据
quit;
修改Nova配置文件

将配置文件去掉注释和空行
第1步,备份配置文件。

cp /etc/nova/nova.conf /etc/nova/nova.bak

第2步,去掉所有注释和空行,生成新的配置文件。

grep -Ev '^$|#' /etc/nova/nova.bak >/etc/nova/nova.conf

编辑新的配置文件
第1步,打开配置文件进行编辑。

vi /etc/nova/nova.conf

第2步,修改“[api_database]”和“[database]”部分,实现与数据库“nova_api”“nova”的连接。

[api_database]
connection = mysql+pymysql://nova:123456@controller/nova_api
[database]
connection = mysql+pymysql://nova:123456@controller/nova

第3步,修改“[api]”与“[keystone_authtoken]”部分,实现与Keystone交互。

[api]
auth_strategy = keystone
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456

[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456

第4步,修改“[placement]”部分,实现与Placement交互。

[placement]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456
region_name = RegionOne
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456

第5步,修改“[glance]”部分,实现与Glance交互。

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

第6步,修改“[oslo_concurrency]”,配置锁路径。

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

第7步,修改“[DEFAULT]”部分,配置使用消息队列及防火墙等信息

[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://rabbitmq:123456@controller:5672
my_ip = 192.168.10.10
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver

第8步,修改“[vnc]”部分,配置VNC连接模式。

[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
初始化Nova的数据库

初始化“nova_api”数据库。
第1步,初始化“nova_api”数据库。

su nova -s /bin/sh -c "nova-manage api_db sync"

第2步,创建“cell1”单元,该单元将使用“nova”数据库。

su nova -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1"

第3步,映射“nova”到“cell0”数据库,使“cell0”的表结构和“nova”的保持一致。

su nova -s /bin/sh -c "nova-manage cell_v2 map_cell0"

第4步,初始化“nova”数据库,由于映射的存在,在“cell0”中同时创建相同数据表。

su nova -s /bin/sh -c "nova-manage db sync"
2、在控制节点安装与配置Nova

检查单元注册情况

nova-manage cell_v2 list_cells
3、Nova组件初始化
创建Nova用户并分配角色

第1步,导入环境变量模拟登录。

. admin-login 

第2步,在OpenStack云计算平台中创建用户“nova”。

openstack user create --domain default --password 123456 nova 

第3步,给用户“nova”分配“admin”角色

openstack role add --project project --user nova admin
创建Nova服务及端点

(1)创建服务
创建名为“nova”、类型为“compute”的服务。

openstack service create --name nova compute 

(2)创建计算服务端点
OpenStack组件的服务端点有3种,分别对应Admin用户(admin)、内部组件(internal)、公众用户(public)服务 的地址。

第1步,创建公众用户访问的服务端点。

openstack endpoint create --region RegionOne nova public http://controller:8774/v2.1 

第2步,创建内部组件访问的服务端点。

openstack endpoint create --region RegionOne nova internal http://controller:8774/v2.1 

第3步,创建Admin用户访问端点。

openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
启动Nova服务

设置开机启动

systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy 

立即启动

systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
检测控制节点的Nova服务

查看端口占用情况8774和8775

netstat -nutpl|grep 8774
netstat -nutpl|grep 8775

查看计算服务列表

openstack compute service list
4、安装与配置Nova

在计算节点只需要安装Nova的计算模块“nova-compute”,按照以下方法进行安装

安装Nova软件包
yum -y install openstack-nova-compute
修改Nova配置文件

(1)
将配置文件去掉注释和空行
第1步,备份配置文件。

cp /etc/nova/nova.conf /etc/nova/nova.bak 

第2步,去掉所有注释和空行,生成新的配置文件。

grep -Ev '^$|#' /etc/nova/nova.bak >/etc/nova/nova.conf 

(2)
编辑新的配置文件
第1步,打开配置文件进行编辑。

vi /etc/nova/nova.conf 

第2步,修改“[api]”与“[keystone_authtoken]”部分,实现与Keystone交互。

[api] 
auth_strategy = keystone 

[keystone_authtoken] 
auth_url = http://controller:5000 
memcached_servers = controller:11211 
auth_type = password 
project_domain_name = Default 
user_domain_name = Default 
project_name = project 
username = nova 
password = 123456 

第3步,修改“[placement]”部分,实现与Placement交互。

auth_url = http://controller:5000 
auth_type = password 
project_domain_name = Default 
user_domain_name = Default 
project_name = project 
username = placement 
password = 123456 
region_name = RegionOne 

第4步,修改“[glance]”部分,实现与Glance交互。

api_servers = http://controller:9292 

第5步,修改“[oslo_concurrency]”,配置锁路径。

lock_path = /var/lib/nova/tmp

第6步,修改“[DEFAULT]”部分,配置使用消息队列及防火墙等信息。

enabled_apis = osapi_compute,metadata
transport_url = rabbit://rabbitmq:123456@controller:5672 
my_ip = 192.168.10.20 
use_neutron = true 
firewall_driver = nova.virt.firewall.NoopFirewallDriver 

第7步,修改“[vnc]”部分,配置VNC连接模式。

[vnc] 
enabled = true 
server_listen = 0.0.0.0 
server_proxyclient_address = $my_ip 
novncproxy_base_url = http://192.168.10.10:6080/vnc_auto.html 

第8步,配置“[libvirt]”部分,设置虚拟化类型为QEMU。

[libvirt] 
virt_type = qemu
启动计算节点Nova服务

首先,设置开机启动服务。

systemctl enable libvirtd openstack-nova-compute 

立即启动服务。

systemctl start libvirtd openstack-nova-compute
发现计算节点并检验服务

控制节点检查
(1)导入环境变量模拟登录

. admin-login 

(2)发现新的计算节点

su nova -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" 

设置自动发现
第1步,打开配置文件,修改“[scheduler]”,设置每隔60s自动执行发现一次

vi /etc/nova/nova.conf 
[scheduler] 
discover_hosts_in_cells_interval = 60 

第2步,重启“nova-api”服务,使修改过的配置文件生效。

systemctl restart openstack-nova-api
验证Nova服务(控制节点)

(1)查看计算服务列表

openstack compute service list 

(2)查看所有OpenStack服务及端点列表

openstack catalog list 

(3)用Nova状态检测工具检查

nova-status upgrade check

猜你喜欢

转载自blog.csdn.net/xiaoyu070321/article/details/131384217