OpenStackのDashboard (Horizon)のセッションタイムアウトを変更する

/etc/openstack-dashboard/local_settings.pyのSESSION_TIMEOUT変数を秒単位で設定する。

例:タイムアウトを365日にする。このファイルは、Python scriptの一部なので下記のようにPythonの式を用いることも可能。
SESSION_TIMEOUT = 3600 * 24 * 365
※実際は、他にも制限があるようで、上記の設定をしても数十分程度でやはりタイムアウトする。

LinuxでのGRE tunnelの作り方・削除方法

追加(青字の部分は任意のトンネル名)の例。
# ip tunnel add tunne_name mode gre remote 192.168.254.11 local 192.168.254.1 ttl 255
削除
# ip tunnel del tunne_name 


また、L2インターフェイスであるgretapも以下のように作成可能。key <数値>をコマンドライン中に追加して、同じホストに対して複数のトンネルを作成することも可能。
# ip link add gretap10 type gretap remote 192.168.254.11 local 192.168.254.1 key 10
参考:物理インターフェイスがアップした後、自動的にトンネルを作る例(Ubuntu: /etc/network/interfaces)
auto eth0
iface eth0 inet static

 ....

  post-up ip link add gretap3011 type gretap remote 192.168.254.11 local 192.168.254.1 key 3011
  post-up ip link set dev gretap3011 up mtu 1500
  post-down ip link del name gretap3011

Ubuntu 14.04でDNSサーバやドメインを設定する。

/etc/network/interfaceのネットワークインターフェイスの設定に次のdns-から始まる設定を行う。
auto br0
iface br0 inet static
  address 192.168.1.10
...
  dns-nameservers 192.168.1.2
  dns-search banana
  dns-domain banana

OpenStackのglaceでコマンドラインでイメージを登録する例。

glance image-create --name ubuntu14-14.04.1-server --disk-format=raw --container-format=bare --is-public True --copy-from https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img

Ubuntu 14.04 LTS上のLXCコンテナにOpenStackをインストールする

テスト目的などで、手元のマシン1台にOpenStackをインストールしたいことがある。その際、computerノード、networkノード、computeノードを分けて作成し、なるべく本番に近い構成を作成したい場合もあるだろう。 ホストマシンがUbuntu 14.04なら、このような要求をLXCを使う事で実現できる。 KVMなどを完全仮想化の方法と比べ、ディスクやI/Oスループットの低下を抑制でき、メモリのなどのリソースが最大限活用できる利点がある。

ホストマシンの設定

ホストマシンに以下のカーネルモジュールをロードしておく。起動時に自動的にロードされるようにするには、/etc/rc.localに記載する。
modprobe openvswitch
modprobe kvm
modprobe vhost_net
modprobe nbd
modprobe ip6table_filter
また、NTPサーバーをホストで動かす。各コンテナへのインストールは不要。


コンテナの作成

基本的には、Ice Houseであれば、以下の手順にしたがってインストールすればOKであるが、下記マニュアル以外で必要な設定などを本節で補足する。 http://docs.openstack.org/icehouse/install-guide/install/apt/content/ch_preface.html

構成

ここでは上記のドキュメントと同じく、次の3つのコンテナを作成するものとする。
  • controller
  • network
  • compute1

また、上記ドキュメントの3つのネットワークに対応する3つのブリッジをホストマシンに作成する。
  • mngbr0 管理用 
  • databr0 データ用(仮想マシンが使用するネットワーク)
  • extbr0 外部接続用 
ブリッジの作成方法についてはここを参照。

controllerの設定

このマシンは、mngbr0に接続するので、/var/lib/lxc/controller/configのネットワーク部を次のように設定する。
# Network configuration
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = mngbr0
あとは、公式マニュアルどおりでOK。

networkの設定

/var/lib/lxc/controller/configのネットワーク部を次のように設定する。また、AppArmorの制限をはずしておく。これは、Network namespaceを使用するために必要。また、MTUを1550にしているのは、GREトンネルによるパケット分割の問題を回避するため。コンテナ上の/etc/network/interfacesにもmtu 1550の設定が必要。
# Network configuration
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = mngbr0

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = databr0
lxc.network.mtu = 1550

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = extbr0

lxc.aa_profile = unconfined
次のパッケージをインストールする
# apt-get install iptables

compute1の設定

このマシンは、mngbr0とdatabr0に接続するので、/var/lib/lxc/controller/configのネットワーク部を次のように設定する。
# Network configuration
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = mngbr0

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = databr0
lxc.network.mtu = 1550

公式ドキュメントの”Configure a compute node”の項番2(# dpkg-statoverrideの実行をする節)をスキップする。

novaパッケージをインストールをインストールした際にできる/etc/init/nova-compute.confのmodprobe nbdをコメントアウトする。
--- a/tmp/nova-compute.conf
+++ b/etc/init/nova-compute.conf
@@ -14,7 +14,7 @@ pre-start script
   mkdir -p /var/lock/nova
   chown nova:root /var/lock/nova/
 
-  modprobe nbd
+  #modprobe nbd
 
   # If libvirt-bin is installed, always wait for it to start first
   if status libvirt-bin; then
デバイスファイルを作成する。
# mknod /dev/kvm c 10 232
# chmod 666 /dev/kvm
# mkdir -p /dev/net
# mknod /dev/net/tun c 10 200

Ubuntu 14.04のLXCのコンテナでAppAmorを無効にする。

/var/lib/lxc/[コンテナ名]/configに以下の行を追加する。
lxc.aa_profile = unconfined
これにより、コンテナ上でmountが失敗するなどの制限が解消する。

Ubuntu 14.04で起動時にBridgeインターフェイスを作成する。

/etc/network/interfaceに以下のような記述を行う。青字の部分はBridge名であり、下記の例ではmybr0である。
auto mybr0
iface mybr0 inet static
  address 192.168.81.1
  network 192.168.81.0
  netmask 255.255.255.0
  broadcast 192.168.81.255
  bridge_ports none

なお、bridge_ports noneという行は、Bridge起動時点で、そのBridgeに所属するinterfaceが何もない場合に指定する必要がある。

また、eth0のような起動時に存在するNICを加えてbridgeを構成するには、次のようにすればよい。

iface eth0 ine manual

iface mybr0 inet static
<同上>
bridge_ports eth0


関連記事 CentOSでBridgeインターフェイスを作成する

LXCのコンテナに2つ目のNICを追加

以下のように/var/lib/lxc/[コンテナ名]/configに、単純にlxc.network.typeなどを再度記述する。
# Network configuration (最初からエントリ)
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = mybr0
なお、これらNICのための新たなBridgeをホストに作成する方法は以下を参照。

参考

LXCの記事一覧

Gitで特定のコミットの差分を見る

git show コマンドを使えばよい。引数にはコミットハッシュ。もちろんHEADやHEAD^も使える。
$ git show 23343dbc

OpenStackでErrorやSuspendがずっと続くインスタンスをリセットする。

Adminで以下のようにして対象のインスタンスのIDを調べる。
$ nova list --all-tenant
そのIDを指定してreset-stateコマンドを実行。
$ nova reset-state --active  3275980c-3142-489f-b722-fca73adb98c3

マシンが停止している場合、ハードリブートすれば、再起動する。

OpenStackのNovaですべてのテナントのリストを表示

$ nova list --all-tenant 1

Ubuntu 14.04にRedmineをインストール

まず、apt-getでRedmineとpassengerパッケージをインストール
# apt-get install redmine libapache2-mod-passenger
# gem install bundler
/etc/apache2/sites-available/000-default.confのVirtualHostタグ内に次の内容を追加
        <Directory /var/www/html/redmine>
                RailsBaseURI /redmine
                PassengerResolveSymlinksInDocumentRoot on
        </Directory>
/etc/apache2/conf.d/passenger.confに次の内容を記述
RailsBaseURI /redmine
リンクを作成。
ln -s /usr/share/redmine/public /var/www/html/redmine
# chmod 666 /usr/share/redmine/*
必要に応じて以下のパーミッションを確認
/var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default