大雑把な手順
- CentOS 7をインストールする。
- NetworkManagerをアンインストールする。
- OpenStack Junoをインストールする。
- ネットワークを設定する。
- ISOイメージ+HDD構成できるようにバグを直す。
- 仮想マシンにOSをインストールする。
このページでは以下の記法をしています。
- 設定ファイルを作成・編集する場合、ファイル名に続けて内容を示します。
- すでに存在するファイルに対する編集の場合は、その内容すべてを表してはいません。(書いていない内容はデフォルトです。)
- すでに存在する設定内容を書き換える場合、書き換え元をコメントアウトする表現をしています。
例えば、以下のデフォルト設定があり、[DEFAULT] foo1=bar1 foo2=old
これを以下に書き換える場合、
[DEFAULT] foo1=bar1 foo2=new
以下で表現します。共通である部分は表現していないことに注意してください。
[DEFAULT] #foo2=old foo2=new
目的
ESXiの代わりにOpenStackを使う。
私の考えるESXiの代わり、なので、すでにあるOSのクローンを大量に展開する、といったクラウド的な考え方は一切ありません。
Webから操作できる仮想化のプラットフォームを求めます。
また、2台以上での環境は構築しません。
CentOS 7のインストール
このへん(http://www.centos.org/download/)からダウンロードしてDVDを焼いて、インストールします。
今回はMinimal ISOを使いました。
Xはサーバには不要。どっか行け。
NetworkManagerのアンインストール
生かしておく理由がないのでアンインストールします。
邪魔なだけです。(本当に邪魔するのでアンインストール必須。)
# service NetworkManager stop # yum remove NetworkManager
OpenStack Junoのインストール
後述するFlatNetworkingを使いたいので、ちょこちょこと指定します。enp2s0は物理インタフェースの名前、physicalはこの物理インタフェースにブリッジするネットワークの名前(お好み)です。
# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm # yum install openstack-packstack # packstack \ --allinone \ --os-neutron-ml2-type-drivers=vxlan,flat,gre,vxlan \ --os-neutron-l2-agent=linuxbridge \ --os-neutron-lb-interface-mappings=physical:enp2s0 \ --provision-demo=n
インストールが無事完了すれば、Webブラウザからログインできるはずです。
ユーザ名とパスワードは、/root/keystonerc_adminのOS_USERNAMEとOS_PASSWORDを使います。
novaの設定
最小限の設定として、nova.confをいじります。
我が家はローカルネットワーク用のDNSが居るので、ホストに接続するにはホスト名を使います。
ところが、コンソール表示する際に使うURLはnova.confにIPアドレスで書かれている(packstackが勝手に設定する)ため、JavaScriptでCross Site Accessな制限を受け、正しく動作しません。
このため、nova.confの設定を直してあげます。
nova.conf:
#novncproxy_base_url=http://10.0.0.1:6080/vnc_auto.html novncproxy_base_url=http://openstack.local:6080/vnc_auto.html
ネットワークの設定
FlatNetworkingの設定をします。
- novaの設定を変更します。
/etc/nova/nova.conf:#network_manager=nova.network.manager.FlatDHCPManager network_manager=nova.network.manager.FlatManager fixed_range=10.1.0.0/24
FlatDHCPManagerを封印してFlatManagerに変えてやります。OpenStackにIPアドレスを管理させる気は微塵もありませんから、fixed_rangeの値も適当です。
ちなみにnetwork_manager=の行は最初からある行の隣にでも書きます。fixed_rangeはないので、これは適当なところに書きます。 - neutronの設定を変更します。
/etc/neutron/plugins/ml2/ml2_conf.ini:#mechanism_drivers =openvswitch mechanism_drivers =linuxbridge
OpenvSwitchなどという高級なものは不要なので、直ちに退去してもらいます。(neutronも相当に高級だけど)
/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini:
[securitygroup] # enable_security_group = True enable_security_group = False
iptablesを使ったファイアウォールも切ります。
セキュリティグループを設定してあげるのがよりよいですが、どうせブリッジするので不要です。 - マシンごと再起動します。
neutron関連サービスの再起動だけでもいけそうですが、面倒を起こすのもイヤなので再起動しましょう。 - 新しいネットワークを作成します。Flatを使い、インタフェースにはphysical(–os-neutron-lb-interface-mappingsで指定した名前)、External Network(とお好みでShared)を指定します。
- 作ったネットワークにサブネットを定義します。これも適当。ただしDHCPはOFFにしておきます。(念のため。多分関係ないと思いますが……)
ISOイメージ+HDD構成のバグを直す
タイトルの通り、バグを直します。
といってもパッチを当てるだけです。
https://bugs.launchpad.net/nova/+bug/1379212
少々乱暴ですが、直接当てます。
# yum install patch # curl https://git.openstack.org/cgit/openstack/nova/patch/?id=2f0f67d17cfedef2da4b1215f8d9072172a0d04f | ( cd /usr/lib/python2.7/site-packages/nova ; patch -p2 )
nova/test/unit以下のパッチを当てようとするので、これらは無視します。
File to patch: (空のままEnter) Skip this patch? [y] (空のままEnter)
nova-computeを再起動します。
# service openstack-nova-compute restart
cinderでNFSを使う
我が家には共有ストレージがあるので使うように設定します。iSCSIもよいですが、今回はNFSです。
- 設定ファイルを書きます。
/etc/cinder/cinder.conf:[DEFAULT] #enabled_backends=lvm enabled_backends=nfs [nfs] volume_backend_name=nfs volume_driver=cinder.volume.drivers.nfs.NfsDriver nfs_shares_config=/etc/cinder/nfsshares nfs_sparsed_volumes=true nfs_mount_options=vers=3
LVMとNFSの両方を使いたい人はenabled_backendsをlvm,nfsなどとしましょう。
この場合、ボリューム作成時のvolume-typeでどちらを使うか明示できます。指定しない場合、デフォルトでは空きの多いbackendが選ばれます。ちなみにvolume_backend_nameを指定し忘れると、volume-type指定での作成がコケます。(ハマって数時間ソースを追いました。)
- volume-typeを定義します。volume_backendsが1つなら不要です。
# cinder type-create nfs # cinder type-key nfs set volume_backend_name=nfs
- SELinuxを無効化します。
/etc/selinux/config:#SELINUX=enforcing SELINUX=disabled
- マシンを再起動するか、サービスを再起動します。
# setenforce 0 # service openstack-cinder-volume restart # service openstack-cinder-scheduler restart
仮想マシンへのOSのインストール
さて、ここでESXiならCD/DVDドライブとHDDを積んだ仮想マシンを作って、ISOイメージをマウントさせて、インストールを始めます。
OpenStackでこれをやるには、少々面倒な手順になります。
- ISOイメージをイメージとしてアップロードする。
- ISOイメージが収まるくらいのフレーバーを定義します。インストール用なので適当に。
- インスタンスを作る。
ここでフレーバーは適当、ブートソースは*イメージから起動*、イメージ名はアップロードしたISOを選びます。 - 起動するのを待ちます。
コンソールを見てちゃんと動いているのを確認するもよし、ステータスが稼働中になるのを待つだけでもよし。 - 無慈悲にシャットダウンする。インスタンスの終了じゃないよ。(終了は削除になります)
- ボリュームを作ります。
これがHDDになるので、お好みの大きさで作りましょう。 - 作ったボリュームを接続します。
もしLVMを使っていてうまくいかないようなら、iscsiとtargetサービスを再起動します。# service target restart # service iscsi restart
- インスタンスを起動して、OSをインストールします。
- インストールが終わったら、インスタンスを終了(今度はシャットダウンじゃない)します。
- ここから2通りのやり方があります。ボリュームの起動可能属性がGUIから直接変えられないため、2通りの方法でこれを回避します。
- ⭐️1
ボリュームをイメージにアップロードします。ディスク形式はお好みで。 - アップロードしたイメージからインスタンスを作ります。
- ⭐️2
cinderコマンドでset-bootableします。# source /root/keystonerc_admin # cinder list # cinder set-bootable <GUID> true
- bootableに指定したボリュームを指定してインスタンスを作ります。
- できあがり。
インストールしなおしたい時・アンインストールしたい時
- openstack-junoからインストールした全パッケージを削除します。
# yum list installed | awk '{ if ($3 == "@openstack-juno") { print $1 } }' | xargs yum remove -y
- /etc, /var/lib, /var/log以下を掃除します。
# echo ceilometer cinder glance keystone neutron nova openstack-dashboard swift | xargs -n 1 echo | xargs -I {} rm -rf /etc/{} /var/lib/{} /var/log/{}
- openstack以外でmysqlを使っていなければ、アンインストールしてデータベースを削除します。
# yum remove -y mysql # rm -rf /var/lib/mysql # rm -f /root/.my.cnf
- おとなしく再起動します。これ重要。