今回は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を使用しました。
手順が知りたい方は以下をご参考に
以下は管理サーバーのみ
KVMがインストール出来たVMを6つ作成しておき、管理用NWに接続させておきます。
apt update && apt upgradeも忘れずに
VM名は順番に
VM名 | 役割 | OS | スペック |
database | MariaDBを設置 | Ubuntu Server 22.04 | 4コア4GB以上 |
controller | Keystone,Nova,Placement,Backend | 〃 | 〃 |
glance | Glance | 〃 | 〃 |
horizon | Horizon | 〃 | 〃 |
neutron | Neutron | 〃 | 〃 |
neutron_agent | Neutron 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に入れていきます。
こちらの[4]を実施してください。
Ubuntu Server 20.04に対応した記事となっていますが、22.04対応の記事はSSL対応となっており、あくまで検証ということでSSLに対応する手順を省略したいため20.04の記事を参考に構築していきます。
Keystone構築
以降リンクを設置せずに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です。コンポーネントが通信するデフォルトのポート番号は以下です。
試しに構築してみましたが参考になれば幸いです。