KVMでOpenStackを構築する

Linux

今回はKVMでOpenStackを構築したのでそれを記事にしたいと思います。

PackStackなどは使用せず、冗長化のためコンポーネントをなるべく分けて構築しました。

構成図はこちらとなります。

(補足)Computeサーバーには直接Nova-ComputeとNeutron-Agentを構築します。

管理用NWとVM用NWはセグメントを分けたいためにこのように分けています。

この環境ではサーバーにグローバルNWがついておらず、ローカルIPをNATして通信しています。

そのため管理用NWもVM用NWもローカルになっています。

素晴らしきserver-worldさんを参考に構築しました。この記事の解説もserver-worldさんの記事を大変参考にしながら進めていきます。改めて感謝いたします。

早速構築手順を簡単に解説していきます。

構築手順

構築準備(管理サーバー,Computeサーバー)

OSのインストールとKVMの導入、VM作成を行います。

管理用NWとVM用NWをnetplanで設定しておきます。

Ubuntu Server 22.04を使用しました。

手順が知りたい方は以下をご参考に

Ubuntu 22.04 LTS : KVM : インストール : Server World
Ubuntu 22.04 LTS KVM インストール

以下は管理サーバーのみ

KVMがインストール出来たVMを6つ作成しておき、管理用NWに接続させておきます。

apt update && apt upgradeも忘れずに

VM名は順番に

VM名役割OSスペック
databaseMariaDBを設置Ubuntu Server 22.044コア4GB以上
controllerKeystone,Nova,Placement,Backend
glanceGlance
horizonHorizon
neutronNeutron
neutron_agentNeutron Agent

DB構築

databaseと名付けたVMをDBサーバーとしてMariaDBを構築します。

# apt -y install mariadb-server

# mysql_secure_installation

以下ダイアログ
Switch to unix_socket authentication [Y/n] n
~~~
Change the root password? [Y/n] n
~~~
Remove anonymous users? [Y/n] y
~~~
Disallow root login remotely? [Y/n] y
~~~
Remove test database and access to it? [Y/n] y
~~~
Reload privilege tables now? [Y/n] y

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

これでDBが使用できます。

RabbitMQ,memcachedの構築

これらバックエンドはcontrollerと名付けられたVMに入れていきます。

Ubuntu 20.04 LTS : OpenStack Yoga : 連携サービスのインストール : Server World
Ubuntu 20.04 LTS OpenStack Yoga 連携サービスのインストール

こちらの[4]を実施してください。

Ubuntu Server 20.04に対応した記事となっていますが、22.04対応の記事はSSL対応となっており、あくまで検証ということでSSLに対応する手順を省略したいため20.04の記事を参考に構築していきます。

Keystone構築

Ubuntu 20.04 LTS : OpenStack Yoga : Keystone 設定 #1 : Server World
Ubuntu 20.04 LTS OpenStack Yoga Keystone 設定 #1

以降リンクを設置せずにserver-worldさんの記事番号と記事タイトルでご紹介していきます。

Keystoneはcontrollerに設置します。↑の記事(03)とその次の記事(04)をすべて進めます。

以下注意点です。

memcache_servers = 10.0.0.30:11211

export controller=10.0.0.30

ここのようにIPを入れる設定がありますが、ここはcontrollerの持っている管理用NWのIPアドレスを入れます。

mysql+pymysql://keystone:password@10.0.0.30/keystone

ここはdatabaseのIPアドレスを入れます。

このようにAll in Oneではなくミドルウェア・コンポーネントごとに分けているため設定時のIPアドレスには気を付けて設定してください。表を作ってVM名とIPアドレスを整理しておくと設定しやすいと思います。

(03)[4]のapacheの設定では

ServerName controller

でOKです。

すべて手順通り進めて以下のように表示されれば完了です。

root@controller ~(keystone)# openstack project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| xdjvjej5jvjdjf9596963jgj345gdddk | service |
| dskdvmgb667jfeffh4dfw3fgegst46kk | admin   |
+----------------------------------+---------+

Glanceの構築

glanceと名付けられたVMにGlanceを構築していきます。

事前に以下設定をします。

apt -y install  python3-openstackclient

root@glance:~# vi ~/keystonerc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=adminpassword
export OS_AUTH_URL=http://controllerのIPアドレス:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='\u@\h \W(keystone)\$ '
root@glance:~# chmod 600 ~/keystonerc
root@glance:~# source ~/keystonerc
root@glance ~(keystone)# echo "source ~/keystonerc " >> ~/.bashrc

これでglance上でkeystoneと通信ができるようになります。他のVMでも使うので頭の片隅に置いておいてください、、、

(05)Glanceの設定をすべて実施します。以下注意点

export controller=10.0.0.30
ここはcontrollerのIPアドレスです。以降この設定が出たらcontrollerのIPアドレスです。


[database]
connection = mysql+pymysql://glance:password@10.0.0.30/glance
ここはデータベースのIPアドレスです。以降同じ

[keystone_authtoken]
www_authenticate_uri = http://10.0.0.30:5000
auth_url = http://10.0.0.30:5000
memcached_servers = 10.0.0.30:11211
ここはcontrollerのIPアドレスです。以降同じ

(05)が完了したらそのまま(06)仮想マシンイメージを登録するを実施します。以下注意点

system_info:
  # This will affect which distro class gets used
  distro: ubuntu
  # Default user name + that default users groups (if added/used)
  default_user:
    name: ubuntu
    plain_text_passwd: 'お好みのパスワード'
    lock_passwd: False
    gecos: Ubuntu

イメージのcloud.cfgをいじるとき、plain_text_passwdを追加しておくとvirsh consoleでVMに入ったときにVMにそのパスワードでログインできるので設定しておきましょう。

以下のような感じでイメージを登録できれば完了です。

root@glance ~(keystone)# openstack image list
+--------------------------------------+------------+--------+
| ID                                   | Name       | Status |
+--------------------------------------+------------+--------+
| 876b4433-mlsr-dg5f-beff-fsfsgsddfsfs | Ubuntu2004 | active |
+--------------------------------------+------------+--------+

Nova,Placementの構築

NovaはControllerに構築します。

(07),(08) Novaの設定を進めていきます。(09)は実施しません

(07)は注意点はありません。

(08)の注意点は以下です。

my_ip = ここはcontrollerのIPアドレス

transport_url = rabbit://openstack:password@ここはcontrollerのIPアドレス

[glance]
api_servers = http://ここはglanceのIPアドレス:9292

[api_database]
connection = mysql+pymysql://nova:password@databaseのIPアドレス/nova_api

[database]
connection = mysql+pymysql://nova:password@databaseのIPアドレス/nova

[keystone_authtoken]
www_authenticate_uri = http:controllerのIPアドレス//:5000
auth_url = http://controllerのIPアドレス:5000
memcached_servers = controllerのIPアドレス:11211

[placement]
auth_url = http://controllerのIPアドレス:5000

以降同じ設定は同じIPアドレスを入力してください

最終的にopenstack compute service listでnova-schedulerとnova-conductorが表示されたら完了です。

出てこない場合はcontrollerの中にnovaのログがあるので原因を調査してみましょう。

Computeノードの構築

Computeサーバーで(16) Computeノードを追加するを実施します。

注意点として、管理サーバーの構築ではKVMの設定でブリッジを設定しましたが、Computeサーバーではブリッジの設定はしません。

ControllerとComputeサーバーの通信ができることを事前に確認してから構築します。

ComputeサーバーでもglanceでやったようにOpenstack Clientのインストールとkeystonercの設定をしてKeystoneと通信できるようにしておくと便利です。

root@controller ~(keystone)# su -s /bin/bash nova -c "nova-manage cell_v2 discover_hosts"
root@controller ~(keystone)# openstack compute service list

この設定はnovaがインストールされているcontrollerで実施します。

openstack compute service listでnova-computeが表示され、Computeサーバーのホスト名が入っていれば完了です。

Neutronの構築

neutronと名付けられたVMに(17)Neutronの設定を実施します。

注意点は以下です。

root@controller ~(keystone)# vi /etc/nova/nova.conf
[neutron]
auth_url = http://これはneutronのIPアドレス:5000
...

この部分の追記はcontrollerのnova.confに追記します。

systemctl restart neutron-server neutron-metadata-agent nova-api
ここの nova-apiのリスタートはcontrollerのnova-apiをrestartさせておきます。

ここから様々なコンポーネントの設定が増えてくるのでコンポーネントがどのVMに入っているかを理解しながら構築していきます。

次は(18)の設定です。

これはneutron_agentと名付けられたVMで実施します。

以下注意点です。

nova_metadata_host = controllerのIPアドレス

memcache_servers = controllerのIPアドレス:11211

local_ip = neutron_agentのIPアドレス

(19)はComputeサーバーで実施します。

local_ip = ComputeサーバーのIPアドレス

vi /etc/nova/nova.conf
[neutron]
auth_url = http://controllerのIPアドレス:5000

ネットワーク設定

(20)Neutron ネットワークを構成 (FLAT)を実施していきます。

neutron_agent、Computeサーバー両方で以下の設定をします。

root@neutron_agent:~# vi /etc/neutron/plugins/ml2/ml2_conf.ini
...

[ml2_type_flat]
flat_networks = physnet1

root@neutron_agent:~# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini

...
[linux_bridge]
physical_interface_mappings = physnet1:VM用NWのNIC名
root@network:~# systemctl restart neutron-linuxbridge-agent

VM用NWのNIC名をip aとかで確認して、そのNIC名を入れます。

(20)ではそのままVMを作る流れになります。VM用NWのサブネットなどは間違えないようにしましょう。

うまくいけばVMの作成が完了します。virsh consoleでVMが動いているか、通信できるかを確認しましょう。

openstack server listでACTIVEになっていれば基本成功しています。ERRORになってしまった場合はnovaとneutronのログを見て原因を発見・解決していきます。

Horizonの構築

horizonと名付けられたVMにHorizonをインストールします。

(15)Horizon 設定を進めてください。

出てくるIPはすべてcontrollerのIPアドレスを設定します。

http://horizonのIPアドレス/horizonで接続できればHorizonの設定は完了です。

以上が構築の簡単な流れになります。

まとめ

この手順を書くまでにいろいろ壁にぶつかりましたが、基本ERRORログを見つけて修正すると動作すると思います。

記事を通しての注意点は設定すべきIPアドレスを間違えないことです。Nova.confにNeutronの設定があればそこはneutronのIPアドレスを、NeutronにKeystoneのauth系の設定があればcontrollerのIPアドレスを入力します。判別しやすいヒントとしては、ポート番号があり、5000であればKeystoneで9292であればGlanceです。コンポーネントが通信するデフォルトのポート番号は以下です。

Firewalls and default ports — Installation Guide documentation

試しに構築してみましたが参考になれば幸いです。

タイトルとURLをコピーしました