1.6 OpenStack计算服务Nova

Nova是OpenStack最早的两个模块之一(另一个是对象存储)。在OpenStack体系中是计算资源虚拟化的项目。同时Nova也是OpenStack项目中组件最多的一个项目。在中小型部署中,我们常常把除nova-compute之外的其它组件部署到一台服务器上,称之为控制节点。将nova-compute部署到单独的一台服务器上,称之为计算节点。

Nova服务组件

  • Nova-Api服务

    主要用于接收和响应外部请求,它支持OpenStack API、Amazon EC2 等API

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

    是Nova的证书管理服务,用来为EC2服务提供身份验证,仅仅是在EC2 API的请求中使用。

  • Nova-Scheduler服务

    用于Nova的调度工作,在创建虚拟机时,由它选择将虚拟机创建在哪台计算节点上。

  • Nova-Conductor服务

    这个是服务是计算节点访问数据库时的一个中间层,它出现的作用是防止计算节点的Nova-Compute服务直接访问数据库。同时这个中间层可以进行水平扩展。

  • Nova-Console服务

    Nova增强了它的控制台服务。控制台服务允许用户可以通过代理服务器访问虚拟化实例。这就涉及了一对新的守护进程(nova-console和nova-consoleauth).

  • Nova-Consoleauth服务

    主要用于控制台的用户访问授权

  • Nova-Novncproxy服务

    用于为用户访问虚拟机提供了一个VNC的代理。通过VNC协议,可以支持基于浏览器的novnc客户端,后面你在网页打开的console界面就是依靠这个服务提供的。

  • Nova-Compute

    Nova-compute是Nova最重要的组件之一。

    • nova-compute 一般运行在计算节点上,通过Message Queue接收并管理VM的生命周期。
    • Nova-compute 通过Libvirt管理KVM,通过XenAPI管理Xen等。

Nova控制节点部署

首先我们需要先在控制节点部署除nova-compute之外的其它必备的服务。

  1. 控制节点安装
[root@linux-node1 ~]# yum install -y openstack-nova-api \
  openstack-nova-conductor \
  openstack-nova-novncproxy openstack-nova-scheduler

nova.conf是配置Nova的核心配置文件,Nova的配置主要围绕该配置文件。

  • 数据库配置
[root@linux-node1 ~]# vim /etc/nova/nova.conf
[api_database]
connection= mysql+pymysql://nova:nova@192.168.56.11/nova_api
[database]
connection= mysql+pymysql://nova:nova@192.168.56.11/nova
  • RabbitMQ配置

    Nova和其它组件之间,以及Nova各个服务之间的通信都要通过消息队列来进行,所以需要配置RabbmitMQ的连接。注意是DEFAULT配置栏目下面。

[root@linux-node1 ~]# vim /etc/nova/nova.conf
[DEFAULT]
transport_url = rabbit://openstack:openstack@192.168.56.11
  • Keystone相关配置

    Nova需要连接到Keystone进行认证和服务管理。

[root@linux-node1 ~]# vim /etc/nova/nova.conf
[api]
auth_strategy=keystone
[keystone_authtoken]
www_authenticate_uri = http://192.168.56.11:5000/
auth_url = http://192.168.56.11:5000/
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
  • 关闭Nova的防火墙功能

    因为我们要使用Neutron的防火墙功能,所以关闭Nova自己的防火墙驱动。

[DEFAULT]
use_neutron=true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
  • VNC配置

    vnc的配置用于虚拟机VNC端口的监听和novncproxy的配置,这样后面我们通过DashBoard的novnc界面就可以查看虚拟机的界面。

[root@linux-node1 ~]# vim /etc/nova/nova.conf
[vnc]
enabled=true
server_listen = 0.0.0.0
server_proxyclient_address = 192.168.56.11
  • 设置glance
[glance]
api_servers = http://192.168.56.11:9292
  • 在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
lock_path=/var/lib/nova/tmp
  • 设置启用的api
[DEFAULT]
enabled_apis=osapi_compute,metadata
  • 设置placement

新增到配置文件末尾

[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://192.168.56.11:5000/v3
username = placement
password = placement
  1. 同步数据库
[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
  • 注册cell0数据库
[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
  • 创建cell1的cell
[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
  • 同步nova数据库
[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage db sync" nova
  • 验证cell0和cell1的注册是否正确
[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
  • 测试数据库同步情况
[root@linux-node1 ~]# mysql -h 192.168.56.11 -unova -pnova -e "use nova;show tables;"
[root@linux-node1 ~]# mysql -h 192.168.56.11 -unova -pnova -e "use nova_api;show tables;"
  1. 启动Nova Service

    • 设置开机自动启动
[root@linux-node1 ~]# systemctl enable openstack-nova-api.service \
openstack-nova-scheduler.service \
openstack-nova-conductor.service \
openstack-nova-novncproxy.service
  • 启动控制节点服务
[root@linux-node1 ~]# systemctl start openstack-nova-api.service \
  openstack-nova-scheduler.service openstack-nova-conductor.service \
  openstack-nova-novncproxy.service
  1. Nova服务注册

    和Keystone、Glance一样,Nova服务也需要在Keystone上做注册,并告诉Keystone它所暴漏的API。

    # source admin-openstack.sh
    # openstack service create --name nova --description "OpenStack Compute" compute
    # openstack endpoint create --region RegionOne compute public http://192.168.56.11:8774/v2.1
    # openstack endpoint create --region RegionOne compute internal http://192.168.56.11:8774/v2.1
    # openstack endpoint create --region RegionOne compute admin http://192.168.56.11:8774/v2.1
    
    • 验证控制节点服务
[root@openstack-node1 ~]# openstack compute service list
+----+----------------+-----------------------------+----------+---------+-------+----------------------------+
| ID | Binary         | Host                        | Zone     | Status  | State | Updated At                 |
+----+----------------+-----------------------------+----------+---------+-------+----------------------------+
|  4 | nova-scheduler | linux-node1.example.com | internal | enabled | up    | 2020-02-04T04:48:47.000000 |
| 11 | nova-conductor | linux-node1.example.com | internal | enabled | up    | 2020-02-04T04:48:47.000000 |
+----+----------------+-----------------------------+----------+---------+-------+----------------------------+

Nova计算节点部署

根据我们开始实验规划,我们将使用一个控制节点和一个计算节点。计算节点是真正运行虚拟机的服务器,对CPU、内存和硬盘要求都比较高,通常是配置比较强劲的服务器充当。当然在实验的过程中,完全可以和控制节点在一台服务器上。好的,现在请你打开第二台虚拟机并且登陆。

  1. 计算节点安装

计算节点需要依赖与虚拟化技术来运行虚拟机实例,还记得前面我们讨论OpenStack与虚拟化之间的关系吗?OpenStack默认使用KVM作为Hypervisor,所以在计算节点上需要安装KVM和libvirt。这样OpenStack的控制节点上的nova服务就可以调用Nova-compute进行虚拟机的创建和管理。

[root@linux-node2 ~]# yum install -y openstack-nova-compute
  • 复制配置文件

    计算节点的配置文件和控制节点的基本相同,我们可以在控制节点nova.conf的基础上进行增加即可,所以首先请将控制节点的配置文件直接复制过来吧。

[root@linux-node1 ~]# scp /etc/nova/nova.conf 192.168.56.12:/etc/nova/nova.conf
[root@linux-node2 ~]# chown root:nova /etc/nova/nova.conf
  • 删除多余的数据配置

    删除数据库配置 相对于控制节点的配置,计算节点需要变更VNC的配置。

  • 修改VNC配置

    计算节点需要监听所有IP,同时设置novncproxy的访问地址

[vnc]
enabled=true
server_listen = 0.0.0.0
server_proxyclient_address = 192.168.56.12
novncproxy_base_url = http://192.168.56.11:6080/vnc_auto.html
  • 虚拟化适配

    查看计算节点的服务器是否支持硬件虚拟化。

[root@linux-node2 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
如果返回的是0,表示不支持硬件虚拟化,需要在nova.conf里面设置
[libvirt]
virt_type=qemu
如果返回的是非0的值,那么表示计算节点服务器支持硬件虚拟化,需要在nova.conf里面设置
[libvirt]
virt_type=kvm
  1. 启动nova-compute
# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service
  1. 计算节点加入控制节点

当添加新的计算节点时,必须在控制器节点上运行nova-manage cell_v2 discover_hosts来注册这些新的计算节点。

[root@linux-node1 ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

或者,您可以在/etc/nova/nova.conf中设置适当的间隔:

[scheduler]
discover_hosts_in_cells_interval = 300
  1. 验证计算节点

在控制节点再次执行host list,可以发现nova-compute已经成功注册。 再次执行host list可以看到。计算节点已经注册成功。

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

验证Nova安装

[root@linux-node1 ~]# openstack compute service list
+----+------------------+-------------------------+----------+---------+-------+----------------------------+
| ID | Binary           | Host                    | Zone     | Status  | State | Updated At                 |
+----+------------------+-------------------------+----------+---------+-------+----------------------------+
|  1 | nova-consoleauth | linux-node1.example.com | internal | enabled | up    | 2018-02-03T10:38:30.000000 |
|  2 | nova-conductor   | linux-node1.example.com | internal | enabled | up    | 2018-02-03T10:38:30.000000 |
|  3 | nova-scheduler   | linux-node1.example.com | internal | enabled | up    | 2018-02-03T10:38:30.000000 |
|  6 | nova-compute     | linux-node2.example.com | nova     | enabled | up    | None                       |
+----+------------------+-------------------------+----------+---------+-------+----------------------------+

验证所有的Endpoint API是否正确

[root@linux-node1 ~]# openstack catalog list
+-----------+-----------+--------------------------------------------+
| Name      | Type      | Endpoints                                  |
+-----------+-----------+--------------------------------------------+
| placement | placement | RegionOne                                  |
|           |           |   public: http://192.168.56.11:8778        |
|           |           | RegionOne                                  |
|           |           |   internal: http://192.168.56.11:8778      |
|           |           | RegionOne                                  |
|           |           |   admin: http://192.168.56.11:8778         |
|           |           |                                            |
| keystone  | identity  | RegionOne                                  |
|           |           |   public: http://192.168.56.11:5000/v3/    |
|           |           | RegionOne                                  |
|           |           |   admin: http://192.168.56.11:35357/v3/    |
|           |           | RegionOne                                  |
|           |           |   internal: http://192.168.56.11:35357/v3/ |
|           |           |                                            |
| glance    | image     | RegionOne                                  |
|           |           |   public: http://192.168.56.11:9292        |
|           |           | RegionOne                                  |
|           |           |   admin: http://192.168.56.11:9292         |
|           |           |                                            |
| nova      | compute   | RegionOne                                  |
|           |           |   admin: http://192.168.56.11:8774/v2.1    |
|           |           | RegionOne                                  |
|           |           |   public: http://192.168.56.11:8774/v2.1   |
|           |           | RegionOne                                  |
|           |           |   internal: http://192.168.56.11:8774/v2.1 |
|           |           |                                            |
+-----------+-----------+--------------------------------------------+

检查cells和placement API状态

[root@linux-node1 ~]# nova-status upgrade check
+---------------------------+
| Upgrade Check Results     |
+---------------------------+
| Check: Cells v2           |
| Result: Success           |
| Details: None             |
+---------------------------+
| Check: Placement API      |
| Result: Success           |
| Details: None             |
+---------------------------+
| Check: Resource Providers |
| Result: Success           |
| Details: None             |
+---------------------------+
Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2020-02-04 21:28:43

results matching ""

    No results matching ""