ESXi5.5 で Devstack をインストール
ESXi5.5で対象のVMの仮想化機能をオンする
参考
http://techlearn.hatenablog.com/entry/2015/04/05/002144
ESXi セットアップ
ESXi5.5にチャレンジレスポンス形式でssh接続
/etc/vmware/configを開き、「vhv.enable = "TRUE"」を追記します。
libdir = "/usr/lib/vmware" ... vhv.enable = TRUE
ESXi ホストを再起動します。
$ sudo /etc/init.d/hostd restart
仮想マシン一覧の取得
$ vim-cmd vmsvc/getallvms
対象の仮想マシンのバージョンを8→9にアップ
$ vim-cmd vmsvc/upgrade 9960 vmx-09 $ vim-cmd vmsvc/reload 9960
/vmfs/volumes/datastore_nas/106_8a1_06/106_8a1_06.vmx を開き、「vhv.enable = "TRUE"」を追記
... vhv.enable = TRUE
GUI上でもCPUの仮想化機能を自動化から選択する
GUI上でOSのタイプを「その他」のESXi5.xにする
Vtxをハード、MMUをソフトにする?
openvswichをプロミスキャスモードにする?
DevStack セットアップ
インストール時の情報
- 英語でインストール
- キーボードは日本語
- 場所も日本
- ユーザ:demouser
- パスワード:***
- rootユーザ:admin
- hostname:demo-server
- em1:192.168.20.230
- LVMを利用
- proxyは設定しない ※作業PC側からインターネット接続
- sshをインストール
手順
rootのパスワード設定
$ sudo su - $ passwd $ root:***
ロケールを英語に変更
$ echo $LANG $ export LANG="en_US" $ echo $LANG
インタフェースをコントローラーノード用のアドレスに変更
auto em1 iface em1 inet static address 192.168.20.230 netmask 255.255.255.0 network 192.168.20.0
publicネットワークに設定するためにリンクアップだけ
コンピュートノードノードの外との接続のために、プロミスキャスモードにしておく
auto em2 iface em2 inet manual up ip address add 0/0 dev $IFACE down ip link set $IFACE down
インターネット接続用のアドレス ※ 作業用PCに繋ぐ為の設定
auto p6p1 iface p6p1 inet dhcp
インタフェースをダウンアップ
$ ifdown em1 $ ifup em1 $ ifup em2 $ ifup p6p1
aptのproxyをはずす
/etc/apt/apt.confのproxyをコメントアウト
パッケージの更新
$ sudo apt-get -y update $ sudo apt-get -y upgrade
sshインストール(インストール時にしていれば不用)
sudo apt-get -y install ssh
ネームサーバの設定 - /etc/reslove.conf
nameserver 10.248.10.252
squid設定
$ cat /etc/squid/squid.conf | grep "smg_net" | grep ^acl | egrep -v "^$|^#" $ vi /etc/squid/squid.conf ... acl smg_net src 10.248.10.0/25 #対象VMのIPを追加
sudoersに追記(パスワード入力省略)
$ sudo vi /etc/sudoers "%demouser" ALL=(ALL) NOPASSWD: ALL
パッケージの更新
$ sudo apt-get -y update $ sudo apt-get -y upgrade $ sudo apt-get -y dist-upgrade $ sudo shutdown -r 0
仮想環境関連のインストール
$ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
neutron関連のインストール
$ sudo apt-get -y install neutron-plugin-ml2 neutron-plugin-openvswitch-agent neutron-l3-agent neutron-dhcp-agent python-memcache sysstat
NTPのインストール
$ sudo apt-get -y install ntp
/etc/ntp.confは以下の通り
driftfile /var/lib/ntp/ntp.drift statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jp restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery restrict 127.0.0.1 restrict ::1 disable monitor
gitのインストール
$ sudo apt-get install git
プロキシ
$ export http_proxy=http://10.248.10.252:8080 $ export https_proxy=$http_proxy
devstackの取得
$ sudo git clone https://git.openstack.org/openstack-dev/devstack $ sudo chown -R demouser:demouser devstack
ディレクトリ
$ sudo mkdir /opt/stack $ sudo chown demouser:demouser /opt/stack
セットアップ前準備
$ vi ‾./devstack/local.conf ############################## [[local|localrc]] HOST_IP=192.168.20.230 DEST=/opt/stack ADMIN_PASSWORD=*** MYSQL_PASSWORD=*** RABBIT_PASSWORD=*** SERVICE_PASSWORD=*** SERVICE_TOKEN=*** # Nova disable_service n-net #最近のdevstackではnvcが標準でないため、以下をオンにする? #enable_service n-novnc # Neutron enable_service q-svc enable_service q-agt enable_service q-dhcp enable_service q-l3 enable_service q-meta enable_service neutron FLOATING_RANGE=192.168.181.0/25 #br-exのアドレスもPUBLIC_NETWORK_GATEWAYに指定されてしまうため、注意が必要 PUBLIC_NETWORK_GATEWAY=192.168.181.254 FIXED_RANGE=10.20.0.0/24 NETWORK_GATEWAY=10.20.0.254 FIXED_NETWORK_SIZE=256 #FLAT_INTERFACE=eth0 #ENABLED_SERVICES+=,tls-proxy #USE_SSL=True # Swift #enable_service s-proxy s-object s-container s-account #SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5 #SWIFT_REPLICAS=1 #SWIFT_DATA_DIR=$DEST/data VIRT_DRIVER=libvirt #VIRT_DRIVER=kvm #OFFLINE=True LOGFILE=/opt/stack/logs/stack.sh.log LOGDAYS=1 SCREEN_LOGDIR=$DEST/logs/screen HORIZON_BRANCH=stable/juno NOVA_BRANCH=stable/juno KEYSTONE_BRANCH=stable/juno GLANCE_BRANCH=stable/juno CINDER_BRANCH=stable/juno NEUTRON_BRANCH=stable/juno #HORIZON_BRANCH=stable/kilo #NOVA_BRANCH=stable/kilo #KEYSTONE_BRANCH=stable/kilo #GLANCE_BRANCH=stable/kilo #CINDER_BRANCH=stable/kilo #NEUTRON_BRANCH=stable/kilo [[post-install|NOVA_CONF]] vnc_keymap=ja
gitのbranchをあわせる
$ git branch -a
現在のブランチを確認する
$ git checkout -b stable/juno remotes/origin/stable/juno
stable/junoをローカルに作るとともに、 remoteの安定版を落とし、 操作対象とするブランチを切り替える
$ git branch -a
切り替わったか確認する
DevStack セットアップ
$ cd ‾ $ ./stack.sh
gitプロトコルのhttpsへの変換 ※インストールがうまくいかない場合
$ git config url.https://ほげほげ/.insteadOf git://ほげほげ/
#!/bin/bash export OS_USERNAME=admin export OS_PASSWORD=*** export OS_TENANT_NAME=demo #export OS_REGIONNAME=nova export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/ #export OSREGIONNAME=RegionOne export LC_ALL=C
環境変数を読み込ませる
$ source credrc.sh
br-exのアドレスを変更する
$ sudo ip addr add 192.168.181.253/24 dev br-ex
ブリッジのDBを見る
$ sudo ovs-vsctl show
ブリッジの一覧を見る
$ sudo ovs-vsctl list-br
外部インターフェースに物理インターフェースをひもづける
$ sudo ovs-vsctl add-port br-ex em2
(動作確認)Neutronの設定 物理NICと仮想NICをひもづける
- Horizonでインスタンスを作る
- FloatingIPを確保する
- FloatingIPを割り当てる
- セキュリティグループを作り、ICMPとSSHを許可
- インスタンスにセキュリティグループを割り当てる
ここまででem2に接続された外部のPCから、インスタンスに接続できる
見やすくするためにlibvirtdで作られるネットワークインタフェースを消しておく
$ sudo virsh net-destroy default $ sudo virsh net-undefine default
再起動前に interfaces に追加しておく
allow-ovs br-ex iface br-ex inet manual ovs_type OVSBridge ovs_ports em2 allow-br-ex em2 iface em2 inet manual ovs_bridge br-ex ovs_type OVSPort auto br-ex iface br-ex inet manual up ip addr add 192.168.181.1/24 dev $IFACE down ip link set $IFACE down
再起動前にインスタンスを削除する
devstackをとめる(unstack.sh)
再起動後に外部ネットワークを設定
$ sudo ip addr add 192.168.181.253/24 dev br-ex $ sudo ip link set br-ex up $ sudo route add -net 10.20.0.0/24 gw 192.168.181.1
やらなかった
$ sudo losetup -f -show /opt/stack/data/stack-volumes-backing-file
DevStack 再起動
/devstack/rejoin-stack.sh
プロジェクトの作成 - project01〜04
ユーザの作成(OSとOpenStack) - user01_01〜user01_08 user02〜04まで同様に作成
プロジェクトごとのprivatenwの作成とpublicnwへの紐づけ
クォータの設定
user_credrc.shの作成と各ユーザへのコピー
豆知識・ノウハウ
stack.shでエラーが出る場合
$ cd /opt/stack/python-keystoneclient $ git tag -d 0.2.0
- AWS上ではKVMを利用するのは難しい
- OpenStackから利用するHyperVisorはKVMの方が良い
- gitを利用する際にproxy環境だと色々と苦労するため、やめた方が良い
- devstackでのインターネットには高速回線でつながるべし
- オールインワンでやると構成が理解しづらい
- 一方で、仮想サーバの上でやると、環境依存で切り分けが難しくなる
- コントローラー、コンピュート、ネットワークノードがあり、マルチノードの環境の場合、設定が必要
- コンピュートノードには基本的にhypervisorが入っていて増設していくイメージ
- 外部ネットワークで選ばられるフラットネットワークは「インスタンスのあるNW(br-int)」と「プロバイダーNWbr-ex)」を
- 同一L2セグメントにすること?(未確認)
- br-ex、br-int、br-tunはstack.shで作られるが、OpenStackとは別?
- 物理インタフェースと外部ネットワークの紐づけはCLIでしか行えない?
- br-tunはネットワークノードとコンピュートノードを結びつけるために必要?
- 出来る仮想ブリッジ
- br-exはネットワークノードに作成
- br-intは?
linux-bridge - 192.168.122.Xのネットワークはlibvirtを入れると設定される仮想ブリッジ
消すにはこんな感じのコマンドの後再起動
$ sudo virsh net-autostart default --disable
- DHCPとNATが動作していて、外部に接続できる
- 「brctl show」で状態が見れる
- brctl は bridge-utils パッケージ郡
namespace
namespaceが利用されているかは、「ip netns」コマンドで確認が出来る
$ sudo ip netns exec XXXX /bin/bash #表示されたXXXに入ることが出来る
ip link listでインタフェースの一覧
open-vswitch
$ ovs-ofctl show BRIDGE #ブリッジに接続されているポートを確認する $ ovs-list-ifaces BRIDGE $ ovs-list-ports BRIDGE
ホストOSコピーで想定していた作業
コピー
ホスト名を変える
$ hostname $ sudo vi /etc/hostname $ sudo vi /etc/hosts
アドレスを変える
$ vi /etc/network/interface $ sudo ifdown eth0 $ sudo ifup eth0
local.confを変える
HOST_IP=
ユーザー名の変更
$ sudo usermod -l 新しいユーザー名 現在のユーザー名
ホームディレクトリの変更
$ sudo usermod -d 新しいホームディレクトリ ユーザー名
uidを変更したらホームディレクトリとかのowner情報の変更が必要
$ sudo chown -R ユーザー名 ディレクトリ