1
OpenStackをさらに”使う”技術
Docker/Ansible編
パート1 概要と基本操作
@irix_jp
openstackOpen source software to build public and private clouds.
Table of Contents
 講義
 OpenStackが注目される背景
 全体概要
 利用方法と自動化を支援する機能
 自動化の重要性
 演習
 踏み台サーバーの作成
 画面の確認と操作方法
 リソースの作成(ネットワーク、ボリューム)
 UserdataとMetadataを使った自動化
 後片付け
2
講義
 OpenStackが注目される背景
 全体概要
 利用方法と自動化を支援する機能
 自動化の重要性
3
OpenStackが注目される背景
4
OpenStackが注目される背景
 世界、国内において年々OpenStackへの注目度が増加
 合わせて市場規模も拡大傾向
5
2010
2014
2015 Spring Vancouver 6000
2015 Autumn Tokyo 5000
2016 Spring Austin
2016 Autumn Barcelona
Attendees of OpenStack Summit
IDC Japan 株式会社「国内OpenStackエコシステム市場予測」2015年10月26日
http://www.idcjapan.co.jp/Press/Current/20151026Apr.html
IT市場の変遷
 現在はオープンシステムからクラウドシステムへの移行時期
 システムの作り方、考え方が大きく変わるタイミング
6
Main Frame
1970~
Open System
1990~
Cloud
2010~
a few billion yen
7 to 10 years
1 year
a few million yen
3 to 5 years
a few months
a few hundred
yen
a few hour
a few minutes
Unit Price of
Resources
Depreciation
Term
Time to
Prepare
変革を誘発した原因
 コモディティ化の進行による価値観の変化
7
UnitPriceofITResources
Passage of Time
One of the Price Point
Point of Changing Business Model
Before the Cloud After the Cloud
Singularity
Good/Cheap/Fast から Fast/Fast/Fastへ
 OpenStack Sumit 2014
 Walt Disney Company
 社内ITインフラとしてOpenStackを導入
 コンシューマー向けITサービスと同じスピード感で
 社内ITサービスを提供
8
https://www.youtube.com/watch?v=SREEnNQ6zqg
Before
After
システムアーキテクチャのパラダムシフト
9
http://www.slideshare.net/gmccance/cern-data-centre-evolution
全体概要
10
OpenStackとは?
 OSSで開発されるCloudOS
 様々なITリソースを抽象化し、標準的な操作手法を提供
11
http://www.openstack.org/software/
OpenStackの特徴
 様々なITリソースを抽象化して、標準的な操作APIを提供
 演算リソース、データ格納リソース、ネットワーキングリソースを中心にそ
の周辺リソースを対象範囲とする。
 マイクロコントローラー構造
 機能単位でコンポーネントが分離しており、それぞれ独立動作する。
 プラグイン・ドライバ構造
 各コンポーネントは、制御対象に合わせてプラグイン、ドライバ構造を採
用しており、制御対象に合わせて組み合わせ可能
 ほぼ100% Pyhton 実装
 一部の機能(ダッシュボード等)にJS等の別言語が利用されています
が、基本的には全てPythonによって実装されています。
12
マイクロコントローラー構造
 本講義では、赤線部分のIaaS機能にフォーカスします。
13
Nova Glance Cinder SwiftNeutron
仮想ネットワーク制御
ハイパーバイ
ザー制御
イメージ
SnapShot管理
ブロック
ストレージ制御
オブジェクト
ストレージ
VPNaaS
L3
L2/LBaaS
FWaaS
Heat オーケストレーションTrove DBaaS
Ceilometer 統計情報の収集・アラート発信 Keystone 認証・認可
Sahara DPaaS
Ironic
ベアメタル
プロビジョニング
プラグイン・ドライバ構造
14
OpenStack
(novaの例)
KVM用
ドライバ
Xen用
ドライバ
商用製品用
ドライバ
KVMサーバ Xenサーバ
VMwareサーバ
Hyper-Vサーバ
OpenStack API
Amazon互換API
ユーザやプログラムは、
OpenStackの利用方法だけを
知っていれば環境の操作が可能
コンテナ用
ドライバ
LXC
Docker
ユーザーのプラグイン・ドライバの選択傾向
15
2015 Oct User Survey
http://www.openstack.org/assets/survey/Public-User-Survey-Report.pdf
利用方法と自動化を支援する
機能
16
OpenStackの操作方法
 OpenStackでは以下の3つの操作方法が提供されています。
 Dashboard(Horizon)
 最も簡単で直感的。ただし一部複雑な操作はできない
 コマンドライン
 最も一般的で利便性が高い。ほぼ全ての操作が可能。ただし高度な自動化には限界があ
る。
 REST API
 最も柔軟性があり全ての操作が可能。他のプログラムから連携することが前提で、高度な
自動化を実現したい場合に利用する。
 これらの関係は以下の通り。
 どの操作方法も、最終的にはREST APIをコールしている。
17
openstack
openstack clent library
CLI Dashboard Other Programs/Tools Direct Call
REST API
REST API REST API
Dashboard(Horizon)
 コンポーネントの一つであるHorizonが提供する、Webのダッ
シュボードです。
 簡易的な操作が一通り行えますが、複雑な作業はできません。
 主に、コマンドラインやREST APIを利用して作成した環境の
確認に利用します。
18
コマンドライン
 OpenStackのコンポーネントに対応したコマンドです。代表的なコマンドは以下です。
 nova
 neutron
 glance
 cinder
 keystone
 swift
 これらのコマンドはPythonのクライアントライブラリを含んでおり、導入するとこのライブ
ラリも利用可能になります。
19
$ nova list
(見やすいように整形しています)
+--------------------------------------+------------------+--------+------------+-------------+-----------------------------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+------------------+--------+------------+-------------+-----------------------------------------------+
| 5173dd67-abd0-41b5-b41f-ff89ed7e3311 | console | ACTIVE | - | Running | work-net=192.168.100.4, 157.1.141.210 |
| 75c6d969-fbb0-4082-a56c-f0532339d9ef | openstack-single | ACTIVE | - | Running | floating-net=172.16.100.100, |
| | | | | | 172.16.100.101, 172.16.100.102, |
| | | | | | 172.16.100.103, 172.16.100.104; |
| | | | | | work-net=192.168.100.10 |
+--------------------------------------+------------------+--------+------------+-------------+-----------------------------------------------+
$ neutron net-list
+--------------------------------------+--------------+-------------------------------------------------------+
| id | name | subnets |
+--------------------------------------+--------------+-------------------------------------------------------+
| fc8869b7-aca1-4e06-84c0-94a831374753 | floating-net | 722ba04e-66db-4035-9da2-44b3edf95209 172.16.100.0/24 |
| 359235e4-7090-40f5-93dc-be105041d46a | work-net | a01624a3-c340-475b-b124-006fdc30bd11 192.168.100.0/24 |
| 63c67570-ba92-463a-b34c-2b9c1fff628c | public | a2f49fe1-ac9b-4189-86da-2ef24328a883 |
+--------------------------------------+--------------+-------------------------------------------------------+
REST API
 OpenStackが提供する最も基本の機能です。
 それぞれのコンポーネントが独自のAPIサーバープロセスを持ち(nova-api, neutron-api
等)、そのプロセスへREST形式のアクセスを行うことで、操作を行います。
 以下は仮想マシンの一覧を取得する例です。
 実行するとJSON形式の応答が返ります。
20
$ curl -g -i -X GET http://157.1.141.7:8774/v2/243f55729ce9487e933c1608c6673f6b/servers/detail -H "User-Agent: python-novaclient" -H "Accept: application/json" -H "X-
Auth-Token: {SHA1}27c18d7e2b198f8b04eec2e8140f3e00d8c5931a"
{"servers": [{"status": "ACTIVE", "updated": "2015-11-18T06:33:08Z", "hostId": "a39630fb6d291f98e2ca123f727e816d4caaa6799d4eaa54f9079ced", "addresses": {"work-net":
[{"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:65:39:84", "version": 4, "addr": "192.168.100.10", "OS-EXT-IPS:type": "fixed"}], "floating-net": [{"OS-EXT-IPS-MAC:mac_addr":
"fa:16:3e:25:15:aa", "version": 4, "addr": "172.16.100.100", "OS-EXT-IPS:type": "fixed"}, {"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:25:15:aa", "version": 4, "addr":
"172.16.100.101", "OS-EXT-IPS:type": "fixed"}, {"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:25:15:aa", "version": 4, "addr": "172.16.100.102", "OS-EXT-IPS:type": "fixed"},
{"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:25:15:aa", "version": 4, "addr": "172.16.100.103", "OS-EXT-IPS:type": "fixed"}, {"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:25:15:aa",
"version": 4, "addr": "172.16.100.104", "OS-EXT-IPS:type": "fixed"}]}, "links": [{"href":
"http://157.1.141.7:8774/v2/243f55729ce9487e933c1608c6673f6b/servers/6bfdf459-0519-46e0-b690-e1357cc6e25b", "rel": "self"}, {"href":
"http://157.1.141.7:8774/243f55729ce9487e933c1608c6673f6b/servers/6bfdf459-0519-46e0-b690-e1357cc6e25b", "rel": "bookmark"}], "key_name": "my-key", "image": {"id":
"a3d7276a-5c77-4c05-9919-1d16106a6fde", "links": [{"href": "http://157.1.141.7:8774/243f55729ce9487e933c1608c6673f6b/images/a3d7276a-5c77-4c05-9919-1d16106a6fde",
"rel": "bookmark"}]}, "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2015-11-18T06:33:08.000000", "flavor": {"id": "4",
"links": [{"href": "http://157.1.141.7:8774/243f55729ce9487e933c1608c6673f6b/flavors/4", "rel": "bookmark"}]}, "id": "6bfdf459-0519-46e0-b690-e1357cc6e25b",
"security_groups": [{"name": "default"}, {"name": "default"}], "OS-SRV-USG:terminated_at": null, "OS-EXT-AZ:availability_zone": "nova", "user_id":
"335b60ff72424ab4b387ed001729d26d", "name": "openstack-single", "created": "2015-11-18T06:32:58Z", "tenant_id": "243f55729ce9487e933c1608c6673f6b", "OS-
DCF:diskConfig": "MANUAL", "os-extended-volumes:volumes_attached": [], "accessIPv4": "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive":
"", "metadata": {}}, {"status": "ACTIVE", "updated": "2015-11-16T16:57:25Z", "hostId": "3fa7ae0361a6f19fe2e1b22e0621191a7994e9ceed8c41d03a51dd50", "addresses": {"work-
net": [{"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:d5:a2:92", "version": 4, "addr": "192.168.100.4", "OS-EXT-IPS:type": "fixed"}, {"OS-EXT-IPS-MAC:mac_addr":
"fa:16:3e:d5:a2:92", "version": 4, "addr": "157.1.141.210", "OS-EXT-IPS:type": "floating"}]}, "links": [{"href":
"http://157.1.141.7:8774/v2/243f55729ce9487e933c1608c6673f6b/servers/5173dd67-abd0-41b5-b41f-ff89ed7e3311", "rel": "self"}, {"href":
"http://157.1.141.7:8774/243f55729ce9487e933c1608c6673f6b/servers/5173dd67-abd0-41b5-b41f-ff89ed7e3311", "rel": "bookmark"}], "key_name": "key-for-console", "image":
{"id": "818afbad-6f61-462f-aade-1482b0312f85", "links": [{"href": "http://157.1.141.7:8774/243f55729ce9487e933c1608c6673f6b/images/818afbad-6f61-462f-aade-
1482b0312f85", "rel": "bookmark"}]}, "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2015-11-16T16:57:25.000000", "flavor":
{"id": "2", "links": [{"href": "http://157.1.141.7:8774/243f55729ce9487e933c1608c6673f6b/flavors/2", "rel": "bookmark"}]}, "id": "5173dd67-abd0-41b5-b41f-ff89ed7e3311",
"security_groups": [{"name": "default"}], "OS-SRV-USG:terminated_at": null, "OS-EXT-AZ:availability_zone": "nova", "user_id": "335b60ff72424ab4b387ed001729d26d",
"name": "console", "created": "2015-11-16T16:56:41Z", "tenant_id": "243f55729ce9487e933c1608c6673f6b", "OS-DCF:diskConfig": "AUTO", "os-extended-
volumes:volumes_attached": [], "accessIPv4": "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "config_drive": "", "metadata": {"role": "console-
server"}}]}
OpenStackが提供する機能
 ユーザーはプロジェクト(テナント)に属します。
 ユーザーはプロジェクトに与えられたクォータ内で自由な環境を構築することができます。
 仮想マシン(もしくはベアメタルサーバー)
 仮想ネットワーク、仮想ルーター
 ブロックストレージ、バックアップ、スナップショット
 イメージ操作、バックアップ
 他のOpenStackプロジェクトを組み込むと更に多数の機能が利用可能になります。
21
プロジェクトA プロジェクトB
仮想ルーター
仮想ネットワーク
仮想サーバー
(or ベアメタルサーバー)
ブロックストレージ
外部ネットワーク
キーペア
 事前に作成したキーペアの公開鍵を、起動するインスタンスへ
設定する機能です。
 シンプルな機能ですが、自動化の実現とセキュリティを確保す
る上で極めて重要な機能になります。
 10台程度までは毎回ログインすることも可能かもしれませんが、100台、
200台となった場合には手動での作業はオーバーヘッドが大きくなりすぎ
てしまいます。
22
novaに登録された公開鍵を
インスタンス作成時に自動設定
ペアとなる秘密鍵を持つユーザ、もしくは
プログラムは、認証情報を知らなくてもログインして
各種操作が可能
userdata
 起動するインスタンスに対して、実行するスクリプトを与えることができます。
 既にここまでの演習でも利用しています。
 様々なスクリプトを準備しておくことで、起動時に共通の設定等を入れ込む事が可能に
なります。
 環境を作成しなおす場合にも、このスクリプトに設定項目を記述しておくことで、何度でも作りなおしが
可能です。
 設定できる形式は、従来のシェルスクリプト形式と、cloud-config形式が選択できます。
 同時に利用することもできます。その場合はMIMEのマルチパート形式で2つを結合したファイルを起
動時に与えます。
 与えたファイルは、後述するcloud-initから実行されます。
23
[fedora@console ~]$ nova boot --flavor m1.large --image "CentOS7-1509" ¥
--user-data userdata_pre_openstack.txt ¥
--key-name my-key --security-groups open_all ¥
--nic port-id=${PORTID1} --nic port-id=${PORTID2} openstack-single
#!/bin/bash
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/'
/etc/selinux/config
dnf update -y -q
LANG=C dnf groupinstall -y -q "LXDE Desktop"
LANG=C dnf groupinstall -y japanese-support
LANG=C dnf langinstall -y ja_JP
dnf install -y firefox vim
dnf install -y git
#cloud-config
password: password
chpasswd: { expire: False }
ssh_pwauth: True
cloud-config 形式はyaml形式で定義さ
れたコマンドとデータを記述していきます。
詳細についてに公式ドキュメントを参照ください。
https://cloudinit.readthedocs.org/en/latest/
metadata
 インスタンスに対して特定のデータを与えることが可能です。
 key=value形式でデータを与えます。
 インスタンス内部から http://169.254.169.254/ へアクセスすることでいつでもデータが参
照できます。
 典型的な使い方として、1台目にDBサーバーを起動して、2台目にAPサーバーを起動
する際に、APサーバーに対して接続先のDBサーバーIPを与える、といった利用方法が
あります。
 前述のuserdataと合わせるて、高度な自動化が可能となります。
 またuserdata自身もmetadataの一部として格納されています。
24
DBサーバーIP
APサーバーの設定
ファイル
DBサーバーIP
DBサーバーIP
APサーバーの設定
ファイル
DBサーバーIP
人が設定を確認 手動で設定 APIからIPを受け取る
metadataに
IPをセットして起動
DBサーバーIP
metadataサーバ
userdataの
スクリプトで値
を受け取って
設定
config-drive
 config-driveを利用すると、metadataサーバーに与えたデータをディスク経
由で受け取る事が可能です。
 ディスク領域としてOSにマウントされます。
 metadataはkey=valueのデータしか与えられませんが、config-driveには
ファイルを直接格納してインスタンスに渡すことも可能です。
 config-driveはインスタンス内でネットワーク設定で行われる前にデータ参
照が可能となるため、ネットワーク設定そのものを操作する場合に利用す
る事が可能です。
 その他、直接ファイルを渡せるため、スクリプトでファイルを生成するのが難
しい(数が多くて大変な)ケースでも利用できます。
25
metadataサーバ
config-drive
http://169.254.169.254
同じデータが参照可
能
ファイルを直接渡す
ことも可能。
cloud-init
 OpenStackの標準機能ではありませ
んが、クラウド上でインスタンスの各
種初期設定を行うためのデファクト
パッケージです。
 RH系Linuxや、Ubuntu、Windows等
で幅広く動作します。
 インスタンスが初回起動されたのか、
2回目の起動なのか?もしくは複製
された環境なのか、を判断してスクリ
プトの実行等を制御します。
 Metadataと連携して動作します。
 userdataの実行もcloud-initにより
実行されています。
 デフォルトの動作は、
/etc/cloud/cloud.cfgで定義されて
います。
26
users:
- default
disable_root: 1
ssh_pwauth: 0
mount_default_fields: [~, ~, 'auto',
'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys: 0
ssh_genkeytypes: ~
syslog_fix_perms: ~
cloud_init_modules:
- migrator
- bootcmd
- write-files
- growpart
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- rsyslog
- users-groups
- ssh
cloud_config_modules:
- mounts
- locale
- set-passwords
- yum-add-repo
~~~(省略)~~~
自動化の重要性
27
インフラコストと人件費
 インフラリソースの単価が下がり続ける事で、使用されるリソース量は増加の一途
 一方で、そのリソースを制御する人件費は、リソース量に比例して増加してしまう。
 自然な考え方として、「インフラの操作を自動化してコストを削減できないか?」という発
想が生まれ定着しつつある。
28
$ $ $
$ $
$
$
$
$
$
$
$
$
$
$ $
$ $
$
$
$
メインフレーム オープン クラウド
自動化のメリット
 自動化することで様々なメリットが得られます。
 特に繰り返しや品質の向上という人間では限界のある作業に対して、
効果を発揮します。
 自動化によって、従来はコスト的に難しかった事が実現可能になります。
 本番環境と同一な開発環境、テスト環境、検証環境
29
同じ作業の繰り返しでもコストが発生 1度自動化すれば同じ作業はコスト0
作業者の気分や状態に品質が依存する 何度繰り返しても同じ結果が得られる
作業ミスの再発防止が困難
(2重チェック?3重チェック??)
ミスの特定と対策が明確
変更履歴の管理が困難 変更履歴の管理が容易
自動化のデメリット
 一方で自動化のデメリットも存在しています。
 自動化の仕組みを作りこむ必要がある。
 単純な追加コストとして発生します。
 標準化されていない環境での自動化は高コスト。
 作りこみに手間がかかる
 再利用性が低い
30
自動化の作り
込みに必要なコ
スト
自動化によって
削減可能なコ
スト
自動化の作り
込みに必要なコ
スト
自動化によって
削減可能なコ
スト
自動化の作り
込みに必要なコ
スト
自動化によって
削減可能なコ
スト
自動化の効果が薄い
自動化の効果が高い
適用シーン
 より大規模に利用する。
31
業務A用
自動化
プログラム
業務B用
自動化
プログラム
業務C用
自動化
プログラム
業務A用
手順書
業務B用
手順書
業務C用
手順書
業務A 業務B 業務C 業務A 業務B 業務C
openstack
業務ABC共通
自動化
プログラム
業務A 業務B 業務C
openstack
手動作業 手動作業をそのまま自動化 標準化して自動化
適用シーン
 ライフサイクル全体に適用する。
32
開発用
自動化
プログラム
本番用
自動化
プログラム
運用用
自動化
プログラム
開発用
手順書
本番用
手順書
運用用
手順書
開発 本番 運用
openstack
開発本番運用共通
自動化
プログラム
openstack
手動作業 手動作業をそのまま自動化 標準化して自動化
開発 本番 運用 開発 本番 運用
OpenStackの効用
 自動化をより大規模に、ライフサイクル全体で、標準化して利
用することで効果を最大化できます。
33
開発 本番 運用
システムA
システムB
システムC
・
・
・
☺
構築に含まれる要素
 環境を構築するという作業を分解していくと、下図のように分
類できます。
 仮想マシンや仮想ネットワークを構成し、そこでOpenStackから戻る値
(IPアドレス)等を利用して、アプリケーション内部の設定を行っていき
ます。
 更にこれらが、複数インスタンスに渡るような場合は、受け渡すデータが
増えて複雑化していきます。
34
インフラリソースを
構成する
アプリケーションを
構成する
構成された仮想マシンの
情報を渡す
クラウド基盤に対する操作 仮想マシン上での操作
更なる効率化
 クラウドに対する操作も、アプリケーションに対する操作も、両
方を行えるツールを利用することで、データを受け渡しを簡略
化し、更に高度な自動化が実現可能です。
35
インフラリソースを
構成する
アプリケーションを
構成する
構成された仮想マシンの
情報を渡す
クラウド基盤に対する操作 仮想マシン上での操作
外部ツール
各種ツールの特性
 様々なツールが存在していますが、絶対的にどれが優れている
というのはありません。
 ツールごとに根底の思想があり、その思想に適合した使い方
をすればとても有益ですが、思想に反した使い方をするととて
も使いにくくなります。
 やりたいこと、実現したいことに合わせてツールを選択すること
が重要です。
36
演習
 踏み台サーバーの作成
 画面の確認と操作方法
 リソースの作成(ネットワーク、ボリューム)
 UserdataとMetadataを使った自動化
 後片付け(次の演習に向けて)
37
踏み台サーバーの準備
38
演習の概要
 OpenStackのダッシュボードを操作して自分用の踏み台サー
バーを構築します。
 コマンドラインを利用して簡単なサーバー構築を行います。
 OpenStackの基本機能を用いた自動化に挑戦します。
39
サポート環境へのアクセス
 講師の指示するアドレスへブラウザでアクセスしてください。
 アクセス先にOpenStackのダッシュボードアドレスと、ログイン情報が確
認できます。
40
http://192.168.253.48/p/ood2015
環境へのログイン
 OpenStackのダッシュボードへログインしてください。
41
ログイン画面 ログイン後初期画面
初期状態の確認
 初期状態では、外部ネットワークに接続された1つの仮想ルーター
Ext-Routerと、この仮想ルーターへ接続された、テナントネットワー
ク work-net が存在しています。
 確認できない方は講師に連絡してください。
42
仮想マシン作成の準備
 作成する仮想マシンへ設定するキーペアを準備します。
43
(3)
Create Key Pair を選択
(4)
key-for-step を入力
(5)
Create Key Pair を選択
(2)
Key Pairs を選択
(1)
Access & Security を選択
仮想マシン作成の準備
 作成する仮想マシンへ設定するキーペアを準備します。
44
作成したキーペアの秘密鍵のダウンロード
が始まります。
後で使いますのでわかりやすい場所に保存
しておいてください。
秘密鍵は再ダウンロード出来ませんのでご
注意ください。
仮想マシンを作成
 仮想マシンを作成していきます。
45
(1)
Instances を選択
(2)
Launch Instance を選択
インスタンスのパラメーター1
 以下に従い、パラメーターの指定と確認を行います。
46
step-server を入力
m1.small を選択
Boot from image を選択
CentOS7 を選択
インスタンスのパラメーター2
 以下に従い、パラメーターの指定と確認を行います。
47
key-for-step を選択
default にチェックを入れる
Selected networks に work-net が含ま
れている事を確認
Access & Security を選択
Networking を選択
インスタンスのパラメーター3
 以下に従い、パラメーターの指定と確認を行います。
48
Direct Input を選択
以下を入力
#!/bin/bash
echo "Hello World" > /hello.txt
Launch を押下
Post-Creation を選択
作成したインスタンスの確認
 インスタンスの作成に成功すると、作成したインスタンスの状
態がACTIVEになります。
49
Floating IPの割当て
 作成したインスタンスは、OpenStack内部のネットワーク接続
されており、このままでは外部からアクセスすることができませ
ん。
 そこで、踏み台サーバーへFloating IP を割当てて外部からの
アクセスを可能にします。
50
Associate Floating IPを選
択
Floating IPの割当て
51
+ を押下
ext-net_1214 を選択
Allocate IP を押下
IPアドレスが取得されていることを確認
(アドレスは毎回かわります)
Associate を押下
Floating IPの割当てを確認
 Floating IPの割当てに成功すると、インスタンスの一覧から
割り当てたアドレスが確認できます。
52
Instances を選択して、リロード
先ほど割り当てたIPが確認でき
るはずです。
インスタンスへのアクセス
 作成したインスタンスへSSHでアクセスします。
 先ほどダウンロードしたSSH秘密鍵を使って、Floating IPのアドレスへ接続
してください。
 ログインユーザ名は centos になります。
 ログインが成功したら、pre-script で実行したファイルを確認します。
 Puttyはpem形式の秘密鍵を利用できませんので、以下の手順を参考に
鍵の形式を変換してください。
 http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html
 以下はアクセス例になります。
53
$ ssh -i key-for-step.pem centos@192.168.253.96
The authenticity of host '192.168.253.96 (192.168.253.96)' can't be established.
ECDSA key fingerprint is SHA256:W1Dt5pJyKsu3eBfy9b5/ayamLgf0LEq/jSByo1PEo5Y.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.253.96' (ECDSA) to the list of known hosts.
[centos@step-server ~]$ hostname
step-server
[centos@step-server ~]$ cat /hello.txt
Hello World
先ほど入力したスクリプトが実行
されていることが確認できます。
OpenStackクライアント環境の整備
 作成した踏み台サーバーから各種OpenStackコマンドを実行
できるようにします。
54
[centos@step-server ~]$ sudo -i
[root@step-server ~]# curl 157.7.53.150/ip_addr.txt >> /etc/hosts
[root@step-server ~]# mkdir -p /root/temp
[root@step-server ~]# mv /etc/yum.repos.d/* /root/temp
[root@step-server ~]# cd /etc/yum.repos.d
[root@step-server yum.repos.d]# curl -o /etc/yum.repos.d/edubase-liberty.repo http://reposerver/repo/7/edubase-liberty.repo
[root@step-server yum.repos.d]# yum clean all
[root@step-server yum.repos.d]# yum repolist
[root@step-server yum.repos.d]# yum install python-openstackclient python-novaclient python-cinderclient ¥
python-neutronclient python-glanceclient python-keystoneclient
[root@step-server yum.repos.d]# exit
[centos@step-server ~]$ vi openrc
export OS_REGION_NAME=RegionOne
export OS_AUTH_URL=http://10.1.253.203:5000/v2.0
export OS_TENANT_NAME=opst-project-xxxx
export OS_USERNAME=student-xxxx
export OS_PASSWORD=pass-xxxx
演習用のリポジトリを設定します。
OpenStackクライアントを導入
します。
xxxx 部分は自分のユーザー番
号と読み替えてください。
コマンドのテスト
 踏み台サーバーからコマンドが実行できるかを確認します。
55
[centos@step-server ~]$ source openrc
[centos@step-server ~]$ nova list
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| a6a0b553-45ca-41e8-8cf9-4077fa02e5d9 | step-server | ACTIVE | - | Running | work-net=172.16.100.2, 192.168.253.96 |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
[centos@step-server ~]$ neutron net-list
+--------------------------------------+--------------+------------------------------------------------------+
| id | name | subnets |
+--------------------------------------+--------------+------------------------------------------------------+
| 6c72bb66-7173-4900-9388-9a077428ade8 | ext-net_1215 | 7d6556ac-5218-4bb4-980d-e8e65e2e969b |
| ed033537-3073-4801-bcc2-b4694314979c | ext-net_1214 | be6f2a33-b9e8-4e93-b492-909ed45bc9cb |
| cbec6b58-4de0-4491-98c3-fdaad6ae5f34 | work-net | e551a592-a6b1-4d27-8ee7-b606d0522b94 172.16.100.0/24 |
+--------------------------------------+--------------+------------------------------------------------------+
先ほど作成した環境変数ファイル
を読み込みます。
この二つのコマンドがエラーなく実行できれば導入は
成功しています。
画面の確認と操作方法
56
演習の概要
 OpenStackのダッシュボードで行える操作を体験していきます。
57
Overview
 テナント内の利用状況を確認できます。
 テナントにはクォータが設定されており、そのクォータに対して、どの程度の
リソースを消費しているかを確認できます。
58
選択
Instances
 インスタンスの一覧を確認できます。
 ここでは起動したインスタンスの状態や、割当てられたIPが確認でき
ます。
 また、各インスタンスの削除や、コンソールの確認、起動ログの確認
といった操作が行えます。
59
選択
操作メニューの表
示
Volumes
 作成したボリューム一覧の確認と、ボリュームに対する各種操
作が行えます。
 今回はまだボリュームは作成されていません。
60
選択
Images
 利用できるイメージの一覧が確認できます。
 ここには、作成したインスタンスのスナップショットも表示されま
す。
61
選択
Access & Security
 セキュリティグループの一覧です。セキュリティグループは簡易的なファイ
アーウォールを提供しています。
 defaultはテナント作成時に自動で作成され、今回の環境ではSSH, HTTP通信が
許可されるように、管理者によって設定されます。
 キーペアは既に利用した公開鍵と秘密鍵の管理機能です。
62
選択
選択
Access & Security
 取得したFloating IPの一覧を確認、操作可能です。
 またAPIのエンドポイントの確認と、コマンドラインを実行する
ための環境変数設定ファイル等のダウンロードが可能です。
63
選択
選択
Network Topology
 ネットワークの接続や全体概要を確認できます。
 各オブジェクトをクリックすると、そのオブジェクトの詳細を確認可能です。
 今回の環境では、外部ネットワークに接続された仮想ルーターと、この仮想ルーターに
接続された1つの仮想ネットワークが確認できます。さらに、仮想ネットワークには先程
作成した踏み台サーバーが接続されています。
64
選択
Networks
 作成した仮想ネットワークの確認と操作が行えます。
 今回の work-net は講師によって作成されています。
65
選択
Routers
 作成した仮想ルーターと操作が行えます。
 Ext-Routerは講師によって作成されています。
66
選択
リソースの作成
 ネットワーク
 ボリューム
67
仮想ネットワークの作成
 OpenStackではユーザが自由に仮想ネットワークを構築できます。
 他のユーザとアドレス帯やIPアドレスそのものが重複していても問題はあり
ません。
 Neutronの仮想ネットワーク機能が、個々のネットワークを隔離してくれる
ためです。
68
選択
仮想ネットワークの作成
 172.16.200.0/24 のサブネットを持つ my-network を作成します。
69
my-network を入力
Next を押下
my-subnet を入力
172.16.200.0/24 を入力
172.16.200.254 を入力
Next を押下
仮想ネットワークの作成
 入力内容に問題がなければ仮想ネットワークが作成できます。
 このネットワークは自分のテナント内専用で、他のテナントユーザーから利
用されることはありません。
70
何も入力しません。
ここでは必要に応じで、DHCPのON/OFFや、サブネット
アドレス帯の利用できるアドレスの範囲、DHCPで割り当
てるDNSサーバーアドレス等を指定できます。
Create を押下
仮想ボリュームの作成
 続いて仮想ボリュームを作成してインスタンスへ接続します。
71
選択
仮想ボリュームの作成
 1GBの新規ボリュームを作成します。
72
my-vol を入力
1 を入力
仮想ボリュームの作成
 作成したボリュームをインスタンスへ接続します。
73
Manage Attachment を
選択
step-server を選択
Attach Volume
を選択
仮想ボリュームの作成
 接続したボリュームをインスタンスから確認してみます。
 OSからは、このボリュームは通常のディスクとして操作可能です。
74
$ ssh -i key-for-step.pem centos@192.168.253.96
[centos@step-server ~]$ sudo -i
[root@step-server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 20G 0 disk
└─vda1 253:1 0 20G 0 part /
vdb 253:16 0 1G 0 disk
[root@step-server ~]# mkfs.ext4 /dev/vdb
[root@step-server ~]# mkdir -p /mnt/cinder
[root@step-server ~]# mount /dev/vdb /mnt/cinder
[root@step-server ~]# cp /etc/hosts /mnt/cinder/
[root@step-server ~]# ls -alF /mnt/cinder/
total 24
drwxr-xr-x. 3 root root 4096 Dec 10 05:10 ./
drwxr-xr-x. 3 root root 19 Dec 10 05:10 ../
-rw-r--r--. 1 root root 184 Dec 10 05:10 hosts
drwx------. 2 root root 16384 Dec 10 05:10 lost+found/
踏み台サーバーへ接続し、
rootユーザーとして操作します。
接続したディスクが認識してい
ることが確認できます。
ディスクをフォーマットし、マウン
トした後にファイルをコピーして
います。
ディスクが機能していることが確
認できます。
Userdata と Metadata を利用
した簡単な自動化
75
概要
 ここでは、Etherpad環境をUserdata, Metadaの2つを使って
自動構築を試してみます。
 既に自動化のスクリプトは作成済みですので、スクリプトを実
行しながら、中身を見ていきます。
76
自動構築の実行
 スクリプトをダウンロードして実行します。
77
[centos@step-server ~]$ curl -o 1st_etherpad.sh http://reposerver/handson/20151214-ood2015/1st_etherpad.sh
[centos@step-server ~]$ bash 1st_etherpad.sh
[centos@step-server ~]$ watch -n 10 nova console-log --length 30 my-etherpad
cloud-init[728]: ci-info: | 1 | 169.254.169.254 | 172.16.100.254 | 255.255.255.255 | eth0 | UGH |
cloud-init[728]: ci-info: | 2 | 172.16.100.0 | 0.0.0.0 | 255.255.255.0 | eth0 | U |
cloud-init[728]: ci-info: +-------+-----------------+----------------+-----------------+-----------+-------+
CentOS Linux 7 (Core)
Kernel 3.10.0-229.14.1.el7.x86_64 on an x86_64
my-etherpad login: cloud-init[2153]: Cloud-init v. 0.7.5 running 'modules:config' at Wed, 09 Dec 2015 05:29:52 +0000. Up 14.64 seconds.
cloud-init[2159]: Cloud-init v. 0.7.5 running 'modules:final' at Wed, 09 Dec 2015 05:29:52 +0000. Up 15.00 seconds.
ci-info: ++++++++++Authorized keys from /home/centos/.ssh/authorized_keys for user centos+++++++++++
ci-info: +---------+-------------------------------------------------+---------+-------------------+
ci-info: | Keytype | Fingerprint (md5) | Options | Comment |
ci-info: +---------+-------------------------------------------------+---------+-------------------+
ci-info: | ssh-rsa | 45:71:8e:61:e6:97:e4:e3:2a:93:05:16:06:a9:e0:2d | - | Generated-by-Nova |
ci-info: +---------+-------------------------------------------------+---------+-------------------+
ec2:
ec2: #############################################################
ec2: -----BEGIN SSH HOST KEY FINGERPRINTS-----
ec2: 256 5f:1c:9e:9e:14:41:d2:5c:58:47:1c:04:f2:cf:4c:d5 (ECDSA)
ec2: 256 5c:89:e2:6b:e6:9b:69:75:a9:b5:89:3f:c8:c7:74:c1 (ED25519)
ec2: 2048 79:50:f3:5c:4e:84:f4:a8:8f:b7:1f:cd:eb:c1:59:c8 (RSA)
ec2: -----END SSH HOST KEY FINGERPRINTS-----
ec2: #############################################################
-----BEGIN SSH HOST KEY KEYS-----
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIscyNoBmrlBVsixmbFuhZAnWVyptnDp5Fc8wCAYioHDef/bcnJn/mcCfUIQKh5XnOokJcakTik5vFWBnxbNhQA=
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF/2a4golvNQR7ClJ/56Wj3OqDcspazu7oTxOtQQrjgn
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDr4yzecpdEAcnWviij17I1FAsg6avhoSHy9NIMjPvXdc1T3ALOYOhj1JJH0WCFlXV9EFSgpY5O2cIJiWMx+y5NH72Oh/2dfOyl+ViN8yvF6DA76h/jJUli1y8rh600eZO9i6o
yY6BNehIBgJiUohlJB1OLL4t/Gb8fH2w/7tj6Rvh
mHMNJrbjF8+JViUT4tlrP55hHRnanPb8rl9La4Uz/iZtYU8GljpduCFcum0iepUy/pBXy6GKHPp1RRfMpCQXUw+HsywRpSZTGrQ7kO+kz+/B+J4X78zC2ju5sY6qbf4peafyR3DBpRTDooKbiJrNh7dtnXl3ZFLbl8G
zksKrR
-----END SSH HOST KEY KEYS-----
cloud-init[2159]: Cloud-init v. 0.7.5 finished at Wed, 09 Dec 2015 05:29:53 +0000. Datasource DataSourceOpenStack [net,ver=2]. Up 15.24 seconds
スクリプトが完了したら、起動した
インスタンスの状態を表示します。
ログインプロンプトが表示されたら
完了です。
構築の確認
 スクリプトが完了したらブラウザで割当てられたFloating IPを確認
し、ブラウザでアクセスしてください。
 問題がなければ、Etherpad の初期画面が表示されます。
78
[centos@step-server ~]$ nova list
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| 570d141c-a15d-48af-b939-67b59a98f2ea | my-etherpad | ACTIVE | - | Running | work-net=172.16.100.3, 192.168.253.98 |
| a6a0b553-45ca-41e8-8cf9-4077fa02e5d9 | step-server | ACTIVE | - | Running | work-net=172.16.100.2, 192.168.253.96 |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
インスタンスへ割当てられている
Floating IPを確認します。
スクリプトの解説
79
#!/bin/bash
function if_error_exit() { echo "Error: $1"; exit 1; }
function get_uuid () { cat - | grep " id " | awk '{print $4}'; }
source openrc || if_error_exit
curl -o userdata_etherpad_centos7.txt http://reposerver/handson/20151214-ood2015/userdata_etherpad_centos7.txt
nova list || if_error_exit
echo "新たなキーペア key-for-etherpad を作成します"
nova keypair-add key-for-etherpad | tee key-for-etherpad.pem
chmod 600 key-for-etherpad.pem
echo "Floaitng IPを取得します"
export FIP=`nova floating-ip-create ext-net_1214 | grep ext-net_1214 |grep "[0-9]¥+¥.[0-9]¥+¥.[0-9]¥+¥.[0-9]¥+" | awk -e '{print
$4}'`
echo ${FIP}
sleep 3
echo "使用するネットワーク work-net のUUIDを取得します"
export MY_WORK_NET=`neutron net-show work-net | get_uuid`
echo ${MY_WORK_NET}
echo "インスタンスを起動します"
nova boot --flavor m1.small --image "CentOS7" ¥
--key-name key-for-etherpad --security-groups default ¥
--nic net-id=${MY_WORK_NET} ¥
--user-data userdata_etherpad_centos7.txt ¥
--meta fip=${FIP} ¥
my-etherpad
~~~~(省略)~~~~
このスクリプトではOpenStackコマンドを実行する
ので、最初に環境変数を読み込みます。
インスタンス起動時に与える userdata をダウン
ロードしています。
Floating IPを取得し、変数FIPに格納していま
す。
インスタンス起動時に、先ほどダウンロードしたuserdataを指定し、
更に metadata fip に 変数FIPの内容をセットしています。
これでインスタンス起動時に、userdata_etherpad_centos7.txt が実
行されます。
1st_etherpad.sh
スクリプトの解説
80
~~~~(省略)~~~~
## Nginx
FIP=`curl -S -s http://169.254.169.254/openstack/latest/meta_data.json | python -c "import json,sys; print
json.load(sys.stdin).get('meta').get('fip')"`
cat << EOF > /etc/nginx/conf.d/eplite.conf
server {
listen 80;
server_name ${FIP};
access_log /var/log/nginx/eplite.access.log;
error_log /var/log/nginx/eplite.error.log;
location / {
proxy_pass http://localhost:9001/;
proxy_set_header Host ¥$host;
proxy_pass_header Server;
proxy_buffering off;
proxy_set_header X-Real-IP ¥$remote_addr;
proxy_set_header Host ¥$host;
proxy_http_version 1.1;
proxy_set_header Upgrade ¥$http_upgrade;
proxy_set_header Connection ¥$connection_upgrade;
}
}
map ¥$http_upgrade ¥$connection_upgrade {
default upgrade;
'' close;
}
EOF
systemctl enable nginx.service
systemctl start nginx.service
~~~~(省略)~~~~
userdata_etherpad_centos7.txt
Metadataサーバーへアクセスし、fipの値を取り出
しています。
JSON形式のデータが返されるので、Pythonの標
準モジュールを利用してパースしてからデータを取り
出しています。
Nginxの設定ファイルを生成しています。
ここでは、FIPに対してアクセスするリクエストを、
http://localhost:9001/へ転送する設定を
行っています。
http://localhost:9001/ は Enterpadが起
動しているポートになります。
まとめ
 このように、簡単な環境であればOpenStack標準機能のみで
自動化が可能です。
 しかし、サーバー台数が2台、3台と増えていくに従い、標準
機能だけでの構築は難しくなってきます。
 そのような場合には、OpenStackと連携する自動化支援ツー
ル等を活用することで、よりシンプルに環境構築が可能となり
ます。
 パート2以降では、OpenStackと周辺ツールと連携した例に
ついて見ていきます。
81
後片付け(次の演習に向け
て)
82
続く演習を行うために
 踏み台サーバーの導入と、OpenStackクライアントコマンドの導入までは完了
しているひつようがあります。
 踏み台サーバーから nova list や、 neutron net-list 等が実行可能になっている状態
 余分なリソースを削除しておきます。
83
[centos@step-server ~]$ nova list
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| 570d141c-a15d-48af-b939-67b59a98f2ea | my-etherpad | ACTIVE | - | Running | work-net=172.16.100.3, 192.168.253.98 |
| a6a0b553-45ca-41e8-8cf9-4077fa02e5d9 | step-server | ACTIVE | - | Running | work-net=172.16.100.2, 192.168.253.96 |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
[centos@step-server ~]$ nova delete my-etherpad
Request to delete server my-etherpad has been accepted.
[centos@step-server ~]$ nova floating-ip-list
+--------------------------------------+----------------+--------------------------------------+--------------+--------------+
| Id | IP | Server Id | Fixed IP | Pool |
+--------------------------------------+----------------+--------------------------------------+--------------+--------------+
| 84c1d28e-37f9-4952-94ef-4a95bac5b1b1 | 192.168.253.96 | a6a0b553-45ca-41e8-8cf9-4077fa02e5d9 | 172.16.100.2 | ext-net_1214 |
| 8c958b30-24c0-49bd-92a9-3521c528abb8 | 192.168.253.98 | - | - | ext-net_1214 |
+--------------------------------------+----------------+--------------------------------------+--------------+--------------+
[centos@step-server ~]$ nova floating-ip-delete 192.168.253.98
[centos@step-server ~]$ nova list
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
| a6a0b553-45ca-41e8-8cf9-4077fa02e5d9 | step-server | ACTIVE | - | Running | work-net=172.16.100.2, 192.168.253.96 |
+--------------------------------------+-------------+--------+------------+-------------+---------------------------------------+
[centos@step-server ~]$ nova floating-ip-list
+--------------------------------------+----------------+--------------------------------------+--------------+--------------+
| Id | IP | Server Id | Fixed IP | Pool |
+--------------------------------------+----------------+--------------------------------------+--------------+--------------+
| 84c1d28e-37f9-4952-94ef-4a95bac5b1b1 | 192.168.253.96 | a6a0b553-45ca-41e8-8cf9-4077fa02e5d9 | 172.16.100.2 | ext-net_1214 |
+--------------------------------------+----------------+--------------------------------------+--------------+--------------+
先ほど作成したインスタンスを削
除しておきます。
1つのインスタンス、1つのFloating IP
という状態にしておきます。
84
Part1は以上になります

OpenStackをさらに”使う”技術 概要と基礎操作