nested vm + multi node + neutron network な環境をdevstackで作る
ubuntu 16.04でのkvm環境の作り方 - ただの記録 の続き。
前回まではただkvmの環境を作っただけ。目的は今回のタイトルの環境を作ることで、ようやく動く環境が作れたので記録に残しておく。
まずはcomputeノードとなる仮想マシンに対してkvmのアシストが効くように設定を変更する。これをやっておかないと仮想マシン上でcat /prot/cpuinfoしたときにvmxがでてこず、kvmによるアシストが効かない。
rwar@tx1310m1:~$ virsh edit compute1 <cpu mode='host-passthrough'> # cpuタグにhost-passthroughを設定する
そんでいよいよdevstackを実行してみる。その前にstackユーザを作ったりとセットアップする。ここではcontrollerノードになる予定のサーバに対して設定するが、すべてのノードに対して同じ設定を入れる。
test@controller:~$ sudo groupadd stack test@controller:~$ which bash /bin/bash test@controller:~$ sudo useradd -g stack -s /bin/bash -d /opt/stack -m stack test@controller:~$ sudo visudo test@controller:~$ stack ALL=(ALL) NOPASSWD: ALL # この行を追加する test@controller:~$ sudo passwd stack [sudo] password for test: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully test@controller:~$ exit
stackユーザで入りなおしてdevstackをダウンロードする。
stack@controller:~$ git clone https://git.openstack.org/openstack-dev/devstack Cloning into 'devstack'... remote: Counting objects: 34131, done. remote: Compressing objects: 100% (16173/16173), done. remote: Total 34131 (delta 24228), reused 27025 (delta 17501) Receiving objects: 100% (34131/34131), 6.64 MiB | 2.62 MiB/s, done. Resolving deltas: 100% (24228/24228), done. Checking connectivity... done. stack@controller:~$ cd devstack/ stack@controller:~/devstack$
ここでlocal.confという設定ファイルを作る。controllerノードとcomputeノード用に2種類を作る。
まずはcontroller向け
stack@controller:~/devstack$ cat local.conf [[local|localrc]] MULTI_HOST=True HOST_IP=192.168.1.10 SERVICE_HOST=192.168.1.10 MYSQL_HOST=${SERVICE_HOST} RABBIT_HOST=${SERVICE_HOST} GLANCE_HOSTPORT=${SERVICE_HOST}:9292 ADMIN_PASSWORD=test MYSQL_PASSWORD=test RABBIT_PASSWORD=test SERVICE_PASSWORD=test # Do not use Nova-Network disable_service n-net disable_service n-cpu # Neutron ENABLED_SERVICES+=,n-novnc,q-svc,q-dhcp,q-meta,q-agt,q-l3 ## Neutron options #Q_USE_SECGROUP=True Q_USE_SECGROUP=False FLOATING_RANGE="192.168.1.0/24" FIXED_RANGE="10.0.0.0/24" Q_FLOATING_ALLOCATION_POOL=start=192.168.1.200,end=192.168.1.254 PUBLIC_NETWORK_GATEWAY="192.168.1.1" PUBLIC_INTERFACE=ens6 # Open vSwitch provider networking configuration Q_USE_PROVIDERNET_FOR_PUBLIC=True OVS_PHYSICAL_BRIDGE=br-ex PUBLIC_BRIDGE=br-ex OVS_BRIDGE_MAPPINGS=public:br-ex stack@controller:~/devstack$
次にcompute向け
stack@compute1:~/devstack$ cat local.conf [[local|localrc]] MULTI_HOST=True HOST_IP=192.168.1.21 SERVICE_HOST=192.168.1.10 MYSQL_HOST=${SERVICE_HOST} RABBIT_HOST=${SERVICE_HOST} GLANCE_HOSTPORT=${SERVICE_HOST}:9292 ADMIN_PASSWORD=test MYSQL_PASSWORD=test RABBIT_PASSWORD=test SERVICE_PASSWORD=test ## Neutron options PUBLIC_INTERFACE=ens6 ENABLED_SERVICES=n-cpu,rabbit,q-agt NOVA_VNC_ENABLED=True NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html" VNCSERVER_LISTEN=$HOST_IP VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN stack@compute1:~/devstack$
computeノードを複数作りたい場合はHOST_IPのみを変更すれば良い。
local.confができたらstack.shを走らせるわけだが、どうもcontrollerノードに関してはbr-exというovsブリッジを 先に作っておかないとstack.shが途中で停止してしまう。
stack@controller:~/devstack$ sudo apt install openvswitch-switch stack@controller:~/devstack$ sudo ovs-vsctl add-br br-ex
これで準備ができた。各ノード上でstack.shを走らせる。
stack@controller:~/devstack$ ./stack.sh
アップデートなどでOSを再起動する前にはunstack.shを実行する。 computeノードでは再起動後にunstack.shしても大丈夫だが、controllerノードではあらかじめunstack.shしておかないと sshできなくなるので注意が必要となる。*1
stack@controller:~/devstack$ ./unstack.sh
もしstack.shが失敗したときに環境を綺麗にする方法は
stack@controller:~/devstack$ ./unstack.sh stack@controller:~/devstack$ ./clean.sh
local.confを書き換えてstack.shを実行する。