IT井戸端会議

IT井戸端会議

インフラ、ネットワーク、アプリケーション開発、IT界隈の話等々を東京都千代田区界隈から発信します。

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://ほげほげ/

API実行の為の環境変数ファイルを作成 credrc.sh

#!/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
  • Neutronの設定 物理NICと仮想NICをひもづける

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 ユーザー名 ディレクトリ