安装和配置 Red Hat Enterprise Linux 和 CentOS 的控制器节点

本节描述了如何在控制器节点上安装和配置 Compute 服务,代号为 nova。

先决条件

在安装和配置 Compute 服务之前,您必须创建数据库、服务凭证和 API 端点。

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

    • 使用数据库访问客户端以 root 用户身份连接到数据库服务器

      $ mysql -u root -p
      
    • 创建 nova_apinovanova_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. 创建 Compute 服务凭证

    • 创建 nova 用户

      $ openstack user create --domain default --password-prompt nova
      
      User Password:
      Repeat User Password:
      +---------------------+----------------------------------+
      | 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. 创建 Compute API 服务端点

    $ 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 服务并配置用户和端点

安装和配置组件

注意

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

  1. 安装软件包

    # dnf install openstack-nova-api openstack-nova-conductor \
      openstack-nova-novncproxy openstack-nova-scheduler
    
  2. 编辑 /etc/nova/nova.conf 文件并完成以下操作

    • [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 消息队列访问 (RabbitMQ 应该已经 安装和配置)

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

      RABBIT_PASS 替换为您为 RabbitMQ 中的 openstack 帐户选择的密码。

    • [keystone_authtoken] 部分中,配置 Identity 服务访问

      [keystone_authtoken]
      # ...
      www_authenticate_uri = http://controller:5000/
      auth_url = http://controller:5000/
      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 替换为您在 Identity 服务中为 nova 用户选择的密码。

      注意

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

    • [service_user] 部分中,配置 服务用户令牌

      [service_user]
      send_service_user_token = true
      auth_url = https://controller/identity
      auth_type = password
      project_domain_name = Default
      project_name = service
      user_domain_name = Default
      username = nova
      password = NOVA_PASS
      

      NOVA_PASS 替换为您在 Identity 服务中为 nova 用户选择的密码。

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

      [DEFAULT]
      # ...
      my_ip = 10.0.0.11
      
    • 配置 /etc/nova/nova.conf[neutron] 部分。有关更多详细信息,请参阅 Networking 服务安装指南

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

      [vnc]
      enabled = true
      # ...
      server_listen = $my_ip
      server_proxyclient_address = $my_ip
      
    • [glance] 部分中,配置 Image 服务 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 = PLACEMENT_PASS
      

      PLACEMENT_PASS 替换为您为安装 Placement 时创建的 placement 服务用户选择的密码。注释掉或删除 [placement] 部分中的任何其他选项。

  3. 填充 nova-api 数据库

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

    注意

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

  4. 注册 cell0 数据库

    # su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
    
  5. 创建 cell1 单元

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

    # su -s /bin/sh -c "nova-manage db sync" nova
    
  7. 验证 nova cell0 和 cell1 是否已正确注册

    # 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:****@controller/nova_cell0?charset=utf8 |  False   |
    | cell1 | f690f4fd-2bc5-4f15-8145-db561a7b9d3d | rabbit://openstack:****@controller:5672/nova_cell1 | mysql+pymysql://nova:****@controller/nova_cell1?charset=utf8 |  False   |
    +-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
    

完成安装

  • 启动 Compute 服务并配置它们在系统启动时启动

    # 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