VirtualBoxで作成したCentOSにOpenStackを構築する(Compute編)

[環境編](http://qiita.com/tk3fftk/items/76d696a874d829ea9fe4)
[Identity編](http://qiita.com/tk3fftk/items/546ab241ac7b89a1c3c2)
[Image編](http://qiita.com/tk3fftk/items/7899758d14cde4a9b2db)
の続きです。

[公式ドキュメント](http://docs.openstack.org/liberty/ja/install-guide-rdo/nova.html)に従ってやっていきます。

# OpenStack Compute (nova)
> クラウドコンピューティングシステムを構築し管理するために使用します。 OpenStack Compute は、Infrastructure-as-a-Service (IaaS) システムの主要な構成要素です。
> OpenStack Compute は、認証については OpenStack Identity サービスと、ディスクやサーバーイメージについては OpenStack Image サービスと、ユーザーや管理者向けインターフェースについては OpenStack Dashboard と連携して動作します。

## インストールと設定@コントローラノード
- `# mysql -u root -p` で以下を実行。NOVA_DBPASSにはroot++

```mysql
create database nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
grant all privileges on nova.* TO 'nova'@'%' identified by 'NOVA_DBPASS';
```

- novaユーザの作成
  - `# openstack user create --domain default --password-prompt nova`
      - NOVA_PASSとしてroot++を入力
- adminロールにをnovaユーザに追加 
  - `# openstack role add --project service --user nova admin` 
- novaサービスエンティティを作成
  - `# openstack service create --name nova --description "Openstack Compute" compute` 
- Computeサービスのエンドポイント作成
  - `# openstack endpoint create --region RegionOne compute public http://controller:8774/v2/%\(tenant_id\)s`
  - `#  openstack endpoint create --region RegionOne compute internal http://controller:8774/v2/%\(tenant_id\)s`
  - `# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2/%\(tenant_id\)s`
    - テナント(プロジェクト)ごとにエンドポイントが生成される

### コンポーネントのインストール
- `# yum install openstack-nova-api openstack-nova-cert   openstack-nova-conductor openstack-nova-console   openstack-nova-novncproxy openstack-nova-scheduler   python-novaclient` 
- `# vi /etc/nova/nova.conf`で以下を編集

```properties:nova.conf
# DBアクセス方法
[database]
connection = mysql://nova:NOVA_DBPASS@controller/nova  # root++

# RabbitMQメッセージキューのアクセス方法
[DEFAULT] 
rpc_backend = rabbit 
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS # root++

# Identityサービスへのアクセス方法
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = NOVA_PASS # root++

# my_ipオプションの設定
[DEFAULT]
my_ip = 10.0.3.11

# Networking サービスのサポートを有効にする
[DEFAULT]
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver

# VNCプロキシーを設定 コントローラノードの管理インタフェースIPアドレスを使用するように
# VNCセクションではなくDEFAULTセクションにあったのでそこに記述
#[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

# Image serviceの場所を設定
[glance]
host = controller

# ロックパスを設定
[oslo_concurrency]
lock_path = /var/lib/nova/tmp

# EC2 APIを無効にする
[DEFAULT]
enabled_apis=osapi_compute,metadata
```

- Computeデータベース展開
  - `# su -s /bin/sh -c "nova-manage db sync" nova`
- 起動設定
  - `systemctl enable openstack-nova-api openstack-nova-cert openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy`
  - `systemctl start openstack-nova-api openstack-nova-cert openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy`


## インストールと設定@コンピュートノード
- インストール
  - `# yum install openstack-nova-compute sysfsutils`
  - nova-computeが利用できない場合は，[初期のパッケージインストール](http://qiita.com/tk3fftk/items/76d696a874d829ea9fe4#openstack-%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8)を行ってください。
  - `# vi /etc/nova/nova.conf` で以下を編集

```properties:nova.conf
# RabbitMQメッセージキューのアクセス方法を設定
[DEFAULT]
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS # root++ 

# Identityサービスへのアクセス方法を設定
[DEFAULT]
auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = NOVA_PASS # root++

# my_ipオプションを設定
[DEFAULT]
# コンピュートノードの管理ネットワークインタフェースのIPアドレスに置き換え
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS # 10.0.3.12

# Networkingサービスのサポートを有効にする
[DEFAULT]
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver

# リモートコンソールアクセスを有効にし，その設定を行う
# [vnc]がまたもやなかったため，DEFAULTにて行う
#[vnc]
enabled = True
vncserver_listen = 0.0.0.0  # すべてのIPアドレスをリッスン
vncserver_proxyclient_address = $my_ip # プロキシコンポーネントはコンピュートノードのIPのみリッスン
# Webブラウザがこのノードになるインスタンスのリモートコンソールにアクセスするための場所を示す
# 使用する予定のブラウザからcontrollerが解決できない場合は、解決できるIPを指定する
# 僕の場合は最終的にはhttp://192.168.12.11:6080/vnc_auto.htmlにしました
novncproxy_base_url = http://controller:6080/vnc_auto.html

# image serviceの場所を設定
[glance]
host = controller

# ロックパスの設定
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
```

- 使用しているコンピュートノードが仮想マシンのハードウェア支援機能をサポートするかどうか確認
  - `# egrep -c '(vmx|svm)' /proc/cpuinfo`
      - vmx(intel), svm(amd)らしい
      - 1以上の値を返した場合，サポートされている
      - 0を返す場合，サポートされていないため，以下の設定を行う

```properties:nova.conf
# libvirtがKVMの代わりにQEMUを使用するように設定する
[libvirt]
virt_type = qemu
```

- 起動設定
  - `# systemctl enable libvirtd openstack-nova-compute`
  - `# systemctl start libvirtd openstack-nova-compute`

## 確認@コントローラノード
- `# source admin-openrc.sh` アクセス権読み込み
- サービスコンポーネントの一覧表示
  - 各プロセスの起動と登録が正常であることを確認
  - `# nova service-list`
      - この時点ではコントローラノードに4つ，コンピュートノードに1つのサービスコンポーネントが有効になっていればおk

- IdentityサービスのAPIエンドポイントを一覧表示して，Identityサービスへの接続性を検証
  - `# nova endpoints`
      - 3*3登録されていればおk
      - >この出力の警告はすべて無視してください

- イメージカタログにあるイメージをnova経由で一覧表示して，image serviceへの接続性を検証する
  - `# nova image-list`
       - glanceで登録したimageが表示されていればおk