前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenStack运维之安装Nova服务

OpenStack运维之安装Nova服务

作者头像
王先森sec
发布2023-04-24 17:30:41
1.3K0
发布2023-04-24 17:30:41
举报
文章被收录于专栏:王先森

nova介绍

  Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的。

用途与功能 :

  1. 实例生命周期管理
  2. 管理计算资源
  3. 网络和认证管理
  4. REST 风格的 API
  5. 异步的一致性通信
  6. Hypervisor 透明:支持Xen,XenServer/XCP,KVM, UML,VMware vSphere and Hyper-V

体系结构

组件介绍

nova-api

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

nova-scheduler

nova-scheduler:决策虚拟机创建在哪个主机(计算节点)上。决策一个虚拟机应该调度到某物理节点,需要分为两个步骤:

  1. 过滤(filter):过滤出可以创建虚拟机的主机。
  1. 计算权值(weight):根据权重大小进行分配,默认根据资源可用空间进行权重排序。

nova-compute

nova-compute:负责虚拟机的生命周期管理,创建并终止虚拟机实例的工作后台程序hypervisor api

nova-conductor

nova-conductor:计算节点访问数据的中间件,nova-compute服务和数据库之间的中间件。它消除了对云数据库的直接访问。

nova-api-metadata

nova-api-metadata:从实例中接收元数据请求。nova-api-metadata服务通常在nova-network安装时使用的是多宿主模式运行。

nova-placement-api

nova-placement-api:跟踪每个计算提供者的仓库和使用情况。

nova-consoleauth

nova-consoleauth:用于控制台的授权验证,授权控制台代理提供的用户令牌。此服务必须运行用于控制台代理工作。您可以运行任何类型的代理,而不是集群配置中的单nova-consoleauth服务。

Queue

Queue:在守护进程之间传递消息的中心。通常使用RabbitMQ,也可以用另一个基于AMQP的消息队列,例如ZeroMQ。

工作流程

  1. 界面或命令行通过RESTful API向keystone获取认证信息。
  2. keystone通过用户请求认证信息,正确后生成token返回给对应的认证请求。
  3. 界面或命令行通过RESTful API向nova-api发送一个创建虚拟机的请求(携带token)。
  4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户。
  5. keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
  6. 通过认证后nova-api检查创建虚拟机参数是否有效合法后和数据库通讯。
  7. 当所有的参数有效后初始化新建虚拟机的数据库记录。
  8. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
  9. nova-scheduler进程侦听消息队列,获取nova-api的请求。
  10. nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
  11. 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
  12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
  13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
  14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。
  15. nova-conductor从消息队队列中拿到nova-compute请求消息。
  16. nova-conductor根据消息查询虚拟机对应的信息。
  17. nova-conductor从数据库中获得虚拟机对应信息。
  18. nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
  19. nova-compute从对应的消息队列中获取虚拟机信息消息。
  20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
  21. glance-api向keystone认证token是否有效,并返回验证结果。
  22. token验证通过,nova-compute获得虚拟机镜像信息(URL)。
  23. nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
  24. neutron-server向keystone认证token是否有效,并返回验证结果。
  25. token验证通过,nova-compute获得虚拟机网络信息。
  26. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
  27. cinder-api向keystone认证token是否有效,并返回验证结果。
  28. token验证通过,nova-compute获得虚拟机持久化存储信息。
  29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

安装部署nova

控制节点安装nova

创库授权

代码语言:javascript
复制
# 创建数据库
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;

# 创建用户
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY '123456';

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY '123456';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY '123456';

GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY '123456';

nova创建用户\角色

代码语言:javascript
复制
# 非交互式创建用户nova密码nova
openstack user create --domain default --password nova nova
# 交互式创建用户
# openstack user create --domain default --password-prompt nova

# 授权到admin角色
openstack role add --project service --user nova admin

# 检验
[root@master01 ~]# openstack user list
+----------------------------------+-----------+
| ID                               | Name      |
+----------------------------------+-----------+
| d8cd16895f8d4421975a3e22396af49a | admin     |
| d5935c2448ff4adb91758635718ea7a8 | glance    |
| 45dc96ccfbde4da0b042c715781dbf06 | placement |
| a39969441ac94974ae36fb738fb3ea78 | nova      |
+----------------------------------+-----------+

[root@master01.boysec.cn ~]# openstack role assignment list
+----------------------------------+----------------------------------+-------+----------------------------------+--------+--------+-----------+
| Role                             | User                             | Group | Project                          | Domain | System | Inherited |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+--------+-----------+
| 9ccb729edfb945f4bc4ea5b4abcb305c | 45dc96ccfbde4da0b042c715781dbf06 |       | e605a87cc5c34ae0869226db49b48162 |        |        | False     |
| 9ccb729edfb945f4bc4ea5b4abcb305c | a39969441ac94974ae36fb738fb3ea78 |       | e605a87cc5c34ae0869226db49b48162 |        |        | False     |
| 9ccb729edfb945f4bc4ea5b4abcb305c | d5935c2448ff4adb91758635718ea7a8 |       | e605a87cc5c34ae0869226db49b48162 |        |        | False     |
| 9ccb729edfb945f4bc4ea5b4abcb305c | d8cd16895f8d4421975a3e22396af49a |       | e40a3e215adc41fa89b7c6ddf9443dc3 |        |        | False     |
| 9ccb729edfb945f4bc4ea5b4abcb305c | d8cd16895f8d4421975a3e22396af49a |       |                                  |        | all    | False     |
+----------------------------------+----------------------------------+-------+----------------------------------+--------+--------+-----------+

创建nova服务(api接口)

代码语言:javascript
复制
openstack service create --name nova \
  --description "OpenStack Compute" compute

openstack endpoint create --region RegionOne \
  compute public http://master01.boysec.cn:8774/v2.1

openstack endpoint create --region RegionOne \
  compute internal http://master01.boysec.cn:8774/v2.1
  
 openstack endpoint create --region RegionOne \
  compute admin http://master01.boysec.cn:8774/v2.1
  
# 检查命令
openstack service list
openstack endpoint list

安装nova

代码语言:javascript
复制
yum install openstack-nova-api openstack-nova-conductor \
  openstack-nova-novncproxy openstack-nova-scheduler -y
  
# openstack-nova-conductor 负责数据库
# openstack-nova-novncproxy  负责云主机连接
# openstack-nova-scheduler  负责调度调度

配置nova

代码语言:javascript
复制
[root@master01 ~]# cp /etc/nova/nova.conf{,.bak}
[root@master01 ~]# grep -Ev "^$|#" /etc/nova/nova.conf.bak  > /etc/nova/nova.conf
[root@master01 ~]# cat /etc/nova/nova.conf
[DEFAULT]
my_ip = 10.1.1.100
# 启动neutron服务,禁用nova内置防火墙
use_neutron = true  
firewall_driver = nova.virt.firewall.NoopFirewallDriver
# 启动计算服务api,metadata定义虚拟机的api
enabled_apis = osapi_compute,metadata 
# 连接消息队列rabbitmq
transport_url = rabbit://openstack:openstack@master01.boysec.cn:5672/
[api]
auth_strategy = keystone
# nova_api连接数据库配置
[api_database]
connection = mysql+pymysql://nova:123456@master01.boysec.cn/nova_api
[barbican]
[cache]
[cinder]
[compute]
[conductor]
[console]
[consoleauth]
[cors]
# nova连接数据库配置
[database]
connection = mysql+pymysql://nova:123456@master01.boysec.cn/nova
[devices]
[ephemeral_storage_encryption]
[filter_scheduler]
[glance]
api_servers = http://master01.boysec.cn:9292
[guestfs]
[healthcheck]
[hyperv]
[ironic]
[key_manager]
[keystone]
[keystone_authtoken]
www_authenticate_uri = http://master01.boysec.cn:5000/
auth_url = http://master01.boysec.cn:5000/
memcached_servers = master01.boysec.cn:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = nova
[libvirt]
[metrics]
[mks]
[neutron]
[notifications]
[osapi_v21]
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[pci]
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://master01.boysec.cn:5000/v3
username = placement
password = placement
[powervm]
[privsep]
[profiler]
[quota]
[rdp]
[remote_debug]
[scheduler]
[serial_console]
[service_user]
[spice]
[upgrade_levels]
[vault]
[vendordata_dynamic_auth]
[vmware]
# VNC连接配置
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
[workarounds]
[wsgi]
[xenserver]
[xvp]
[zvm]

同步数据库

代码语言:javascript
复制
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

# 检查
[root@master01.boysec.cn ~]# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
+-------+--------------------------------------+----------------------------------------+-----------------------------------------------+----------+
|  Name |                 UUID                 |             Transport URL              |              Database Connection              | Disabled |
+-------+--------------------------------------+----------------------------------------+-----------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 |                 none:/                 | mysql+pymysql://nova:****@master01.boysec.cn/nova_cell0 |  False   |
| cell1 | d9de97cb-10e5-4d25-97e9-85e4ecd46f12 | rabbit://openstack:****@master01.boysec.cn:5672/ |    mysql+pymysql://nova:****@master01.boysec.cn/nova    |  False   |
+-------+--------------------------------------+----------------------------------------+-----------------------------------------------+----------+
[root@master01.boysec.cn ~]# nova-manage cell_v2 list_cells

启动服务

代码语言:javascript
复制
systemctl enable \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service
systemctl start \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service

验证

代码语言:javascript
复制
[root@master01.boysec.cn ~]# openstack compute service list
+----+----------------+--------------------+----------+---------+-------+----------------------------+
| ID | Binary         | Host               | Zone     | Status  | State | Updated At                 |
+----+----------------+--------------------+----------+---------+-------+----------------------------+
|  1 | nova-conductor | master01.boysec.cn | internal | enabled | up    | 2021-12-26T03:55:16.000000 |
|  2 | nova-scheduler | master01.boysec.cn | internal | enabled | up    | 2021-12-26T03:55:07.000000 |
+----+----------------+--------------------+----------+---------+-------+----------------------------+

验证操作
1、列出服务组件以验证每个进程的成功启动和注册

# openstack compute service list

2、列出Identity服务中的API端点以验证与Identity服务的连接

# openstack catalog list

3、检查单元格和放置API是否成功运行

[root@master01 ~]# nova-status upgrade check
+--------------------------------+
| Upgrade Check Results          |
+--------------------------------+
| Check: Cells v2                |
| Result: Success                |
| Details: None                  |
+--------------------------------+
| Check: Placement API           |
| Result: Success                |
| Details: None                  |
+--------------------------------+
| Check: Ironic Flavor Migration |
| Result: Success                |
| Details: None                  |
+--------------------------------+
| Check: Cinder API              |
| Result: Success                |
| Details: None                  |
+--------------------------------+

计算节点安装nova

安装

代码语言:javascript
复制
yum install openstack-nova-compute -y

配置nova

代码语言:javascript
复制
cp /etc/nova/nova.conf{,.bak}
grep -Ev "^$|#" /etc/nova/nova.conf.bak  > /etc/nova/nova.conf
cat /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:openstack@master01.boysec.cn
my_ip = 10.1.1.120
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api]
auth_strategy = keystone
[api_database]
[barbican]
[cache]
[cinder]
[compute]
[conductor]
[console]
[consoleauth]
[cors]
[database]
[devices]
[ephemeral_storage_encryption]
[filter_scheduler]
[glance]
api_servers = http://master01.boysec.cn:9292
[guestfs]
[healthcheck]
[hyperv]
[ironic]
[key_manager]
[keystone]
[keystone_authtoken]
www_authenticate_uri = http://master01.boysec.cn:5000/
auth_url = http://master01.boysec.cn:5000/
memcached_servers = master01.boysec.cn:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = nova
[libvirt]
[metrics]
[mks]
[neutron]
[notifications]
[osapi_v21]
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[pci]
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://master01.boysec.cn:5000/v3
username = placement
password = placement
[powervm]
[privsep]
[profiler]
[quota]
[rdp]
[remote_debug]
[scheduler]
discover_hosts_in_cells_interval = 300
[serial_console]
[service_user]
[spice]
[upgrade_levels]
[vault]
[vendordata_dynamic_auth]
[vmware]
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://master01.boysec.cn:6080/vnc_auto.html
[workarounds]
[wsgi]
[xenserver]
[xvp]
[zvm]

启动nova

代码语言:javascript
复制
# 查看是否支持cpu虚拟化
egrep -c '(vmx|svm)' /proc/cpuinfo
# 启动
systemctl enable libvirtd.service openstack-nova-compute.service

控制节点验证

代码语言:javascript
复制
[root@master01.boysec.cn ~]# openstack compute service list
+----+----------------+--------------------+----------+---------+-------+----------------------------+
| ID | Binary         | Host               | Zone     | Status  | State | Updated At                 |
+----+----------------+--------------------+----------+---------+-------+----------------------------+
|  1 | nova-conductor | master01.boysec.cn | internal | enabled | up    | 2021-12-26T05:57:52.000000 |
|  2 | nova-scheduler | master01.boysec.cn | internal | enabled | up    | 2021-12-26T05:57:52.000000 |
|  5 | nova-compute   | node01.boysec.cn   | nova     | enabled | up    | 2021-12-26T05:57:57.000000 |
|  6 | nova-compute   | node02.boysec.cn   | nova     | enabled | up    | 2021-12-26T05:57:59.000000 |
+----+----------------+--------------------+----------+---------+-------+----------------------------+

# 主机发现或者更新主机
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

# 控制节点配置主机发现
vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nova介绍
    • 体系结构
      • 组件介绍
        • nova-api
        • nova-scheduler
        • nova-compute
        • nova-conductor
        • nova-api-metadata
        • nova-placement-api
        • nova-consoleauth
        • Queue
      • 工作流程
      • 安装部署nova
        • 控制节点安装nova
          • 创库授权
          • nova创建用户\角色
          • 创建nova服务(api接口)
          • 安装nova
          • 配置nova
          • 同步数据库
          • 启动服务
          • 验证
        • 计算节点安装nova
          • 安装
          • 配置nova
          • 启动nova
          • 控制节点验证
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档