搭建多OpenStack多节点私有云平台(四)(nova计算服务)

搭建多OpenStack多节点私有云平台(四)

(四)nova计算服务

一、安装并配置控制节点

  1. 要创建数据库,请完成以下步骤:

    • 使用数据库访问客户端连接到数据库服务器,作为root用户:

      $ mysql -u root -p
      
    • 创建nova_api, nova,和nova_cell0数据库:

      MariaDB [(none)]> CREATE DATABASE nova_api;
      MariaDB [(none)]> CREATE DATABASE nova;
      MariaDB [(none)]> CREATE DATABASE nova_cell0;
      
    • 允许适当访问数据库:

      MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
        IDENTIFIED BY 'NOVA_DBPASS';
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
        IDENTIFIED BY 'NOVA_DBPASS';
      
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
        IDENTIFIED BY 'NOVA_DBPASS';
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
        IDENTIFIED BY 'NOVA_DBPASS';
      
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
        IDENTIFIED BY 'NOVA_DBPASS';
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
        IDENTIFIED BY 'NOVA_DBPASS';
      

      取代NOVA_DBPASS有一个合适的密码。

    • 退出数据库访问客户端。

  2. 来源admin访问只管理的CLI命令的凭据:

    $ . admin-openrc
    
  3. 创建计算服务凭据:

    • 创建nova用户:

      $ openstack user create --domain default --password NOVA_PASS nova
      +---------------------+----------------------------------+
      | Field               | Value                            |
      +---------------------+----------------------------------+
      | domain_id           | default                          |
      | enabled             | True                             |
      | id                  | 8a7dbf5279404537b1c7b86c033620fe |
      | name                | nova                             |
      | options             | {}                               |
      | password_expires_at | None                             |
      +---------------------+----------------------------------+
      
    • 添加admin角色到nova用户:

      $ openstack role add --project service --user nova admin
      

      此命令不提供输出。

    • 创建nova服务实体:

      $ openstack service create --name nova \
        --description "OpenStack Compute" compute
      
      +-------------+----------------------------------+
      | Field       | Value                            |
      +-------------+----------------------------------+
      | description | OpenStack Compute                |
      | enabled     | True                             |
      | id          | 060d59eac51b4594815603d75a00aba2 |
      | name        | nova                             |
      | type        | compute                          |
      +-------------+----------------------------------+
      
  4. 创建ComputeAPI服务端点:

    $ openstack endpoint create --region RegionOne \
      compute public http://controller:8774/v2.1
    
    +--------------+-------------------------------------------+
    | Field        | Value                                     |
    +--------------+-------------------------------------------+
    | enabled      | True                                      |
    | id           | 3c1caa473bfe4390a11e7177894bcc7b          |
    | interface    | public                                    |
    | region       | RegionOne                                 |
    | region_id    | RegionOne                                 |
    | service_id   | 060d59eac51b4594815603d75a00aba2          |
    | service_name | nova                                      |
    | service_type | compute                                   |
    | url          | http://controller:8774/v2.1               |
    +--------------+-------------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      compute internal http://controller:8774/v2.1
    
    +--------------+-------------------------------------------+
    | Field        | Value                                     |
    +--------------+-------------------------------------------+
    | enabled      | True                                      |
    | id           | e3c918de680746a586eac1f2d9bc10ab          |
    | interface    | internal                                  |
    | region       | RegionOne                                 |
    | region_id    | RegionOne                                 |
    | service_id   | 060d59eac51b4594815603d75a00aba2          |
    | service_name | nova                                      |
    | service_type | compute                                   |
    | url          | http://controller:8774/v2.1               |
    +--------------+-------------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      compute admin http://controller:8774/v2.1
    
    +--------------+-------------------------------------------+
    | Field        | Value                                     |
    +--------------+-------------------------------------------+
    | enabled      | True                                      |
    | id           | 38f7af91666a47cfb97b4dc790b94424          |
    | interface    | admin                                     |
    | region       | RegionOne                                 |
    | region_id    | RegionOne                                 |
    | service_id   | 060d59eac51b4594815603d75a00aba2          |
    | service_name | nova                                      |
    | service_type | compute                                   |
    | url          | http://controller:8774/v2.1               |
    +--------------+-------------------------------------------+
    
  5. 使用您选择的位置服务用户创建一个Placement服务用户PLACEMENT_PASS:

    $ openstack user create --domain default --password PLACEMENT_PASS placement
    
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | default                          |
    | enabled             | True                             |
    | id                  | fa742015a6494a949f67629884fc7ec8 |
    | name                | placement                        |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
    
  6. 将Placement用户添加到具有管理角色的服务项目中:

    $ openstack role add --project service --user placement admin
    

    此命令不提供输出。

  7. 在服务目录中创建Placement API条目:

    $ openstack service create --name placement --description "Placement API" placement
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Placement API                    |
    | enabled     | True                             |
    | id          | 2d1a27022e6e4185b86adac4444c495f |
    | name        | placement                        |
    | type        | placement                        |
    +-------------+----------------------------------+
    
  8. 创建Placement API服务端点:

    $ openstack endpoint create --region RegionOne placement public http://controller:8778
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 2b1b2637908b4137a9c2e0470487cbc0 |
    | interface    | public                           |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 2d1a27022e6e4185b86adac4444c495f |
    | service_name | placement                        |
    | service_type | placement                        |
    | url          | http://controller:8778           |
    +--------------+----------------------------------+
    
    $ openstack endpoint create --region RegionOne placement internal http://controller:8778
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 02bcda9a150a4bd7993ff4879df971ab |
    | interface    | internal                         |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 2d1a27022e6e4185b86adac4444c495f |
    | service_name | placement                        |
    | service_type | placement                        |
    | url          | http://controller:8778           |
    +--------------+----------------------------------+
    
    $ openstack endpoint create --region RegionOne placement admin http://controller:8778
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 3d71177b9e0f406f98cbff198d74b182 |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 2d1a27022e6e4185b86adac4444c495f |
    | service_name | placement                        |
    | service_type | placement                        |
    | url          | http://controller:8778           |
    +--------------+----------------------------------+
    

安装和配置组件

默认配置文件随发行版而异。您可能需要添加这些节和选项,而不是修改现有的节和选项。另外,省略号(...)在配置片段中,指示应该保留的潜在默认配置选项。

  1. 安装软件包:

    # yum install openstack-nova-api openstack-nova-conductor \
      openstack-nova-console openstack-nova-novncproxy \
      openstack-nova-scheduler openstack-nova-placement-api -y
    
  2. 编辑/etc/nova/nova.conf归档并完成以下操作:

    • [DEFAULT]节中,只启用计算和元数据API:

      [DEFAULT]
      # ...
      enabled_apis = osapi_compute,metadata
      
    • [api_database][database]各节,配置数据库访问:

      [api_database]
      # ...
      connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
      
      [database]
      # ...
      connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
      

      取代NOVA_DBPASS使用您为Compute数据库选择的密码。

    • [DEFAULT]节,配置RabbitMQ消息队列访问:

      [DEFAULT]
      # ...
      transport_url = rabbit://openstack:RABBIT_PASS@controller
      

      取代RABBIT_PASS使用您为openstack记帐RabbitMQ.

    • [api][keystone_authtoken]各节,配置身份服务访问:

      [api]
      # ...
      auth_strategy = keystone
      
      [keystone_authtoken]
      # ...
      auth_uri = http://controller:5000
      auth_url = http://controller:35357
      memcached_servers = controller:11211
      auth_type = password
      project_domain_name = default
      user_domain_name = default
      project_name = service
      username = nova
      password = NOVA_PASS
      

      取代NOVA_PASS使用您为nova身份服务中的用户。

      类中的任何其他选项注释掉或删除。[keystone_authtoken]部分。

    • [DEFAULT]节中,配置my_ip选项使用控制器节点的管理接口IP地址:

      [DEFAULT]
      # ...
      my_ip = 192.168.25.141
      
  • [DEFAULT]节中,启用对网络服务的支持:

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

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

  • [vnc]节中,配置VNC代理以使用控制器节点的管理接口IP地址:

    [vnc]
    enabled = true
    # ...
    vncserver_listen = $my_ip
    vncserver_proxyclient_address = $my_ip
    
  • [glance]节中,配置图像服务API的位置:

    [glance]
    # ...
    api_servers = http://controller:9292
    
  • [oslo_concurrency]节中,配置锁路径:

    [oslo_concurrency]
    # ...
    lock_path = /var/lib/nova/tmp
    
  • [placement]节中,配置Placement API:

    [placement]
    # ...
    os_region_name = RegionOne
    project_domain_name = Default
    project_name = service
    auth_type = password
    user_domain_name = Default
    auth_url = http://controller:35357/v3
    username = placement
    password = PLACEMENT_PASS
    

    取代PLACEMENT_PASS使用您为placement身份服务中的用户。中的任何其他选项注释掉。[placement]部分。

  • 包装缺陷,必须将以下配置添加到Placement API中,从而启用对Placement API的访问/etc/httpd/conf.d/00-nova-placement-api.conf:

    <Directory /usr/bin>
       <IfVersion >= 2.4>
          Require all granted
       </IfVersion>
       <IfVersion < 2.4>
          Order allow,deny
          Allow from all
       </IfVersion>
    </Directory>
    
  • 重新启动httpd服务:

    # systemctl restart httpd
    
  1. 填充nova-api数据库:

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

    忽略此输出中的任何弃用消息。

  2. 注册cell0数据库:

    # su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
    
  3. 创建cell1牢房:

    # su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
    
  4. 填充nova数据库:

    # su -s /bin/sh -c "nova-manage db sync" nova
    
  5. 验证nova cell 0和cell 1是否正确注册:

    # nova-manage cell_v2 list_cells
    +-------+--------------------------------------+
    | Name  | UUID                                 |
    +-------+--------------------------------------+
    | cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 |
    | cell0 | 00000000-0000-0000-0000-000000000000 |
    +-------+--------------------------------------+
    

最后安装

  • 启动Compute服务并将其配置为在系统启动时启动:

    # systemctl enable openstack-nova-api.service \
      openstack-nova-consoleauth.service openstack-nova-scheduler.service \
      openstack-nova-conductor.service openstack-nova-novncproxy.service
    # systemctl start openstack-nova-api.service \
      openstack-nova-consoleauth.service openstack-nova-scheduler.service \
      openstack-nova-conductor.service openstack-nova-novncproxy.service
    

    查看有没有弄好

    # nova service-list
    +--------------------------------------+------------------+------------+----------+---------+-------+----------------------------+-----------------+-------------+
    | Id                                   | Binary           | Host       | Zone     | Status  | State | Updated_at                 | Disabled Reason | Forced down |
    +--------------------------------------+------------------+------------+----------+---------+-------+----------------------------+-----------------+-------------+
    | 26469d4d-5341-4a7e-95cd-3279dbed39e9 | nova-scheduler   | controller | internal | enabled | up    | 2020-10-26T03:50:21.000000 | -               | False       |
    | a877753e-c5be-4621-8715-91690d1b32a5 | nova-conductor   | controller | internal | enabled | up    | 2020-10-26T03:50:13.000000 | -               | False       |
    | f7d4f947-fe98-43f1-b03b-dd83aafb605f | nova-consoleauth | controller | internal | enabled | up    | 2020-10-26T03:50:13.000000 | -               | False       |
    +--------------------------------------+------------------+------------+----------+---------+-------+----------------------------+-----------------+-------------+
    
    

二、安装和配置计算节点

安装和配置组件

默认配置文件随发行版而异。您可能需要添加这些节和选项,而不是修改现有的节和选项。另外,省略号(...)在配置片段中,指示应该保留的潜在默认配置选项。

  1. 安装软件包:

    # yum install openstack-nova-compute
    
  2. 编辑/etc/nova/nova.conf归档并完成以下操作:

    • [DEFAULT]节中,只启用计算和元数据API:

      [DEFAULT]
      # ...
      enabled_apis = osapi_compute,metadata
      
    • [DEFAULT]节,配置RabbitMQ消息队列访问:

      [DEFAULT]
      # ...
      transport_url = rabbit://openstack:RABBIT_PASS@controller
      

      取代RABBIT_PASS使用您为openstack记帐RabbitMQ.

    • [api][keystone_authtoken]各节,配置身份服务访问:

      [api]
      # ...
      auth_strategy = keystone
      
      [keystone_authtoken]
      # ...
      auth_uri = http://controller:5000
      auth_url = http://controller:35357
      memcached_servers = controller:11211
      auth_type = password
      project_domain_name = default
      user_domain_name = default
      project_name = service
      username = nova
      password = NOVA_PASS
      

      取代NOVA_PASS使用您为nova身份服务中的用户。

      类中的任何其他选项注释掉或删除。[keystone_authtoken]部分。

    • [DEFAULT]节中,配置my_ip备选方案:

      [DEFAULT]
      # ...
      my_ip = 192.168.25.143
      

      取代MANAGEMENT_INTERFACE_IP_ADDRESS对于计算节点上的管理网络接口的IP地址,通常为第一个节点的10.0.0.31示例体系结构.

    • [DEFAULT]节中,启用对网络服务的支持:

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

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

    • [vnc]节中,启用和配置远程控制台访问:

      [vnc]
      # ...
      enabled = True
      vncserver_listen = 0.0.0.0
      vncserver_proxyclient_address = $my_ip
      novncproxy_base_url = http://controller:6080/vnc_auto.html
      

      服务器组件侦听所有IP地址,代理组件只侦听计算节点的管理接口IP地址。基URL指示可以使用Web浏览器访问此计算节点上实例的远程控制台的位置。

      如果要访问远程控制台的web浏览器驻留在无法解析controller主机名,您必须替换controller具有控制器节点的管理接口IP地址。

    • [glance]节中,配置图像服务API的位置:

      [glance]
      # ...
      api_servers = http://controller:9292
      
    • [oslo_concurrency]节中,配置锁路径:

      [oslo_concurrency]
      # ...
      lock_path = /var/lib/nova/tmp
      
    • [placement]节中,配置Placement API:

      [placement]
      # ...
      os_region_name = RegionOne
      project_domain_name = Default
      project_name = service
      auth_type = password
      user_domain_name = Default
      auth_url = http://controller:35357/v3
      username = placement
      password = PLACEMENT_PASS
      

      取代PLACEMENT_PASS使用您为placement身份服务中的用户。中的任何其他选项注释掉。[placement]部分。

最后安装

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

    $ egrep -c '(vmx|svm)' /proc/cpuinfo
    

    如果此命令返回值为one or greater,您的计算节点支持硬件加速,这通常不需要额外的配置。

    如果此命令返回值为zero,您的计算节点不支持硬件加速,您必须配置libvirt使用QEMU而不是KVM。

    • 编辑[libvirt]部分/etc/nova/nova.conf档案如下:

      [libvirt]
      # ...
      virt_type = qemu
      
  2. 启动Compute服务,包括其依赖项,并将其配置为在系统启动时自动启动:

    # systemctl enable libvirtd.service openstack-nova-compute.service
    # systemctl start libvirtd.service openstack-nova-compute.service
    

如果nova-compute服务启动失败,请检查/var/log/nova/nova-compute.log。错误信息AMQP server on controller:5672 isunreachable可能表示控制器节点上的防火墙正在阻止对端口5672的访问。将防火墙配置为在控制器节点上打开端口5672并重新启动nova-compute计算节点上的服务。

将计算节点添加到单元数据库中

重要

上运行以下命令控制器节点。

  1. 获取管理凭据以启用只管理的CLI命令,然后确认数据库中有计算主机:

    $ . admin-openrc
    
    $ openstack hypervisor list (一开始没有执行下面的语句后就有了) 或者 nova service-list 
    +----+---------------------+-----------------+-----------+-------+
    | ID | Hypervisor Hostname | Hypervisor Type | Host IP   | State |
    +----+---------------------+-----------------+-----------+-------+
    |  1 | compute1            | QEMU            | 10.0.0.31 | up    |
    +----+---------------------+-----------------+-----------+-------+
    
  2. 发现计算主机:

    # su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
    
    Found 2 cell mappings.
    Skipping cell0 since it does not contain hosts.
    Getting compute nodes from cell 'cell1': ad5a5985-a719-4567-98d8-8d148aaae4bc
    Found 1 computes in cell: ad5a5985-a719-4567-98d8-8d148aaae4bc
    Checking host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
    Creating host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
    

    添加新的计算节点时,必须运行nova-manage cell_v2 discover_hosts在控制器节点上注册这些新的计算节点。或者,您可以在/etc/nova/nova.conf:

    [scheduler]
    discover_hosts_in_cells_interval = 300
    

在计算节点查看日志

tail -f /var/log/nova/nova-compute.log

注意时间要同步,如果你重新传到快照时间会同步不了

要打以下代码

systemctl enable chronyd.service
systemctl restart chronyd.service
chronyc sources
posted @ 2020-11-06 14:00  龙吟九枭  阅读(664)  评论(0)    收藏  举报