kolla-ansibleを使ってOpenStack環境を構築してみる all-in-one編

目次

2021/01/09 インスタンスにパスワードを設定する箇所の誤りを修正しました。

kolla-ansibleとは

公式ページ

OpenStack 環境のデプロイメントツールです。
更に、完全にカスタマイズ可能であることも大きな特徴です。
加えて、CentOS や Ubuntu などの多くの Linux ディストリビューションに対応しているのも大きな特徴と言えます。
なお、デプロイには Ansible が利用されます。

他にも devstack や microstack など数多くのデプロイメントツールが存在しますが、これらは開発環境向けで、カスタマイズが困難であったり、再起動したら壊れてしまうものなど、扱いにくいのが現状です。
また、 kolla-ansible と同様に Ansible を利用して OpenStack 環境の構築を行う openstack-ansible なども存在しますが、こちらも筆者環境での検証では再起動したら壊れてしまうものでした。

そこで、今回は kolla-ansible を利用してみることにしました。
なお、 kolla-ansible ではすべてのコンポーネントを1つのサーバ上で動作させる all-in-one 構成と、複数のサーバをクラスタリングして利用する multinode 構成を選択することができます。
今回は all-in-one 構成を構築してみます。
multinode 構成については、次回以降取り扱う予定です。

インストール準備

kolla-ansible では CentOS や Ubuntu などを利用することができますが、本記事では Ubuntu 20.04 LTS を利用しています。

事前に python3 などを用意しておく必要がありますので、必要なパッケージとともに導入します。

1
2
3
$ sudo apt update
$ sudo apt install python3-dev libffi-dev gcc libssl-dev
$ sudo apt install python3-pip

インストールされた pip3 が最新バージョンであるか確認します。

1
$ sudo pip3 install -U pip

続いて、 Ansible をインストールします。

1
$ sudo apt install ansible

kolla 及び kolla-ansible のインストールを行います。
なお、ここでは apt でインストールする方法と、 github から落としてくる方法の2つが選択できますが、2020/12/29時点では apt からインストールするとUbuntu 20.04 LTSは動作対象外との旨が表示され先に進むことができなくなりますので、ここでは github から落としてきて利用します。

1
2
3
4
$ git clone https://github.com/openstack/kolla
$ git clone https://github.com/openstack/kolla-ansible
$ sudo pip3 install ./kolla
$ sudo pip3 install ./kolla-ansible

必要なディレクトリを作成し、所有権の設定を行います。

1
2
$ sudo mkdir -p /etc/kolla
$ sudo chown $USER:$USER /etc/kolla

先程 github から落としたファイルのうち、必要なファイルを作成したディレクトリへコピーします。

1
2
$ cp -r kolla-ansible/etc/kolla/* /etc/kolla
$ cp kolla-ansible/ansible/inventory/* .

ここで、 /etc/ansible/ansible.cfg[defaults] に以下を追記して Ansible の設定を変更します。

1
2
3
host_key_checking=False
pipelining=True
forks=100

ここで、 Ansible の設定とインベントリの構成が正しいかチェックしておきます。

1
$ ansible -i all-in-one all -m ping

OpenStack の各サービスのパスワード類を生成します。

1
2
$ cd ~/kolla-ansible/tools
$ ./generate_passwords.py

/etc/kolla/globals.yml を編集して kolla の設定を行います。
設定はページKolla globals.yml を参考にしてください。
なお、cinder などの有効化設定もこちらで行います。
必要に応じて設定をしてください。

1
2
3
4
5
kolla_base_distro: "ubuntu" #ホストOSのディストリビューション
kolla_install_type: "binary" #パッケージの取得方法
kolla_internal_vip_address: "192.168.122.206" #管理IFのアドレス
network_interface: "enp1s0" #管理ネットワークのIF
neutron_external_interface: "enp6s0" #OpenStack Neutron ネットワークのIF

デプロイを行います。

1
2
3
4
$ cd ~/kolla-ansible/tools
$ ./kolla-ansible -i ../../all-in-one bootstrap-servers
$ ./kolla-ansible -i ../../all-in-one prechecks
$ ./kolla-ansible -i ../../all-in-one deploy

ここまで完了すると、 kolla_internal_vip_address で設定したIPアドレスにアクセスすると OpenStack のダッシュボードが表示されます。
しかし、外部へアクセスするためのネットワークなどが設定されていないため、それらの設定を行います。
kolla-ansible/tools/init-runonce をエディタで開き、下記を追記します。
CIDRRANGE , GATEWAY などを適時変更します。

1
2
3
4
ENABLE_EXT_NET=${ENABLE_EXT_NET:-1}
EXT_NET_CIDR=${EXT_NET_CIDR:-'192.168.122.0/24'}
EXT_NET_RANGE=${EXT_NET_RANGE:-'start=192.168.122.15,end=192.168.122.45'}
EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'192.168.122.1'}

cloud-init を利用してインスタンスのパスワードを設定する場合は以下の変更を行います。
~/kolla-ansible/ansible/roles/nova/templates/nova.conf.j2

1
2
3
[libvirt]
inject_password = True
inject_partition = -1

この変更は、 /etc/kolla/nova-compute/nova.conf に反映されます。

~/kolla-ansible/ansible/roles/horizon/templates/local_settings.j2

1
2
3
4
5
6
OPENSTACK_HYPERVISOR_FEATURES = {
'can_set_mount_point': False,
'can_set_password': True, //FalseをTrueに変更
'requires_keypair': False,
'enable_quotas': True
}

この変更は、 /etc/kolla/horizon/local_settings に反映されます。

最後に、変更した設定を OpenStack に適用します。
その前に、 python3-openstackclient をインストールしておきます。

1
$ sudo apt install python3-openstackclient

続いて、認証情報の入ったスクリプトファイルを生成します。

1
2
3
$ cd kolla-ansible/tools
$ ./kolla-ansible post-deploy
$ . /etc/kolla/admin-openrc.sh

変更した設定を適用します。

1
2
3
$ kolla-ansible/tools/init-runonce
$ cd kolla-ansible/tools
$ ./kolla-ansible -i ../../all-in-one reconfigure

以上が完了すると、変更した設定が適用され、ネットワークなどがいくつか作成されているはずです。
なお、 Horizon のパスワードは以下のようにして表示することができます。

1
$ grep keystone_admin_password /etc/kolla/passwords.yml

以上、簡単にではありますが、参考になりましたら幸いです。

お家で始める仮想化環境 Proxmox VE Cloud-init編

目次

環境

前提として、Proxmoxの基本的な構築が完了している必要があります。
Proxmox環境の構築方法はこちらをご覧ください。

また、Cloud-init Supportを参考にしています。

Cloud-initテンプレートの準備

本記事では、VMで使用するOSとしてUbuntuを使用します。
https://cloud-images.ubuntu.com/でOpenstack向けのCloud-initに対応したイメージが配布されていますので、こちらを利用します。

Proxmoxホストのシェルにログインして、上記イメージをダウンロードします。
今回はUbuntu 20.04 LTSを使用しますので、こちらをダウンロードしました。

1
# wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img

続いて、テンプレートで使用するためのVMを作成します。

1
# qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0

先ほどダウンロードしたイメージをインポートします。
以下の例では対象ディスクをlocal-lvmとしていますが、適時変更してください。(local-zfsなど)

1
# qm importdisk 9000 focal-server-cloudimg-amd64.img local-lvm

インポートしたディスクをscsi0としてVMにアタッチします。
先ほどと同様に、local-lvmvm-9000-disk-0は環境によって異なる場合がありますので、適時変更してください。

1
# qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0

続いて、Cloud-initが利用するCDROMドライブを設定します。

1
# qm set 9000 --ide2 local-lvm:cloudinit

先ほどアタッチしたディスクをブートディスクとして設定します。

1
# qm set 9000 --boot c --bootdisk scsi0

Cloud-initはシリアルコンソールを使用するため、その設定をします。

1
# qm set 9000 --serial0 socket --vga serial0

最後に、テンプレートに変換します。

1
# qm template 9000

Cloud-initテンプレートからのデプロイ

先ほど作成したテンプレートを使用して、VMのデプロイを行ってみます。
普段はWebGUIから操作することが多いので、WebGUIから操作することにします。
作成したテンプレートを右クリックするとCloneの項目がありますので選択します。
ダイアログが表示されますので、VM IDNameを入力し、ModeFull Cloneを選択します。

入力出来たら、右下のCloneを押して処理が完了するのを待ちます。

処理が完了したら、クローンしたVMより、Cloud-initメニューを開きます。

必要に応じて、各項目を設定します。

  • User
  • Password
  • DNS domain
  • DNS servers
  • SSH public key
  • IP Config

設定が完了したら、VMを起動します。
起動完了後、しばらく待っているとCloud-initの処理が行われます。
ログが表示されますので、処理が完了するのを待ってログインしてみてください。
設定した内容が反映されているはずです。

複数のVMをデプロイしたい場合も、作成したテンプレートからクローンすることで簡単にデプロイすることが出来ます。

RTX3080, RTX3090をGTX1080, RTX2060とベンチマーク結果を比較してみる。

4Kゲーミング

2020年9月17日に、NVIDIAのAmpereアーキテクチャを採用したGPU、RTX 3080が発売解禁されました。
筆者は、深夜販売に突撃して運よく入手出来たので、4Kゲーミング性能について軽くベンチマークを通して見ていきます。

RTX 3090 ?

RTX3080に続いて、RTX 3090が2020年9月24日に発売解禁となりました。
こちらも深夜販売での抽選に参加したところ運よく入手できましたので、こちらも見ていきます。

なお、「コスパ」とか言ってはいけません。
筆者が泣いてしまいます。

ベンチマーク環境

ベンチマークには、おなじみ3DMarkを使用します。
また、DLSSについてもどのような効果があるのか気になったので、こちらも試してみます。
手持ちのゲームでDLSSに対応したゲームが「DEATH STRANDING」ぐらいしか無かったので、参考程度にご覧ください。

ベンチマークPCとしては以下のものを使用しています。

詳細
CPU AMD Ryzen9 3950X 16-Core Processor
M/B ASUS Pro WS X570-ACE
Memory DDR4 Non-ECC UDIMM 16GB x4(64GB) 3200MHz
PSU 80PLUS GOLD 750W
Storage Western Digital SN550 500GB (M.2 NVMe)
Gprahics MSI GTX 1080 AERO
NVIDIA RTX 2060 FE
MSI RTX 3080 GAMING X TRIO
ZOTAC RTX 3090 Trinity

RTX 2000シリーズとの比較ベンチを多く見ますが、GTX世代との比較があまりなされていないように思ったのと、筆者がGTX 1080からの更新のため、GTX 1080との性能差に注目したいところです。
また、手持ちにあるGPUの中にRTX 2000シリーズがRTX 2060しか無かったので、参考程度です。

RTX 3080 and RTX 3090

RTX 3080 FE RTX 3090 FE
CUDAコア 8704基 10496基
RTコア 68基 82基
Tensorコア 272基 328基
ベースクロック 1.44GHz 1.4GHz
ブーストクロック 1.71GHz 1.7GHz
VRAM 10GB GDDR6X 24GB GDDR6X

外観

ZOTAC RTX 3090 Trinity

RTX 3090のカスタムカードとしては小さい部類だと思います。
他のカードにおいて、高さがPCIeスロットブラケットを大きく超えているのに対して、こちらのカードはさほど飛び出ていません。
補助電源は 8pin x2 となっています。

MSI RTX 3080 GAMING X TRIO

ブーストクロックが1815MHzにOCされたカードです。
RTX 3080のTBPが320Wになっているのに対して、このカードのTBPはOCされているために340Wとなっています。
それにより、補助電源が 8pin x3 となっています。
補助電源として 8pin x3 が必要なグラフィックカード、過去にあったんでしょうか…

NVIDIA RTX 2060 Founders Edition

何の変哲もない RTX 2060 Founders Edition です。
個人輸入で入手したものです。

MSI GTX 1080 AERO

どこぞで投げ売りされていた、MSI AEROシリーズのGTX 1080カードです。
外排気タイプになっています。

3DMark Time Spy (1920 x 1080)

Time Spy のデフォルト設定では2K解像度ですが、今回はFullHDにカスタム設定を行っています。

やはり、RTX 3000シリーズは、GTX 1080と比較してもスコアにおいて倍以上の差をつけています。
しかし、RTX 3090はRTX 3080と比較しても誤差程度の差しかないようです。

3DMark Time Spy Extreme (3840 x 2160)

続いて、4K相当のベンチマークである、Time Spy Extremeを実行しました。

こちらも、RTX 3000シリーズは共に、GTX 1080と比較すると倍以上のスコアとなっています。
また、先ほどに比べるとRTX3080と比較してRTX 3090のスコアが伸びているように感じます。
RTX 3090を活かすには4K以上の環境でないと意味がない といった考え方もできるのかもしれません。

3DMark Port Royal (1920 x 1080)

続いて、レイトレーシング性能を計測しました。
こちらもまずはFullHDから。

GTX 1080においてはRTコアを搭載していないため、比較対象として適切ではないですね。
RTX 2060と比較すると、その差は歴然です。
また、こちらもRTX 3090のスコアがRTX 3080と比較しても伸びていることが分かります。

3DMark Port Royal (3840 x 2160)

続いて、4Kレイトレーシング性能を計測しました。

GTX 1080については言うまでもないですね(RTコア無いし)。
ここで気になるのが、RTX 2060のスコアが思ったより出ていないことです。
Port Royalのデフォルト解像度は2Kであるので、試しにそちらを実行したところ4193というスコアが出ました。
4Kになった瞬間スコアががた落ちしたということになりますが、RTX 2060ではRTコアが足りていないのでしょうかね。
気になるところです。
本題に戻って、こちらもRTX 3000シリーズのスコアの伸びが目立っていますね。
4K解像度においても、レイトレーシングを利用しながらゲームを快適にプレイすることは夢ではない ということでしょう。

DEATH STRANDING (1920 x 1080)

続いて、DLSSの効果について適当に計測しました。
素人による計測なので、参考程度にご覧ください。
なお、以降、「DEATH STRANDING」上の画質設定はすべて一番高いものを設定しています。

筆者環境では、どのカードを使用してもプレイ中はFPSが120程度から変動しませんでした。
(もちろん、フレームレート制限が120FPSとなっているわけではない。)

DEATH STRANDING (3840 x 2160)

続いて、4K解像度でのプレイ。

こちらは、はっきりと差が現れました。
RTX 3000シリーズの性能向上がうかがえます。
(RTX 3000シリーズのスコアについては、環境によってはもっと高くなる可能性があると思います。)

DEATH STRANDING with DLSS (3840 x 2160)

続いて、4K解像度においてDLSSを利用してみます。
DLSSについては解説しません。
DLSS設定については「パフォーマンス」を選択しています。

先ほども述べたように、実質的なFPS上限が120程度になっていることでRTX 3000シリーズでの変化を確認することは出来ない状態です。
しかしながら、RTX 2060においてはFPS値が向上しており、DLSSの効果が確認できます。

GPU温度

続いて、多くの方が気になっているであろうGPU温度について。
こちらは、3DMark Time Spy Extreme 実行中の最大GPU温度です。

GTX1080については外排気タイプなので、冷却面での問題があるのは必然と言えます。
感心したのは、RTX 3000シリーズにおいてTBPが増加したにもかかわらず、想定されたよりもGPU温度が高くないということです。
RTX 3080,3090共に75,6度と、ハイエンドグラフィックカードとしてはかなり冷えているのではないでしょうか。

消費電力

続いて、消費電力です。
システム全体の消費電力である点に注意してください。(カード単体の消費電力ではありません)
また、「DEATH STRANDING」プレイ時の消費電力です。

こちらは概ね予想通りといったところでしょうか。
アイドル状態でも消費電力の差が見られます。
RTX 3090では200Wを超えて225W程度、RTX 3080では188Wでした。

4K解像度において「DEATH STRANDING」をプレイ中は、RTX 3090で550W程度、RTX 3080で540W程度でした。
先に述べたように、使用したグラフィックカードにおいて、RTX 3080はOCによってTBPが340Wとなっており、RTX 3090が350Wであるから、妥当な差であると言えそうです。

さて、面白いのはここです。
DLSSパフォーマンスを有効にした状態でプレイした時の消費電力について。
RTX 3000シリーズの両カードにおいて、DLSSを利用していない場合と比較すると、消費電力が低下しています。
4K解像度によってCUDAコアが使用する電力より、DLSS+(低解像度)CUDAが利用する電力の方が少ないという事でしょうか。
見た目で差を感じない人にとってDLSSを有効化した状態でゲームプレイをすることは、消費電力を下げる選択肢となるかもしれません。

電源ユニットの容量はどれぐらいが好ましい?

Ryzen9 3950X + RTX 3090の組み合わせで、ゲームプレイ中は550W程度の電力を消費するという事です。
今回、750W電源を利用してベンチマークを行いましたが、その最中に電源が落ちるといったことはありませんでした。
しかし、負荷率が50%程度で最も変換効率が高くなる電源ユニットが多いことを踏まえると、1000W以上の電源ユニットを用意したいところです。
また、Ryzen Threadripperなど、HEDT CPU環境で利用する場合は、もっと余裕が欲しいところです。

RTX 3070 ?

10月に発売予定のRTX 3070。
RTX 3080やRTX 3090がこれだけ性能向上しているとなると、こちらも期待できそうです。