OpenStack Compute
IWAMOTO Toshihiro
OSS Technology Section II
OSS Platform Technology Center
Business Strategy GroupSCSK※本文中の会社名、商品名は、各社の商標および登録商標です。

OpenStackについて●

Rackspace Hosting社と NASA により2010年に設立された●

Community based な開発●

Apache 2.0 ライセンス●“Essex” が2012年4月にリリースされた– 次は “Folsom”– その次は “Grizzly”

Cloud Computingって(いろんな人が定義をしてると思いますが)●

Web-ベース GUI から仮想マシンを(いつでも、任意の数だけ)起動できる●

仮想マシンの不揮発ストレージ●

対障害性RegionやAvailability Zoneの概念●

便利機能(DB, firewall,固定IPアドレス、モニタリン
グ、auto scaling, ...)

OpenStack Computeとは●クラウド構築用ソフトウェア●

Amazon EC2 互換APIあり●

マルチテナント●

複数ハイパバイザ対応
–

●

設計の特徴
–

●

KVM, LXC, QEMU, UML, VMWare, Xen

Component based, Highly available, Fault-Tolerant

Nova はプロジェクト名

OpenStack関連製品●

Rackspace Open Cloud
public, private, hybrid●

HP Cloud
フリートライアル (http://hpcloud.com/)●

SuSE Cloud (private cloud)●Piston Enterprise OpenStack (private cloud)/●

Airframe (無償版)

OpenStack Computeの構成

OpenStack のプロジェクト●

Object Storage (Swift)●

Compute (Nova)●

Image Service (Glance)●

Dashboard (Horizon)●

Identity (Keystone)●

Quantum●

Melange●

詳しくは後程...

OpenStackプロジェクトの開発スタイル(1)●

Launchpad.net– Blueprint (開発する機能の管理)– バグ管理●ソースコードはGithub– 昔は bzr だった●“Design Summit”– 次のリリースでの機能の議論– http://wiki.openstack.org/Summit

OpenStackプロジェクトの開発スタイル(2)●

Gerrit (code review system)●

Jenkins (continuous integration)– Gerrit に patch set が追加される度に Jenkins から

unit test が実行される●

Tempest●

メイリングリストがあるが実際にはIRCで物事が決定されているらしいドメイン別commiter数
Nova
59 @gmail.com
32 @rackspace.com
15 @hp.com
11 @citrix.com
8 @redhat.com
8 @intel.com
7 @griddynamics.com
6 @openstack.org
6 @isi.edu
5 @ubuntu.com
5 @pistoncloud.com
5 @lab.ntt.co.jp
5 @canonical.com

Glance17 @rackspace.com
16 @gmail.com
6 @hp.com
6 @redhat.com
3 @suse.de
3 @griddynamics.com
3 @canonical.com

Quantum
20 @gmail.com
8 @cisco.com
7 @nicira.com
4 @thoughtworks.com
3 @internap.com

gerritgerritgerrit開発動向●

Essexの新機能– 共通認証モジュール Keystone– Horizon 初リリース●

次期リリース(Folsom)では– Quantumが “core”に。V2 API– Glance V2 API– Nova-volume が Cinder に– no-db-messaging

今日話す内容●

OpenStackの概要●

devstackを使った動作例●

OpenStack Computeを構成するプロセスの説明●

プロセス間の処理の流れ– VM起動

●ネットワークについて

devstackを用いた環境構築●

とりあえず動かすにはこれを使うべき(構成要素が多すぎるので手でやるとたいへん)●

http://devstack.org●

必要なものをまとめてインストールして Compute
各サービスを起動してくれる– 設定ファイルも作成してくれるdevstackを用いた環境構築(2)1. 1台マシン(KVMを使用するため、vt機能は必要)を用意し、ubuntu 12.04をクリーンインス
トール
2. $ sudo apt-get install git
3. $ git clone git://github.com/openstack-dev/devstack.git
4. $ cd devstack
5. $ git checkout stable/essex
6. $ ./stack.sh●(大雑把に言って) *api という名前のものはHTTPを受信し、それ以外はAMQP で通信–

AMQP == Advanced Message Queuing Protocol

devstackを用いた環境構築(3)●

実行するとこうなる$ ps x|grep -v bash¥$
PID TTY
STAT TIME COMMAND
27213 ?
S
0:00 sshd: stack@pts/0
28470 ?
Sl
0:00 /usr/sbin/apache2 -k start
28471 ?
Sl
0:00 /usr/sbin/apache2 -k start
28473 ?
Sl
0:00 /usr/sbin/apache2 -k start
29355 pts/2 S+
0:00 python bin/glance-registry --config-file=/etc/glance/glance-registry.conf
29458 pts/4 S+
0:00 python bin/glance-api --config-file=/etc/glance/glance-api.conf
29630 pts/5 S+
0:01 python /opt/stack-gh/keystone/bin/keystone-all --config-file /etc/keystone/keystone.conf --log-config /etc/keystone/logging.conf -d --debug
29889 pts/6 S+
0:00 python /opt/stack-gh/nova/bin/nova-api
30029 pts/7 S+
0:00 python /opt/stack-gh/nova/bin/nova-compute30146 pts/8 S+
0:00 python /opt/stack-gh/nova/bin/nova-cert30273 pts/9 S+
0:00 python /opt/stack-gh/nova/bin/nova-volume
30385 pts/10 S+
0:00 python /opt/stack-gh/nova/bin/nova-network
30527 pts/11 S+
0:00 python /opt/stack-gh/nova/bin/nova-scheduler
30633 pts/12 S+
0:00 python ./utils/nova-novncproxy --config-file /etc/nova/nova.conf --web .
30734 pts/13 S+
0:00 python ./bin/nova-xvpvncproxy --config-file /etc/nova/nova.conf
30836 pts/14 S+
0:00 python ./bin/nova-consoleauth
31039 pts/16 S+
0:00 python /opt/stack-gh/nova/bin/nova-objectstore●(大雑把に言って) *api という名前のものはHTTPを受信し、それ以外はAMQP で通信–

AMQP == Advanced Message Queuing Protocol

devstackを用いた環境構築(4)●

コード規模 (pythonのみの行数)

stack@iwamotonova:/opt/stack-gh$ for d in *; do echo -n $d; find $d -name ¥*.py |xargs wc -l|tail -1; done
glance35351 total
horizon20921 total
keystone
16105 totalmelange
15406 total
nova
149938 total
noVNC
1451 total
python-glanceclient1896 total
python-keystoneclient
4917 total
python-novaclient
9431 total
stack@iwamotonova:/opt/stack-gh$ for d in *; do echo -n $d; find $d -name ¥*.py -path ¥*tests¥*|xargs wc -l|tail -1; done
glance19709 total
horizon6048 total
keystone4631 totalmelange
7940 total
nova
60944 total
python-glanceclient
422 total
python-keystoneclient
2118 total
python-novaclient
3165 total

使ってみる(1)●Web browser で port 80に接続する。接続先はdashboard(horizon)

使ってみる(2)使ってみる(3)使ってみる(4)●

VMを起動する (devstackが起動イメージを用意してくれている)使ってみる(5)使ってみる(6)●VNC console でVMにログイン使ってみる(7)●

この他にも以下の操作などが可能– VMの停止– nova volume の作成、削除、スナップショット作成●

起動イメージ– http://docs.openstack.org/trunk/openstack-compute/admin/content/starting-images.html●

ネットワーク作成はGUIからはできない

使ってみる(8)●Horizonから使える機能は全体の一部●

devstack/exercises/
用例ありにクライアントコマンドの使– クライアントコマンドはpython– Jsonボディを組みたててHTTP

RESTリクエストを送信するもの●

euca2ools も使える(上のスクリプトでも使用)●試してみてください何が起きたか(1)●

ユーザがブラウザで Horizon にコマンドを送信●

Webアプリ(horizon)は– 受け取ったコマンドをもとにnova-apiにコマンドを送信– VMの状態などをユーザに返す– django で書かれている

何が起きたか(2)●nova-apiは nova-scheduler に●nova-scheduler は nova-compute に– 複数台構成のときはここで適当なものが選ばれる– 起動時に実装が選べる●

SimpleScheduler●

ChanceScheduler●

FilterScheduler (devstack の default)●

MultiScheduler (default)

何が起きたか(3)●Nova-computeは…
– AMQPから起動命令を受信– DatabaseからVMの情報を取得– Image serviceから起動イメージを取得– ネットワーク作成– VM起動●libvirt.xml の作成など– DatabaseのVMの状態をACTIVEに更新

OpenStack Computeの構成(再掲)Database のtable一覧(nova)
agent_builds
aggregate_hosts
aggregate_metadata
aggregates
auth_tokens
block_device_mapping
bw_usage_cache
cells
certificatescompute_nodes
console_poolsconsoles
dns_domains
fixed_ips
floating_ips
instance_actions
instance_faults
instance_info_caches
instance_metadata
instance_type_extra_specs
instance_types
instancesiscsi_targets

volume_metadata
key_pairs
volume_type_extra_specs
migrate_version
volume_types
migrations
volumes
networks
projects
provider_fw_rules
quotass3_images
security_group_instance_association
security_group_rules
security_groups
services
sm_backend_config
sm_flavors
sm_volumesnapshots
user_project_association
user_project_role_association
user_role_association
users
virtual_interfaces
virtual_storage_arrays

何が起きたか(4)●VM起動コマンドPOST /v2/2f3e7954849c4208b63e50a75be85d42/servers HTTP/1.1
Host: 172.17.88.20:8774
Content-Length: 173
x-auth-project-id: 2f3e7954849c4208b63e50a75be85d42
accept-encoding: gzip, deflate
accept: application/json
x-auth-token: 7fa84cde93a54529a71a14a410bb34e2
user-agent: python-novaclient
content-type: application/json{"server": {"name": "hoge2", "imageRef": "675e2b20-5754-4e6d-a8c0-a4fec4a1ce5a", "flavorRef": "1", "max_count": 1, "min_count": 1, "security_groups": [{"name": "default"}]}}HTTP/1.1 202 Accepted
X-Compute-Request-Id: req-422b02dd-bf82-4ed0-a98e-53cceb9c1c2f
Location: http://172.17.88.20:8774/v2/2f3e7954849c4208b63e50a75be85d42/servers/18a84742-c222-4e9b-bfb4-ac946f4d06b3
Content-Type: application/json
Content-Length: 398
Date: Fri, 29 Jun 2012 08:43:11 GMT{"server": {"OS-DCF:diskConfig": "MANUAL", "id": "18a84742-c222-4e9b-bfb4-ac946f4d06b3", "links": [{"href": "http://172.17.88.20:8774/v2/2f3e7954849c4208b63e50a75be85d42/servers/18a84742-c222-4e9b-bfb4-ac946f4d06b3", "rel": "self"}, {"href": "http://172.17.88.20:8774/2f3e7954849c4208b63e50a75be85d42/servers/18a84742-c222-4e9b-bfb4-ac946
f4d06b3", "rel": "bookmark"}], "adminPass": "27FP9peAsxuS"}}何が起きたか(5)●ネットワークはnova-networkが担当– FLAGS.network_manager で実装が選べる
cfg.StrOpt('network_manager',default='nova.network.manager.VlanManager',help='full class name for the Manager for network'),class ComputeManager(manager.SchedulerDependentManager):"""Manages the running instances from creation to destruction."""def __init__(self, compute_driver=None, *args, **kwargs):"""Load configuration options and connect to the hypervisor."""...
self.network_manager = utils.import_object(FLAGS.network_manager)

文字列からクラスが初期化される

何が起きたか(5)●ネットワークはnova-networkが担当– FLAGS.network_manager で実装が選べる
cfg.StrOpt('network_manager',default='nova.network.manager.VlanManager',help='full class name for the Manager for network'),class ComputeManager(manager.SchedulerDependentManager):"""Manages the running instances from creation to destruction."""def __init__(self, compute_driver=None, *args, **kwargs):"""Load configuration options and connect to the hypervisor."""...
self.network_manager = utils.import_object(FLAGS.network_manager)

文字列からクラスが初期化される

何が起きたか(6)●devstack 起動時にアドレス領域の作成# create a small network$NOVA_DIR/bin/nova-manage network create private 10.0.0.0/24 1 256●

仮想インターフェイスの作成– IP, MAC address の払い出し– bridgeに接続– DHCP でIPアドレスをVMに配布– iptables NATルールの作成

ネットワークについて(1)●

ネットワークは大変– 資源管理(IP, MAC address)– 仮想インターフェイスの作成削除– 仮想NICの配線●

プライベートネットワーク、テナント間の分離●

複数台ホストがあるとき– ファイアウォール– QoS

ネットワークについて(2)例1nova-computenova-compute

VM

VM

VM

VM

ネットワークについて(3)例2nova-compute

VM

VM

nova-compute

VM

VM

nova-compute

VM

VM

nova-compute

VM

VMネットワークについて(4)●network_manager は以下の実装がある– FlatManager– FlatDHCPManager (devstack のdefault)– VlanManager (default)

VLAN IDによるテナント間分離あり
cloudpipe (openvpnでプライベートネットワークにアクセス可能)– QuantumManager

novaと別プロジェクトなので分離するため

Quantum(1)●プラグイン構成で拡張性を持たせた– Open vSwitch Plugin– Cisco UCS/Nexus Plugin– Linux Bridge Plugin– Nicira Network Virtualization Platform (NVP)Plugin– Ryu OpenFlow Controller Plugin●

複数のプライベートネットワーク●

L2-over-L3 など

Quantum(2)●devstackで openvswitch pluginが使える– Nova側にQuantumManager– 各 nova-compute ホストに quantum-agent

●

次期API

●

http://wiki.openstack.org/QuantumV2APIIntroQuantum in Essexnova-network経由でQuantumが使われる

Quantum in Folsom●

nova-networkはなくなった●

Quantum APIはv2●

IPアドレス管理追加(melangeは不要)

nova-volumes(1)●

普通にVMを起動するとdiskは揮発性(VMを終了
するとなくなる)– 実体は nova-compute の動くホストのlocal storage●

Nova-volumesを使うと永続的なdisk(volume)を作れる– volumeから起動もできるnova-volumes(2)●実体は nova-volumes が動作するホスト上のLinux LVM上の論理ボリューム– iSCSI で nova-compute に見せている– ドライバを用意すれば iSCSI の箱も使える●

Snapshotとかとれる●

nova本体から分離することになった– http://wiki.openstack.org/Cinder

まとめ●

Openstackの開発手法(ツール)– 開発動向

●Openstack Computeの大まかな構成●

VM起動時の処理の流れ●

ネットワークの処理・課題●

Nova-volumes

コマンド一覧(1)usage: nova [--debug] [--os_username OS_USERNAME] [--os_password OS_PASSWORD][--os_tenant_name OS_TENANT_NAME] [--os_auth_url OS_AUTH_URL][--os_region_name OS_REGION_NAME] [--service_type SERVICE_TYPE][--service_name SERVICE_NAME] [--endpoint_type ENDPOINT_TYPE][--os_compute_api_version OS_COMPUTE_API_VERSION][--username USERNAME] [--region_name REGION_NAME][--apikey APIKEY] [--projectid PROJECTID] [--url URL]
<subcommand> ...
Command-line interface to the OpenStack Nova API.
Positional arguments:<subcommand>
absolute-limits
Print a list of absolute limits for a user
actions
Retrieve server actions.
add-fixed-ip
Add new IP address to network.
add-floating-ip
Add a floating IP address to a server.
aggregate-add-host Add the host to the specified aggregate.
aggregate-create
Create a new aggregate with the specified details.
aggregate-delete
Delete the aggregate by its id.
aggregate-details Show details of the specified aggregate.
aggregate-list
Print a list of all aggregates.
aggregate-remove-hostRemove the specified host from the specfied aggregate.
aggregate-set-metadata
Update the metadata associated with the aggregate.
aggregate-update
Update the aggregate's name and optionallyavailability zone.

コマンド一覧(2).
bootBoot a new server.
cloudpipe-create
Create a cloudpipe instance for the given project
cloudpipe-list
Print a list of all cloudpipe instances.
console-log
Get console log output of a server.
credentials
Show user credentials returned from authdeleteImmediately shut down and delete a server.
describe-resource Show details about a resource
diagnostics
Retrieve server diagnostics.
dns-create
Create a DNS entry for domain, name and ip.
dns-create-private-domain
Create the specified DNS domain.
dns-create-public-domain
Create the specified DNS domain.
dns-delete
Delete the specified DNS entry.
dns-delete-domain Delete the specified DNS domain.
dns-domains
Print a list of available dns domains.
dns-list
List current DNS entries for domain and ip or domain
and name.
endpoints
Discover endpoints that get returned from theauthenticate services
flavor-create
Create a new flavor
flavor-delete
Delete a specific flavor
flavor-list
Print a list of available 'flavors' (sizes ofservers).
floating-ip-create Allocate a floating IP for the current tenant.
floating-ip-delete De-allocate a floating IP.
floating-ip-list
List floating ips for this tenant.
floating-ip-pool-list
List all floating ip pools.
get-vnc-console
Get a vnc console to a server.
host-action
Perform a power action on a host.

コマンド一覧(3)host-update
image-create

Update host settings.
Create a new image by taking a snapshot of a runningserver.
image-delete
Delete an image.
image-list
Print a list of available images to boot from.
image-meta
Set or Delete metadata on an image.
image-show
Show details about the given image.
keypair-add
Create a new key pair for use with instances
keypair-delete
Delete keypair by its id
keypair-list
Print a list of keypairs for a user
list
List active servers.
live-migration
Migrates a running instance to a new machine.
lock
Lock a server.
meta
Set or Delete metadata on a server.
migrateMigrate a server.
pause
Pause a server.
quota-class-show
List the quotas for a quota class.
quota-class-update Update the quotas for a quota class.
quota-defaults
List the default quotas for a tenant.
quota-show
List the quotas for a tenant.
quota-update
Update the quotas for a tenant.
rate-limits
Print a list of rate limits for a user
rebootReboot a server.
rebuild
Shutdown, re-image, and re-boot a server.
remove-fixed-ip
Remove an IP address from a server.
remove-floating-ip Remove a floating IP address from a server.
renameRename a server.
rescueRescue a server.
resizeResize a server.
resize-confirm
Confirm a previous resize.
resize-revert
Revert a previous resize (and return to the previous
VM).

コマンド一覧(4)resumeResume a server.
root-password
Change the root password for a server.
secgroup-add-group-rule
Add a source group rule to a security group.
secgroup-add-rule Add a rule to a security group.
secgroup-create
Create a security group.
secgroup-delete
Delete a security group.
secgroup-delete-group-rule
Delete a source group rule from a security group.
secgroup-delete-rule
Delete a rule from a security group.
secgroup-list
List security groups for the current tenant.
secgroup-list-rules
List rules for a security group.
show
Show details about the given server.
ssh
SSH into a server.
suspend
Suspend a server.
unlockUnlock a server.
unpauseUnpause a server.
unrescue
Unrescue a server.
usage-list
List usage data for all tenantsコマンド一覧(5)volume-attach
Attach a volume to a server.
volume-create
Add a new volume.
volume-delete
Remove a volume.
volume-detach
Detach a volume from a server.
volume-list
List all the volumes.
volume-show
Show details about a volume.
volume-snapshot-create
Add a new snapshot.
volume-snapshot-delete
Remove a snapshot.
volume-snapshot-list
List all the snapshots.
volume-snapshot-show
Show details about a snapshot.
volume-type-create Create a new volume type.
volume-type-delete Delete a specific flavor
volume-type-list
Print a list of available 'volume types'.
x509-create-cert
Create x509 cert for a user in tenant
x509-get-root-cert Fetches the x509 root cert.
bash-completion
Prints all of the commands and options to stdout sothat thehelp
Display help about this program or one of its
subcommands.