4605 Words

OpenStack Ussuri マニュアルインストールその5―Nova 編

  • Nova は VM インスタンスの起動・停止など管理する
  • 裏で KVM/QEMU のlibvirtを叩く(libvirt以外もできるらしい)

コントローラノード

OpenStack Docs: Install and configure controller node for Ubuntu

Controller

  • コントローラノードには主に VM インスタンスを計画的に建てるための API 群が入る(?)

前提条件

OpenStack Docs: Install and configure controller node for Ubuntu - Prerequisites

  1. Nova をインストールする前にデータベースを作成する必要がある

    #root user

    mysql
    
    # 以下は`MariaDB [(none)]>`のプロンプトに入力する
    CREATE DATABASE nova_api;
    CREATE DATABASE nova;
    CREATE DATABASE nova_cell0;
    GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
    GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
    GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
    GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
    GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
    GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
    
    • !Caution NOVA_DBPASSは適切なパスワードに書き換える
    • nova_api, nova, nova_cell0データベースの作成とアクセス権限の付与
  2. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  3. サービス資格情報

    • novaユーザ作成

      $any user

      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                             |
      +---------------------+----------------------------------+
      
      • !Caution パスワードプロンプトではNOVA_PASSを入力
    • serviceプロジェクト、novaユーザにadminの役割を割り当てる

      $any user

      openstack role add --project service --user nova admin
      
    • computeサービス (name: nova) を作成

      $any user

      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 エンドポイント作成

    $any user

    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               |
    +--------------+-------------------------------------------+
    

    $any user

    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               |
    +--------------+-------------------------------------------+
    

    $any user

    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               |
    +--------------+-------------------------------------------+
    
    • publicinternaladminにそれぞれ作成

Nova API インストール

OpenStack Docs: Install and configure controller node for Ubuntu - Install and configure components

  1. パッケージインストール

    #root user

    apt install nova-api nova-conductor nova-novncproxy nova-scheduler
    
  2. /etc/nova/nova.conf編集

    [DEFAULT]
    # ...
    
    # バグがあるようなので`log_dir`は消す
    # log_dir = ...
    
    # コントローラノードの管理ネットワークIPアドレス
    # ex) my_ip = 192.168.0.11
    my_ip = CONTROLLER_MANAGEMENT_IP
    
    # `RABBIT_PASS`は適切なパスワードに書き換える
    transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
    
    # ...
    
    [api_database]
    # ...
    # `NOVA_DBPASS`は適切なパスワードに書き換える
    connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
    
    [database]
    # ...
    # `NOVA_DBPASS`は適切なパスワードに書き換える
    connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
    
    [api]
    # ...
    # `keystone`を利用することを指定
    auth_strategy = keystone
    
    [keystone_authtoken]
    # 他のオプションはすべて削除またはコメントアウトする
    # `NOVA_PASS`は適切なパスワードに書き換える
    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
    
    [neutron]
    # 次の手順でインストールするNeutronの設定部分も先に書いておく
    # 他のオプションはすべて削除またはコメントアウトする
    # `NEUTRON_PASS`、`METADATA_SECRET`は適切なパスワードに書き換える
    auth_url = http://controller:5000
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    service_metadata_proxy = true
    metadata_proxy_shared_secret = METADATA_SECRET
    
    [vnc]
    # ...
    enabled = true
    server_listen = $my_ip
    server_proxyclient_address = $my_ip
    
    [glance]
    # ...
    # GlanceのAPIサーバ
    api_servers = http://controller:9292
    
    [oslo_concurrency]
    # ...
    lock_path = /var/lib/nova/tmp
    
    [placement]
    # 他のオプションはすべて削除またはコメントアウトする
    # `PLACEMENT_PASS`は適切なパスワードに書き換える
    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
    
    # ...
    
    • !Caution RABBIT_PASSは適切なパスワードに書き換える

    • !Caution NOVA_DBPASSは適切なパスワードに書き換える

    • !Caution NOVA_PASSは適切なパスワードに書き換える

    • !Caution NEUTRON_PASSは適切なパスワードに書き換える

    • !Caution METADATA_SECRETは適切なパスワードに書き換える

    • !Caution PLACEMENT_PASSは適切なパスワードに書き換える

    • ちなみに、コントローラノードとコンピュートノードを分離しない All-in-One 構成の場合は コントローラノードの処理にメモリや CPU を事前に予約しておくといいかも…?です

      [DEFAULT]
      # ...
      reserved_host_memory_mb = 4096
      reserved_host_cpus = 2
      
      • 上の例ではメモリ 4G と CPU2 スレッド(単位はコアではなくスレッドのはず)をコンピュートノード用に事前確保している
      • (特にチューニングしたわけではないので、いくつにすればよいかは不明です)
  3. Nova API データベース同期

    #root user

    su -s /bin/sh -c "nova-manage api_db sync" nova
    
  4. cell0データベース登録

    #root user

    su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
    
    • Nova ではスケーラビリティのためにマルチセル方式を採用している
    • セルの中でもcell0は特別なセルであり、最小限の DB 情報しかもっていないらしい
    • よくわかってないので気になったら調べてください
  5. cell1セル作成

    #root user

    su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
    
    • Nova ではスケーラビリティのためにマルチセル方式を採用している
    • cell1は実際に VM インスタンスを建てたりするセルになるみたい
  6. Nova データベース同期

    #root user

    su -s /bin/sh -c "nova-manage db sync" nova
    
  7. セルの登録確認

    #root user

    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   |
    +-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
    

コントローラノードのサービス再起動

OpenStack Docs: Install and configure controller node for Ubuntu - Finalize installation

#root user

systemctl restart nova-api
systemctl restart nova-scheduler
systemctl restart nova-conductor
systemctl restart nova-novncproxy

コンピュートノード

OpenStack Docs: Install and configure a compute node for Ubuntu

Compute

  • コンピュートノードでは実際に VM インスタンスの作成、起動、停止などをおこなう
  • ドキュメントの構成では KVM/QEMU のlibvirtをもとにする

Nova Compute インストール

OpenStack Docs: Install and configure a compute node for Ubuntu - Install and configure components

  1. パッケージインストール

    #root user

    apt install nova-compute
    
  2. /etc/nova/nova.conf編集

    [DEFAULT]
    # ...
    
    # コンピュートノードの管理ネットワークIPアドレス
    # ex) my_ip = 192.168.0.12
    my_ip = COMPUTE_MANAGEMENT_IP
    
    # `RABBIT_PASS`は適切なパスワードに書き換える
    transport_url = rabbit://openstack:RABBIT_PASS@controller
    
    # ...
    
    [api]
    # ...
    # `keystone`を利用することを指定
    auth_strategy = keystone
    
    [keystone_authtoken]
    # 他のオプションはすべて削除またはコメントアウトする
    # `NOVA_PASS`は適切なパスワードに書き換える
    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
    
    [neutron]
    # 次の手順でインストールするNeutronの設定部分も先に書いておく
    # 他のオプションはすべて削除またはコメントアウトする
    # `NEUTRON_PASS`は適切なパスワードに書き換える
    auth_url = http://controller:5000
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    region_name = RegionOne
    project_name = service
    username = neutron
    password = NEUTRON_PASS
    
    [vnc]
    # ...
    enabled = true
    server_listen = 0.0.0.0
    server_proxyclient_address = $my_ip
    
    # 以下のURLはHorizonでWebコンソールを開くときのリンクアドレスになる
    # ドキュメントの通り`http://controller:6080/vnc_auto.html`とすると
    # ブラウザで`http://controller:6080/vnc_auto.html`にアクセスしようとしてしまう
    # アクセス可能なドメイン名またはIPアドレスに書き換えること
    novncproxy_base_url = http://[Accessable Domain Name / IP Address]:6080/vnc_auto.html
    
    [glance]
    # ...
    # GlanceのAPIサーバ
    api_servers = http://controller:9292
    
    [oslo_concurrency]
    # ...
    lock_path = /var/lib/nova/tmp
    
    [placement]
    # 他のオプションはすべて削除またはコメントアウトする
    # `PLACEMENT_PASS`は適切なパスワードに書き換える
    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
    
    # ...
    
    • !Caution RABBIT_PASSは適切なパスワードに書き換える
    • !Caution NOVA_DBPASSは適切なパスワードに書き換える
    • !Caution NOVA_PASSは適切なパスワードに書き換える
    • !Caution NEUTRON_PASSは適切なパスワードに書き換える
    • !Caution PLACEMENT_PASSは適切なパスワードに書き換える
  3. KVM 対応確認

    $any user

    egrep -c '(vmx|svm)' /proc/cpuinfo
    
    • 1以上の値の場合 KVM に対応している(追加設定の必要なし)

    • 0を返す場合は KVM に対応していないので仮想化すべてを QEMU でおこなうように設定する必要がある
      /etc/nova/nova-compute.conf編集

      [libvirt]
      # ...
      # libvirtが仮想化すべてをQEMUでおこなうように設定
      virt_type = qemu
      
    • コンピュートノードが物理マシンの場合は BIOS で INTEL VT-X あるいは AMD-V の仮想化ハードウェア拡張を有効化すれば KVM 利用可能になるはず

    • コンピュートノードが仮想マシンの場合はハイパーバイザ側で VM に INTEL VT-X あるいは AMD-V の仮想化ハードウェア拡張を有効化するよう設定すれば KVM 利用可能になるはず

    • KVM 対応させた方が仮想 CPU のパフォーマンスが圧倒的にあがるらしいので対応させておくとよい


コンピュートノードのサービス再起動

OpenStack Docs: Install and configure a compute node for Ubuntu - Finalize installation

#root user

systemctl restart nova-compute

コンピュートノードをコントローラノードのセルデータベースに追加する

OpenStack Docs: Install and configure a compute node for Ubuntu - Add the compute node to the cell database

Controller

  1. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  2. データベースにコンピュートホストが存在することを確認する

    $any user

    openstack compute service list --service nova-compute
    
    +----+-------+--------------+------+-------+---------+----------------------------+
    | ID | Host  | Binary       | Zone | State | Status  | Updated At                 |
    +----+-------+--------------+------+-------+---------+----------------------------+
    | 1  | node1 | nova-compute | nova | up    | enabled | 2017-04-14T15:30:44.000000 |
    +----+-------+--------------+------+-------+---------+----------------------------+
    
  3. コンピュートホストを検出してセルデータベースに追加

    #root user

    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
    
  • コンピュートノードを追加構築するたびに以上の手順をするか、/etc/nova/nova.confに自動検出するための設定を書く必要がある

    • 自動検出したい場合は/etc/nova/nova.conf編集

      # ...
      
      [scheduler]
      # ...
      # 単位は秒?
      # 設定する場合は適切な値を調べてください
      discover_hosts_in_cells_interval = 300
      
      # ...
      
      • 試してないので動作保証できません

動作確認

OpenStack Docs: Verify operation

Controller

  1. admin環境スクリプトの読み込み

    $any user

    . admin-openrc
    
  2. Nova のサービス一覧を表示

    $any user

    openstack compute service list
    
    +----+--------------------+------------+----------+---------+-------+----------------------------+
    | Id | Binary             | Host       | Zone     | Status  | State | Updated At                 |
    +----+--------------------+------------+----------+---------+-------+----------------------------+
    |  1 | nova-scheduler     | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
    |  2 | nova-conductor     | controller | internal | enabled | up    | 2016-02-09T23:11:16.000000 |
    |  3 | nova-compute       | compute1   | nova     | enabled | up    | 2016-02-09T23:11:20.000000 |
    +----+--------------------+------------+----------+---------+-------+----------------------------+
    
  3. API エンドポイント一覧を表示

    $any user

    openstack catalog list
    
    +-----------+-----------+-----------------------------------------+
    | Name      | Type      | Endpoints                               |
    +-----------+-----------+-----------------------------------------+
    | keystone  | identity  | RegionOne                               |
    |           |           |   public: http://controller:5000/v3/    |
    |           |           | RegionOne                               |
    |           |           |   internal: http://controller:5000/v3/  |
    |           |           | RegionOne                               |
    |           |           |   admin: http://controller:5000/v3/     |
    |           |           |                                         |
    | glance    | image     | RegionOne                               |
    |           |           |   admin: http://controller:9292         |
    |           |           | RegionOne                               |
    |           |           |   public: http://controller:9292        |
    |           |           | RegionOne                               |
    |           |           |   internal: http://controller:9292      |
    |           |           |                                         |
    | nova      | compute   | RegionOne                               |
    |           |           |   admin: http://controller:8774/v2.1    |
    |           |           | RegionOne                               |
    |           |           |   internal: http://controller:8774/v2.1 |
    |           |           | RegionOne                               |
    |           |           |   public: http://controller:8774/v2.1   |
    |           |           |                                         |
    | placement | placement | RegionOne                               |
    |           |           |   public: http://controller:8778        |
    |           |           | RegionOne                               |
    |           |           |   admin: http://controller:8778         |
    |           |           | RegionOne                               |
    |           |           |   internal: http://controller:8778      |
    |           |           |                                         |
    +-----------+-----------+-----------------------------------------+
    
  4. イメージ一覧を表示

    $any user

    openstack image list
    
    +--------------------------------------+-------------+-------------+
    | ID                                   | Name        | Status      |
    +--------------------------------------+-------------+-------------+
    | 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros      | active      |
    +--------------------------------------+-------------+-------------+
    
  5. ステータスチェック

    #root user

    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                                                      |
    +--------------------------------------------------------------------+
    | Check: Policy Scope-based Defaults                                 |
    | Result: Success                                                    |
    | Details: None                                                      |
    +--------------------------------------------------------------------+
    

おわり

以上で Nova 編終了です
お疲れ様でした

関連記事一覧