opennebula on ubuntu

57
UbuntuとOpenNebulaで クラウド環境を構築してみよう (発動篇) 2014/12/13

Upload: autumnalsky

Post on 17-Jul-2015

504 views

Category:

Software


3 download

TRANSCRIPT

UbuntuとOpenNebulaで クラウド環境を構築してみよう

(発動篇)

2014/12/13

自己紹介• 名前:大田 晃彦(Akihiko Ota)

• 所属:株式会社 創夢

• 初めてちゃんとさわったUbuntu:8.04

Ubuntuでクラウドと言えば

• OpenStackが有名ですよね。

• でもOpenNebulaって選択肢もあるんですよ。

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

構成

http://docs.opennebula.org/4.10/_images/overview_integrators.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

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

マイグレーションshared ssh

migrate save -> 転送 -> restore

転送

save

restore

System DS

System DS

System DS

Image

persistent / non-persistent• ディスクイメージ毎に定義可能な属性

• 仮想マシンの起動元ディスクイメージの変更を保持する or しない

• persistent(保持する) 

• 前回仮想マシンを破棄した時点のディスクイメージから再開

• 同時に1台のみ仮想マシンを作成可能

• non-persistent(保持しない)

• 毎回初期状態から仮想マシンを作成

• 同時に複数台の仮想マシンを作成可能

persistent / non-persistent

• persistentなディスクイメージ

• 生活環境用の仮想マシン

• non-persistentなディスクイメージ

• 負荷に応じてスケールするワーカーノード

• テスト用の仮想マシン

disk-snapshot• non-persistentなディスクイメージから起動した仮想マシンのディスクを保存する

• System DS上のディスクイメージをImage DSにコピー

• 新しいディスクイメージとしてImage DSに登録される

Network

Virtual Network• OpenNebulaのネットワークリソース管理方法

• Virtual Networkは下記のパラメータで構成される

• 名前

• Hostのブリッジインタフェース名

• ネットワークモデル(使用するドライバスクリプト)

• アドレスレンジ(IPv4、IPv6、MAC(任意))

• ネットワークアドレス、ネットワークマスク(任意)

• デフォルトゲートウェイ、DNSサーバアドレス(任意)

ネットワークモデル• dummy (何もしない)

• iptables

• ebtables

• 802.1Q

• Open vSwitch

• VMware (VMware環境専用)

CONTEXT

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使用感

OpenNebula使用感• ストレージ

• 物理マシンのローカルストレージが普通に使える

• SSDを積んだマシンを活用したい

• SPOFを減らしたい

• ローカルストレージの場合でもマイグレーション可能

• 1台のonedで起動元ストレージの共有・ローカル混在が可能

OpenNebula使用感

• ディスクイメージ

• ハイパーバイザがKVMの場合でもraw形式とqcow2形式のどちらも利用可能

• 外で作成したディスクイメージを持ち込みやすい

OpenNebula使用感• CLI/Web UI

• リソースの割り当て状況が把握しやすい

• どの仮想マシンがどのホストで稼働しているか

• どのIPアドレスがどの仮想マシンに割り当てられているか

• レンジ指定でまとめて操作可能

• 仮想マシンを16台作成したい/削除したい

• ホストを16台まとめてdisableにしたい

OpenNebula使用感• 仮想マシンが稼働中の状態でホストをdisableにセットできる

• 仮想マシンはホストがdisableでも操作できる

1. 停止予定のホストをdisableにし、新規デプロイ対象から除外

2. disableホスト上で稼働中の仮想マシンを他のホストにマイグレート

3. disableホストの電源を落としてメンテナンス

• というオペレーションが可能

OpenNebula使用感• ログ出力

• 適度なサイズで充分な内容

• syslog 経由で出力可能

• onevm show, onehost show などでエラーが確認できる

OpenNebula使用感• シンプル

• 環境全体の見通しがよく、把握しやすい

• 学習コストが少ない

OpenNebula使用感• ちゃんと動く

• 致命的な不具合に遭遇することが比較的少ない

• よく分からない不具合に遭遇することが比較的少ない

• コードを追いかけてデバッグすることが比較的少ない

• 不具合対応に時間を割かなくて済む

OpenNebula使用感

• アップデートパスがきちんと用意されている

• 環境を保持しつつ簡単にメジャーアップグレード可能