Post on 17-Jul-2015
UbuntuでOpenNebula• gihyo.jpのUbuntu Weekly Recipe 第345回と第346回を書かせてもらいました
• UbuntuとOpenNebulaでクラウド環境を構築してみよう
• (前編)http://gihyo.jp/admin/serial/01/ubuntu-recipe/0345
• (後編)http://gihyo.jp/admin/serial/01/ubuntu-recipe/0346
• 2014/12/13時点の最新版はOpenNebula 4.10.1
• リポジトリのバージョンを適宜読み替えてください。
• (前編)はインストール、(後編)は環境構築
• (発動篇)は紹介メインで
OpenNebulaってどんなもの?• OpenNebula.org で開発しているクラウド構築管理ツール
• 多数の物理マシン/マルチユーザー環境での仮想マシン管理
• データセンターや、企業・研究機関の計算機センターでの利用が多い模様
• あまりAWSに似せて作っていない
• 仮想マシンの管理に必要な機能
• 利用者と管理者にとっての「あると便利な機能」
OpenNebulaってどんなもの?• 最初のパブリックリリースは2008年3月
• わりと古株
• http://opennebula.org/opennebula-is-7-years-old/
• Open ベンダーによるロックインがなく
• Simple 少人数でも運用でき
• Flexible 既存のインフラにフィットし
• Scalable 簡単に規模を変更できる
構成
• Hybrid は IBM SoftLayer と Microsoft Azure にも対応
http://docs.opennebula.org/4.10/_images/overview_builders.png
実装• コアとなるOpenNebulaデーモン oned はC++で記述
• CLI、Web UIはRubyで記述
• ハイパーバイザ、ストレージ、ネットワーク等の差異をドライバスクリプト(bash、Ruby)で吸収
• 仮想マシンの操作も物理マシン上のドライバスクリプトをSSHで実行
• SSHの認証方式は公開鍵認証
• 仮想マシン操作用の常駐プロセスを持たない
• モニタリング用のプロセスは常駐
コマンドライン・インタフェース(CLI)
• フルコントロール可能
• 直観的なコマンド構文
• 見やすい出力メッセージ
• メッセージフォーマットは変更可能
• レンジ指定で複数のターゲットをまとめて操作可能
• CLIとonedはXML-RPCで通信
• oned稼働マシンとユーザーログインマシンを分離可能
Web UI(Sunstone)• フルコントロール可能
• ユーザーの位置づけ(ロール)によって複数のビューを選択可能
• admin、vcenter、vdcadmin、user、cloud
• ビューの項目やボタンの表示、非表示が設定可能
• Sunstoneとonedは別プロセスとして稼働
• XML-RPCで通信
• onedと異なるマシン上で稼働可能
ユーザーとグループ• UNIXのユーザー/グループに類似のモデル
• スーパーユーザーとして oneadmin が存在する
• ユーザーは複数のグループに所属することも可能
• 特定ユーザーにグループリーダーとして限定的な管理者権限を与えることも可能
• 認証方法はパスワード認証、SSH公開鍵認証、x509認証、LDAP認証から選択可能
• ユーザー単位、グループ単位で各種リソースにクォータを設定可能
アカウンティング• 集計できる情報
• 仮想マシンの作成日時、破棄日時、CPU数、メモリサイズ、ネットワーク送受信量など
• CLI、Web UIから任意のタイミングで集計できる
• 管理者は全ユーザーの情報を取得可能
• グループリーダーは所属グループのユーザーの情報を取得可能
• 一般ユーザーは自分の情報のみ取得可能
リソースDatastore • ディスクイメージを格納するストレージごとに定義 • 用途、種類、転送方法などに応じて複数定義できる
Image • VMの起動元のディスクイメージ • データ格納用のディスクイメージ • ISOイメージ • 等々
Virtual Network • IPアドレスレンジやネットワーク分割方法を定義 • ネットワーク分割方法は802.1Q、Open vSwitch、ebtables、等
リソースTemplate • ある仮想マシンが使用するリソースをまとめたもの • Image、Virtual Network、CPU数、メモリサイズ等 • スペックやOSなど、用途に応じて組み合わせて定義する
Virtual Machine • 仮想マシン
Image = Network = CPU =MEMORY =
:
Image = Network = CPU =MEMORY =
:
リソース(インフラ寄り)Host • 仮想マシンが立ち上がるホストマシン(物理マシン)
Cluster • Hostをカテゴライズしたもの • 必要に応じてDatastoreやVirtual Networkも関連付け可能 • 特定のグループに割り当てて占有させることも可能
リソースの組み合わせで環境構築
Image = Network = CPU =MEMORY =
:
Image = Network = CPU =MEMORY =
:
Frontend
Host
ClusterVM
Image
Datastore Network Template
リソースのパーミッション• UNIXのパーミッションに類似のモデル
• リソースの所有権(ユーザー、グループ)
• パーミッション
• OWNER / GROUP / OTHER に対し、
• USE(4) : 変更を伴わない操作の許可・不許可
• MANAGE(2) : 変更を伴う操作の許可・不許可
• ADMIN(1) : 管理用途の特殊な操作の許可・不許可
• (Cluster, Host は除く)
パーミッション変更• スーパーユーザー oneadmin は全リソースのパーミッションを変更可能
• グループリーダーは所属するグループのリソースのパーミッションを変更可能
• イメージ myimage を、
• 自分は USE(4)+MANAGE(2) を許可
• GROUP は USE(4) を許可
• OTHER は許可しない
$ oneimage chmod myimage 640
オーナー・グループ変更• スーパーユーザー oneadmin は全リソースのオーナー・グループを変更可能
• グループリーダーは所属するグループのリソースのオーナーを変更可能
• ネットワーク private1 のグループを yama に変更
$ onevnet chgrp private1 yama
• テンプレート ubuntu_tmpl をオーナー kokona に変更
$ onetemplate chown ubuntu_tmpl kokona
Datastore Type• ディスクイメージを格納するストレージ
• Image Datastore
• 原本となるディスクイメージを格納
• System Datastore
• 仮想マシンの起動元ディスクイメージを格納
• Files Datastore(省略)
Datastore drivers (DS_MAD)
• Image Datastoreは使用するストレージに応じて下記のドライバを選択
• File-system:スタンダードなファイル形式のディスクイメージを格納
• vmfs:vmfs形式のディスクイメージを格納(VMwareのみ)
• LVM:LVMのボリュームをディスクイメージとして使用する場合
• Ceph:Ceph(RBD)をディスクイメージの格納先に使用する場合
• Dev:既存のブロックデバイスを直接仮想マシンにアタッチする場合
• System Datastoreには不要
Transfer Manager drivers (TM_MAD)
• Datastore間のファイル移動方法(ドライバスクリプト)を選択
• Image Datastore、System Datastoreいずれにも必要なパラメータ
Transfer Manager drivers (TM_MAD)• 種類
• shared:共有ストレージによるファイル移動
• ssh:SSH(scp)によるファイル移動
• qcow2:共有ストレージによるファイル移動(qcow2に特化)
• vmfs:vmkfstoolsによるファイルコピー(VMware用)
• ceph:Image DatastoreにCephを使用する場合(RBDを使用)
• lvm:Image DatastoreにLVMを使用する場合(recommend)
• fs_lvm:Image DatastoreにLVMを使用する場合(classical)
• dev:Image DatastoreにDevを使用する場合
Type / DS_MAD / TM_MAD
TM_MAD shared ssh qcow2 vmfs ceph lvm fs_lvm dev
Type DS_MAD
System - OK OK OK
Image File-System OK OK OK OK
vmfs OK
Ceph OK
LVM OK
Dev OK
• Image DatastoreのDS_MAD/TM_MADとSystem DatastoreのTM_MADの組み合わせに注意
Image DS~System DS間のファイル移動
shared ssh
System DS
Image DS
Image DS
System DS
cpln -s
snapshotetc...
scp
persistent / non-persistent• ディスクイメージ毎に定義可能な属性
• 仮想マシンの起動元ディスクイメージの変更を保持する or しない
• persistent(保持する)
• 前回仮想マシンを破棄した時点のディスクイメージから再開
• 同時に1台のみ仮想マシンを作成可能
• non-persistent(保持しない)
• 毎回初期状態から仮想マシンを作成
• 同時に複数台の仮想マシンを作成可能
persistent / non-persistent
• persistentなディスクイメージ
• 生活環境用の仮想マシン
• non-persistentなディスクイメージ
• 負荷に応じてスケールするワーカーノード
• テスト用の仮想マシン
disk-snapshot• non-persistentなディスクイメージから起動した仮想マシンのディスクを保存する
• System DS上のディスクイメージをImage DSにコピー
• 新しいディスクイメージとしてImage DSに登録される
Virtual Network• OpenNebulaのネットワークリソース管理方法
• Virtual Networkは下記のパラメータで構成される
• 名前
• Hostのブリッジインタフェース名
• ネットワークモデル(使用するドライバスクリプト)
• アドレスレンジ(IPv4、IPv6、MAC(任意))
• ネットワークアドレス、ネットワークマスク(任意)
• デフォルトゲートウェイ、DNSサーバアドレス(任意)
Contextualization• onedから仮想マシンOSへのパラメータ提供方法
• 仮想マシンに利用者のSSH公開鍵をコピー
• 組織内で稼働中のNTPサーバのアドレスを通知
• 等々
• 任意の情報を仮想マシンOSに提供できる
http://docs.opennebula.org/4.10/_images/contextualization.png
SSH公開鍵の受け渡し(1)• ユーザの属性情報を編集
$ oneuser update aoi
SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCa+81ye2rVpqtqYXWZ+3Jo66venKGSssB+r90b+(略)"
• エディタが立ち上がるので、SSH_PUBLIC_KEY="公開鍵" を記述する
SSH公開鍵の受け渡し(2)•テンプレートを編集
$ onetemplate update u1404tmpl
CONTEXT=[ SSH_PUBLIC_KEY="$USER[SSH_PUBLIC_KEY]" ]
•エディタが立ち上がるので、CONTEXT節にSSH_PUBLIC_KEY="$USER[SSH_PUBLIC_KEY]" と記述する
1. テンプレートのCONTEXT節で指定された値をシェル変数形式でファイルに出力
2. ファイルをISOイメージに固めてディスクイメージと一緒にデプロイ
SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAADQABAAABAQCa+..."
oned側
CONTEXT = Image =
: (1)
(2)
• OS起動時にISOイメージをマウント
• ファイルに書かれたシェル変数SSH_PUBLIC_KEYを処理
仮想マシン側SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAADQABAAABAQCa+..."
• ディスクイメージに事前にCONTEXTを処理するスクリプトをインストールしておく
• OpenNebula.orgはCONTEXTスクリプトパッケージも用意
• Ubuntu/Debian用
• RHEL系5/6/7用
• OpenSUSE用
• Cloud-InitはOpenNebula CONTEXTにも対応
• CONTEXTスクリプトの代わりにCloud-Initで処理することも可能
CONTEXTスクリプト
• OpenNebulaのデフォルトのIPアドレス管理、割り当て方法
• oned
• 仮想マシンに割り当てるIPアドレスを16進変換
• プレフィックス 02:00: の後ろに16進変換したIPアドレスを付加して仮想マシン用のMACアドレスを作成
• IPアドレス 192.168.1.154 ←→ MACアドレス 02:00:c0:a8:01:9a
• libvirt XMLドメインファイル <mac address='02:00:c0:a8:01:9a'/>
• 仮想マシン
• MACアドレスの下4オクテットを10進変換してIPアドレスに設定
• CONTEXTスクリプトが処理
MAC_PREFFIX:IP rule
OneFlow• 複数の仮想マシンをグループ化、階層化して管理可能
• 仮想マシン間の依存関係を定義可能
• NFSサーバーVM起動 → NFSクライアントVM起動
• DBバックエンドVM起動 → ワーカーVM起動
• を1コマンドで実行
• オートスケーリング
Marketplace• OpenNebula.systemsで運営されているサイト
• http://marketplace.opennebula.systems/appliance
• OpenNebula環境で利用できる各種ディスクイメージのカタログを公開
• Ubuntu、Debian、CentOS、ttylinux等
• KVM、Xen、VMware等
• CONTEXTスクリプトはインストール済み
• Marketplaceから直接Datastoreにディスクイメージを登録可能
• 同様のサイトをローカルに立てることも可能(AppMarket)
OpenNebula使用感• ストレージ
• 物理マシンのローカルストレージが普通に使える
• SSDを積んだマシンを活用したい
• SPOFを減らしたい
• ローカルストレージの場合でもマイグレーション可能
• 1台のonedで起動元ストレージの共有・ローカル混在が可能
OpenNebula使用感• CLI/Web UI
• リソースの割り当て状況が把握しやすい
• どの仮想マシンがどのホストで稼働しているか
• どのIPアドレスがどの仮想マシンに割り当てられているか
• レンジ指定でまとめて操作可能
• 仮想マシンを16台作成したい/削除したい
• ホストを16台まとめてdisableにしたい
OpenNebula使用感• 仮想マシンが稼働中の状態でホストをdisableにセットできる
• 仮想マシンはホストがdisableでも操作できる
1. 停止予定のホストをdisableにし、新規デプロイ対象から除外
2. disableホスト上で稼働中の仮想マシンを他のホストにマイグレート
3. disableホストの電源を落としてメンテナンス
• というオペレーションが可能
OpenNebula使用感• ちゃんと動く
• 致命的な不具合に遭遇することが比較的少ない
• よく分からない不具合に遭遇することが比較的少ない
• コードを追いかけてデバッグすることが比較的少ない
• 不具合対応に時間を割かなくて済む