maasとjujuでつくるopenstack環境構築入門 icehouse対応版 -...
DESCRIPTION
講師:日本仮想化技術 大内 日時:2014/10/08 タイトル:MAASとJujuでつくるOpenStack環境構築入門 IceHouse対応版 概要: - MAASとJujuについて - MAASとJujuの構築の流れ - JujuによるOpenStackの構築 --- 設計について --- 実際の構築TRANSCRIPT
MAASとJujuでつくる OpenStack環境構築入門
IceHouse対応版
2014年10月8日 日本仮想化技術株式会社
技術部 大内 明
内容
• MAASとJujuについて • MAASとJujuの構築の流れ • JujuによるOpenStackの構築
– 設計について – 実際の構築
2
MAASとJujuについて
MAASについて
• Metal as a Service • 物理サーバーを管理配下に置き、Ubuntu
Serverを簡単に配備できる仕組み • 物理サーバーの他にも、libvirtで管理され
ている仮想マシンも管理可能
4
Jujuについて
• “チャーム”に書かれた内容に沿ってソフトウェアをサーバーに展開するツール
• 展開したチャームを連携させることで、MySQL+WordPressなどのような展開を可能にする
• MAASと連携することによって、ソフトウェアの物理サーバーへのデプロイを実現
• 展開はAWSなどのクラウドへも実行可能 5
MAASとJujuの 構築の流れ
MAASの構築
7
MAAS
(1)サーバーにMAASをインストール・設定
(2)ノードになるマシンをPXEブートして MAAS管理下に登録
juju-coreのインストール
8
MAAS +
juju-core
(3)juju-coreパッケージをMAASサーバーにインストール
(4) MAASと連携する設定を 記述したJujuの設定ファイルを 用意
juju bootstrapの実行
9
J
MAAS +
juju-core
(5)juju bootstrapコマンドで Juju環境デプロイを指示
(6)MAASが管理下のサーバーを割り当て、 電源投入・Ubuntuインストール (7)Jujuがデプロイされる
チャームのデプロイ
10
J
MAAS +
juju-core
(8)Jujuコマンドでチャーム のデプロイを指示
(9)MAASが管理下のサーバーを割り当て、 電源投入・Ubuntuインストール (10)Jujuがチャームをデプロイ
JujuによるOpenStack環境の設計
今回の設計の方針
• Ubuntu Server 14.04.1LTSを使用 • Jujuを用いてOpenStackを簡単にデプロイ • デプロイするマシンの管理にMAASを使用 • 2台の物理サーバーを用意
– KVMホスト兼MAASサーバー (コンピュートノード以外のチャームは仮想マシンに展開する)
– コンピュートノード(Nova Compute用チャーム)
12
チャーム展開の注意点
• 基本的に1つのマシンに1つのチャームをインストール
• 同居するようにコマンドを実行することはできるが、チャームの実装が同居を考慮した設計になっていないといけない – LXCで1台のマシンに複数チャームを展開す
ることは可能
13
必要なJuju Charm
• mysql • rabbitmq-server • keystone • nova-cloud-controller • nova-compute • glance • cinder • quantum-gateway • openstack-dashboard
14
• juju(bootstrap)
KVMホストに必要なリソース
• KVMホスト – 4CPU以上 – メモリ20GB前後 – ストレージ200GB前後 – NICが2つ必要
15
コンピュートノードに必要なリソース
• IPMIやWoLで起動できるマシンが必要 – HP・Dellなど
• コンピュートノードは、稼働させたいインスタンスの量に応じて用意
• お試し程度であれば、それほど高スペックなサーバーでなくても良い
• 複数用意すれば、起動可能なインスタンスの量を増やすことも可能
16
OpenStack環境設計時の考慮点
• Jujuを使ってOpenStackを構築する場合は主に以下の2点を考慮する – 物理ネットワークの構成 – ストレージの構成
• 今回はCinderを仮想マシンで作成するため、Cinderのマシンにディスクを2つ接続する
• 構成を本格的にしたい場合には考慮点は増える
17
Jujuのネットワークの構成
• 管理系 – MAASがDHCP+PXEブートおよびDNSを提供 – 他のネットワークとDHCPが重複しないように注意 – 独立させるか、VLANを分けるなどの対応が必要
• サービス系(Floating IP用) – Neutron+Open vSwitch(GREトンネリング) – インスタンスが外部ネットワークに出るための経
路として使用
18
環境の事前準備
本環境について
• KVMホストのIPアドレス – 管理系(eth0)は192.168.215.20を使用 – サービス系(eth1)は172.16.215.20を使用
• コンピュートノードはHPサーバーを使用 – iLOのIPアドレスはサービス系セグメントに設
定する
20
本環境の物理設計
21
KVMホスト コンピュートノード (例としてHP iLOを使用)
ルーター
Internet
eth0
eth1
eth0
iLO
VM
(管理系) (サービス系)
ハブ
KVMホストの事前準備
• Ubuntu Serverをインストール – ベース+SSHサーバー
• IPアドレスを設定 • 以下のパッケージをインストール
• eth0・eth1のブリッジを作成
22
# apt-‐get install virt-‐manager qemu-‐kvm qemu-‐system libvirt-‐bin
# virsh iface-‐bridge eth0 br0 # virsh iface-‐bridge eth1 br1
NATの設定
• 管理系はインターネットに接続できる必要があるため、NATを設定する
• サービス用のIPアドレス設定 – eth1の設定の下に以下の一行を追記 – pre-up iptables -t nat -A POSTROUTING -s
192.168.215.0/24 -o eth0 -j MASQUERADE – 再起動する
23
仮想マシンの作成
• コントローラーノード – 4vCPU / 20GB mem / 50GB HDD / 管理NW(br1)に接続
• ネットワークノード – 1vCPU / 2GB mem / 10GB HDD / 管理NW(br1)とサービス
NW(br0)に接続 • ストレージノード
– 1vCPU / 2GB mem / 10GB HDD+50GB HDD / 管理NW(br1) に接続
• 「仮想マシンを作成後に詳細画面を開く」を選択し、PXEブートを最優先するように設定
• 仮想マシンが起動したらシャットダウンする(OSのインストールはMAASが行う)
24
コンピュートノードの事前準備
• ディスクの中身が消去されるため、消えても良いディスクを用意しておく
• BIOS設定で、PXEブートを最優先にする
25
MAAS+Juju環境の構築
MAASとJuju coreのインストール
• KVMホストに以下のパッケージをインストール – KVMホストと同居させる – リソースに余裕があれば仮想マシンを別途作
成すると良い
• http://<IP>/MAASにアクセスして、指示に従ってルートパスワードを設定
• ログイン 27
# apt-‐get install maas juju-‐core
クラスターの設定(1)
• DHCPを動かすインターフェイスを設定 • [Clusters]タブ-クラスターの編集アイコンを
クリック
28
クラスターの設定(2)
• DNSゾーン名を指定(任意の名前)して[Save Cluster Controller]をクリック
• Interfacesで、br1(管理系)の編集ボタンをクリック
29
クラスターの設定(3)
• Managementを[Manage DHCP and DNS]に設定
• DHCPのリース範囲など ネットワーク情報を入力
• [Save Interface]をクリッ ク
30
PXEイメージの取得
• [Import boot images]をクリック • Boot Imagesのカウントが増えたら完了 • 進捗はWeb画面に出ないため、確認する
には/var/lib/maas/boot-resourcesをduコマンドなどで観察する
31
ノード向けのSSH鍵の登録
• ノードに自動的に配置されるSSH公開鍵を登録する(複数登録可能)
• 画面右上のユーザー名からPreferencesページに移動してSSH keysから登録
32
マシンをMAAS管理下に置く
• マシン(仮想マシン・コンピュートノード)を起動する
• マシンがPXEブートして、MAASにマシン情報を送ると自動でシャットダウンする
• MAASにマシンが認識(仮登録状態)される
• 注意: マシン名はランダムな文字列で登録されるため、順番に起動する
33
マシン情報の入力
• ノードを選択して、編集画面を開く • 以下の設定を行う
– ホスト名 – 電源タイプの指定
• 電源タイプの指定について – IPMI・特定サーバーベンダーの電源管理・
virshなど様々な方法を指定可能
34
電源タイプの指定
• コンピュートノード(HP iLOを想定) – 自動でユーザー・パスワードが追加される – ユーザーがなにかを行う必要はない – ※アンインストール時は手動で消す必要あり
• 仮想マシン – [Power address]にVirshのアドレスを指定
• qemu+ssh://user@localhost/system
– [Power ID]に仮想マシン名を指定
35
仮想マシンの電源管理の ための準備
• maasユーザーからuserユーザーにSSH接続するため、下準備をしておく
• 手順 1. /home/maasディレクトリを作成、所有権の設定 2. /etc/passwdを開き、maasユーザーの行の/bin/falseを
/bin/bashに書き換える 3. suコマンドでユーザー移動(su - maas) 4. maasユーザーのSSH鍵をパスワード無しで生成 5. userユーザーにmaasユーザーの公開鍵を
authorized_keysに登録 6. maasユーザーでコマンドを実行して確認
$ virsh –c qemu+ssh://user@localhost/system list --all
36
ノードのコミッションの実行
• ノードの画面右側の[Commission node]をクリックする
• マシンが起動して、詳細な情報の取得などが行われる(自動でシャットダウンする)
• ノードのステータスがReadyになる
37
fast installerの設定
• Ubuntuを高速でインストールできるモードをノードに対して設定
• すべてのノードを選択し、[Bulk action]で[Mark nodes as using the fast installer]を選んで実行
• コミッションも実行可能
38
ノードへタグを付ける
• タグはjujuにチャームを割り当てるときに必要になる
• コマンドからのみ操作可能 • 手順
– maas login maas <MAAS URL> <MAAS KEY>を実行してログイン
– maas maas nodes listを実行して、リストを取得 – maas maas tags new name=<タグ名>を実行してタ
グを作成 – maas maas tag update-nodes <タグ名> add=<ノード
のUUID>を実行してノードにタグを付ける
39
スクリプトを作成して効率化
• タグ付与はノードリストがJSONであることを活用してスクリプトなどを作ると良い – PHPの例(単純にノード名と同じ名前のタグをつける)
40
<?php exec("maas maas nodes list", $json); $json = implode("\n", $json); $data = json_decode($json); foreach ($data as $item) { $host = explode(".", $item->hostname); $id = $item->system_id; print exec("maas maas tags new name={$host[0]}"); print exec("maas maas tag update-nodes {$host[0]} add={$id}"); } ?>
Jujuの展開
41
Juju環境ファイルの作成
• ホームディレクトリでjuju initコマンドを実行 • .jujuディレクトリが作成される • .juju/environments.yamlを編集
– jujuがチャームの内容をデプロイする環境にアクセスするための認証情報などを記述する設定ファイル
– 記述後はホームディレクトリにバックアップしておくと良い(作りなおしするときに便利)
42
environments.yamlの記述
• maas-oauthの情報はMAAS管理画面のuser preferencesのページにある
43
default: maas environments: maas: type: maas maas-server: 'http://192.168.215.20/MAAS/' maas-oauth: '34snhJ2RLLH9Swu..........XsgmnzqwbQ’ admin-secret: password ←juju-guiに入るためのパスワード authorized-keys-path: ~/.ssh/authorized_keys
juju bootstrapを実行
• 以下のコマンドを実行する
• jujuマシンが起動して、環境が構築される • 以下のコマンドを実行して、juju-guiチャー
ムをインストール
44
$ juju bootstrap --constraints tags=juju
$ juju deploy juju-gui --to 0
juju-guiのWeb画面にアクセスする
• クライアントマシンが管理ネットワーク下にある場合はdashboardのIPアドレスにアクセス
• クライアントマシンがサービスネットワーク下にある場合はルートを追加する – Macの例
45
sudo route add -net 192.168.215.0/24 172.16.215.20
juju-guiのWeb画面
46
JujuによるOpenStackの展開
47
openstack.yamlの作成
• openstackの各チャームに対する設定はyamlファイルで記述する
• 右の通りファイルを作成して、ホームディレクトリに配置する
48
keystone: admin-password: password admin-token: ubuntuopenstack nova-cloud-controller: network-manager: Neutron quantum-security-groups: "yes" cinder: block-device: vdb overwrite: "true" quantum-gateway: ext-port: eth1 openstack-dashboard: webroot: /
OpenStackチャームのデプロイ
• 以下のコマンドを実行して、チャームをデプロイする
49
$ juju deploy --config openstack.yaml --constraints tags=neutron quantum-gateway $ juju deploy --config openstack.yaml --constraints tags=cinder cinder $ juju deploy --constraints tags=compute nova-compute $ juju deploy --to lxc:0 mysql $ juju deploy --to lxc:0 rabbitmq-server $ juju deploy --to lxc:0 glance $ juju deploy --config openstack.yaml --to lxc:0 keystone $ juju deploy --config openstack.yaml --to lxc:0 nova-cloud-controller $ juju deploy --config openstack.yaml --to lxc:0 openstack-dashboard
デプロイオプション
• --config xxx.yaml – チャームのオプションが記述されているファイルを
指定 • --constraints tags=xxx
– xxxのタグが付いているマシンのどれかにデプロイ
• --to – 指定したマシンIDにデプロイ – --to 0 ならIDが0のマシンにデプロイ – --to lxc:0 ならIDが0のマシンにLXCコンテナとし
てデプロイ
50
デプロイ時のtips • 環境によってはjujuマシンの応答が鈍くな
るため、120秒ほど実行間隔をあけてデプロイする
• jujuコマンドがタイムアウト して失敗したらjujuマシンを 再起動する
• juju-gui画面でチャームに 赤いバーがついたらRetry を実行する
51
チャームの関連付けを行う
• チャーム同士は何も関連付けしていない素の状態のため、関連付けを行って機能するようにする
• コマンド実行の他に juju-guiでの関連付け もできる
52
関連付けコマンド
$ juju add-relation keystone mysql $ juju add-relation nova-cloud-controller rabbitmq-server $ juju add-relation nova-cloud-controller mysql $ juju add-relation nova-cloud-controller keystone $ juju add-relation nova-compute:amqp rabbitmq-server:amqp $ juju add-relation nova-compute mysql $ juju add-relation nova-compute nova-cloud-controller $ juju add-relation glance mysql $ juju add-relation glance keystone $ juju add-relation glance nova-compute $ juju add-relation glance nova-cloud-controller $ juju add-relation cinder mysql $ juju add-relation cinder glance $ juju add-relation cinder rabbitmq-server $ juju add-relation cinder nova-cloud-controller $ juju add-relation cinder keystone $ juju add-relation quantum-gateway mysql $ juju add-relation quantum-gateway rabbitmq-server $ juju add-relation quantum-gateway nova-cloud-controller $ juju add-relation openstack-dashboard keystone
53
dashboardにアクセスする
• 関連付けをしてしばらくたったらdashboardのWeb画面にアクセスする
• juju-gui同様必要に応じてルーティングを設定する
54
OpenStackを使えるように設定する
• ネットワークの設定 – 内部・外部ネットワークの作成 – ルーターの作成とネットワークの接続
• イメージの取得 – CirrOS: http://download.cirros-cloud.net/
55
Juju+MAAS構築手順書配布中
56
http://EnterpriseCloud.jp/installguide-juju-openstack/