openstackとか一応触っておく。
結論を先に書いておくと、dockerがもう少し安定すればdockerの方がお手軽感満載。
ただしAPIが豊富なopenstackは他のシステム(例えばredmineやgitlab)と連動した社内用開発環境の自動生成ツールとして有望かも。
しかしながら最低限必要とされるスペックがなかなかマッチョなのでマシン余ってるからほいほい入れてみようというわけにもいかなそう。
インストール準備
# ネットワークマネージャを停止
# systemctl stop NetworkManager
# systemctl disable NetworkManager
# 旧ネットワークをスタート
# service network start
# chkconfig network on
# SELINUXをPermissiveに
# setenforce 0
# CentOSをminimalインストールした場合
# yum -y install deltarpm
インストール
Juno指定でインストール
# yum install -y http://rdo.fedorapeople.org/openstack-juno/rdo-release-juno.rpm
# yum install -y openstack-packstack
OpenStackの環境構築を行う。
永続ボリュームCinderの容量を指定してpackstackする。
デフォルトでは20G確保される。大規模に構築するなら大きめに取っておくと良いよう。
ネットワーク越しで操作していると切断される可能性があるのでローカルから実行する。
# packstack --allinone --provision-all-in-one-ovs-bridge=n --ntp-servers=ntp.nict.jp --cinder-volumes-size=20G
長い長い構築時間が終わるとネットワークインターフェースの雛形が追加されてる。
eth0のデバイスタイプをOVSPortにしてbr-exにマッピングする。
br-exはovsとしてOpen vSwitchが提供する仮想ブリッジという扱いにする。
DEVICE="eth0"
HWADDR="[MACアドレス]"
TYPE="OVSPort"
UUID="[UUID]"
ONBOOT="yes"
NM_CONTROLLED="yes"
OVS_BRIDGE="br-ex"
DEVICE="br-ex"
DEVICETYPE="ovs"
TYPE="OVSBridge"
ONBOOT="yes"
BOOTPROTO="none"
IPADDR="[固定したいIP]"
NETMASK="[サブネットマスク]"
GATEWAY="[ゲートウェイIP]"
DNS1="[DNSサーバ]"
NM_CONTROLLED="yes"
OpenStackでネットワーク管理を担当するneutronにマッピング設定を追加する。
# network_vlan_ranges =
# Example: network_vlan_ranges = physnet1:1000:2999,physnet2
# 以下追記
network_vlan_ranges = physnet1
bridge_mappings = physnet1:br-ex
ネットワーク再起動
# service network restart
# ovs-vsctl show
# eth0が追加されている
Bridge br-ex
Port "eth0"
Interface "eth0"
Port br-ex
Interface br-ex
type: internal
日本語キーボードを使っている人はこの時点で細かい設定。
VNCを使った時にとにかく困るので面倒臭がらずにやっておくと後で困らない。
コロンとかアンスコが入力できないとかね。
# Keymap for VNC (string value)
#vnc_keymap=en-us # jaに変更する
vnc_keymap=ja
再起動
# systemctl restart openstack-nova-compute
サービスの状態を確認する。
disabled on bootでないのにinactiveやfailedは失敗しているもの。
非力なマシンだと普通にあるみたい。
自分の環境では失敗だらけで、気付かず画面を操作してもエラーだらけでハマった。
# openstack-status
== Nova services ==
openstack-nova-api: active
openstack-nova-cert: active
openstack-nova-compute: active
openstack-nova-network: inactive (disabled on boot)
openstack-nova-scheduler: active
openstack-nova-conductor: active
== Glance services ==
openstack-glance-api: active
openstack-glance-registry: active
== Keystone service ==
openstack-keystone: inactive (disabled on boot)
== Horizon service ==
openstack-dashboard: active
== neutron services ==
neutron-server: failed
neutron-dhcp-agent: active
neutron-l3-agent: failed
neutron-metadata-agent: active
neutron-lbaas-agent: inactive (disabled on boot)
neutron-openvswitch-agent: active
== Swift services ==
openstack-swift-proxy: failed
openstack-swift-account: failed
openstack-swift-container: failed
openstack-swift-object: failed
== Cinder services ==
openstack-cinder-api: active
openstack-cinder-scheduler: active
openstack-cinder-volume: active
openstack-cinder-backup: inactive
== Ceilometer services ==
openstack-ceilometer-api: failed
openstack-ceilometer-central: active
openstack-ceilometer-compute: active
openstack-ceilometer-collector: active
openstack-ceilometer-alarm-notifier: active
openstack-ceilometer-alarm-evaluator: active
openstack-ceilometer-notification: active
== Support services ==
libvirtd: active
openvswitch: active
dbus: active
target: active
rabbitmq-server: active
memcached: active
いろいろと失敗しておるので再起動
# systemctl restart neutron-server
# systemctl restart neutron-l3-agent
# systemctl restart neutron-lbaas-agent
# systemctl restart openstack-swift-proxy
# systemctl restart openstack-swift-account
# systemctl restart openstack-swift-container
# systemctl restart penstack-swift-object
使ってみる
アクセスしてみる
まずはGUIにログイン。アクセス情報を確認する。
OS_USERNAMEとOS_PASSWORDでログインできる。
# cat /root/keystonerc_admin
export OS_USERNAME=admin
export OS_TENANT_NAME=admin
export OS_PASSWORD=[パスワード]
export OS_AUTH_URL=http://[サーバIP]:5000/v2.0/
export OS_REGION_NAME=RegionOne
export PS1='[\u@\h \W(keystone_admin)]\$ '
インスタンス
AWSでいうところのEC2的なものを立ち上げてみよう。
以外とまとまった情報が少ないのでチュートリアル的に。
1.イメージ
プロジェクト > コンピュート > イメージ
cirrosという最小限機能のOSがデフォルトでインストールされている。
が、こいつテスト用で何もできないので。
OpenStack で動作する仮想マシンイメージを取得する最も簡単な方法は、すでに作成されたものをダウンロードすることです。
のことで
イメージの取得
今回はCentOS7使いたいので入れてみる。qcow2形式のイメージを選択した。
CentOS 7 イメージ
イメージの場所に選んだURLを入力して、もろもろ内容を入力。後で検索に使う内容の様だ。
最小ディスクや最小メモリーはよく分からないので未入力でいってみる。
1GB程あるのでしばらくかかる。無事一覧に並べばOK。
2.アクセスとセキュリティー
プロジェクト > コンピュート > セキュリティーグループ > セキュリティグループの作成
sshとICMPだけ許可してみた。
キーペアの作成もしておく。
特に難しい事もないので割愛。
3.ネットワーク
外との接続に使うpublicネットワークとプロジェクト内で使うprivateネットワーク、仮想ルータを作る。
- public
管理 > ネットワーク > ネットワークの作成
作成したネットワークの詳細画面からサブネットマスクを作成する。
IP割当プールに現在のネットワークで使っていない範囲を指定するのが良いだろう。
このネットワークではゲストOSに192.168.1.100~192.168.1.150までのIPが振られるようになる。
- private
プロジェクト > ネットワーク > ネットワークの作成
今度はプロジェクト毎のネットワーク設定。
プライベートっぽいどこのルータも使わないだろうって体系を適当につける。
ゲートウェイは次に作成するルータのIPにする。
DHCPにして特に割当範囲やDNSは指定せず作成。
- ルーター
publicとprivateをルータで紐付ける。
プロジェクト > ネットワーク > ルーターの作成
まずは適当に名前をつけて作成したらゲートウェイの設定を行う。
外部ネットワークに先程作成したpublicのネットワークを設定。
次にルータ詳細からインターフェースにprivateを追加する。
IPアドレスは省略!
おろらくよくわからずに進めているそこの君、ちゃんとできているか確認しよう。
プロジェクト > ネットワーク > ネットワークトポロジー
publicとprivateのネットワークが仮想ルータを介して接続できていればOKのはず。
4.インスタンス起動
プロジェクト > コンピュート > インスタンス > インスタンスの起動
作成したイメージ、セキュリティグループ、キーペア、ネットワーク、を使用する設定して
インスタンスを起動する。
フレーバーがm1.tinyだと容量が足りずインストールエラーとなった。
このあたりの基本設定は 管理 > フレーバー で変更できそうだ。
ネットワークでは現時点でprivateを選択。publicは後で振る。
インスタンス詳細からコンソールタブを選ぶとVNCで現在の状況を確認できる。
無事終わっているよう。通常のCentOSだとインストールが開始したりするけどそこまで完了している状態でオフィシャルで配布されているみたい。
次に外部からアクセスできるようIPを割り振る。
インスタンス一覧からアクションを選んでFloating IPを割り振るを選択。
IPの確保を行う。
無事IPが確保できれば自動的にprivate IPにマッピングされるはず。
よし、アクセスしてみよう!となって気になるのがユーザとパスワードだけど以下の様に初期時点で固定されているみたいだ。
ユーザ:centos
RSA認証:起動時に指定したキーペア
ホスト:割り合てられたpublic IP
というわけで外のクライアントからsshしてみよう、ドキドキ。
ssh -i [指定したキーペア] centos@[public IP]
root取るにはsudo suすればノンパスワードでいける。
あれ?アクセスできない
となったりした方もいるであろう。
なぜならコンソールからコマンド入力可能になってもsshやネットワークの設定が反映されるまでにはしばらくかかるようで
アクセスできてもPermission denied(もちろん権限は大丈夫だぞ)で認証が通らない絶望的状況に陥り
結構ハマりましたよ僕は(お前か)。
進行に応じてコンソールのホスト名が
1.localhost
2.host-[private IP]
3.[インスタンス名]
と変化するから最終的にインスタンス名になるまでは基本待機。ブラウザからコンソールを眺めつつたまにEnterするとホスト名が変化するのがわかる。
これに気付かずハマっている時にパスワードログインの許可とパスワードの変更を行ったので一応メモしておく。
#cloud-config
chpasswd:
list: |
root:hoge
centos:fuga
expire: False
アクセスできたら色々確認してみよう。
まず当方yumが通らなかった。DNSの設定がちゃんとできてなく。
参考