openstackをさらに”使う”技術 概要と基礎操作
TRANSCRIPT
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 60002015 Autumn Tokyo 50002016 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
Un
it P
rice o
f IT
Reso
urc
es
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サービスを提供
8https://www.youtube.com/watch?v=SREEnNQ6zqg
Before
After
システムアーキテクチャのパラダムシフト
9
http://www.slideshare.net/gmccance/cern-data-centre-evolution
全体概要
10
OpenStackとは?
OSSで開発されるCloudOS
様々なITリソースを抽象化し、標準的な操作手法を提供
11http://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 APIAmazon互換API
ユーザやプログラムは、OpenStackの利用方法だけを知っていれば環境の操作が可能
コンテナ用ドライバ
LXCDocker
ユーザーのプラグイン・ドライバの選択傾向
152015 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/bashsetenforce 0sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
dnf update -y -qLANG=C dnf groupinstall -y -q "LXDE Desktop"LANG=C dnf groupinstall -y japanese-supportLANG=C dnf langinstall -y ja_JPdnf install -y firefox vimdnf install -y git
#cloud-configpassword: passwordchpasswd: { 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: 1ssh_pwauth: 0
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']resize_rootfs_tmp: /devssh_deletekeys: 0ssh_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/bashecho "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 [email protected] 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)? yesWarning: Permanently added '192.168.253.96' (ECDSA) to the list of known hosts.
[centos@step-server ~]$ hostnamestep-server
[centos@step-server ~]$ cat /hello.txtHello 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=RegionOneexport OS_AUTH_URL=http://10.1.253.203:5000/v2.0export OS_TENANT_NAME=opst-project-xxxxexport OS_USERNAME=student-xxxxexport 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 [email protected][centos@step-server ~]$ sudo -i
[root@step-server ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 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 24drwxr-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 hostsdrwx------. 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/56Wj3OqDcspazu7oTxOtQQrjgnssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQDr4yzecpdEAcnWviij17I1FAsg6avhoSHy9NIMjPvXdc1T3ALOYOhj1JJH0WCFlXV9EFSgpY5O2cIJiWMx+y5NH72Oh/2dfOyl+ViN8yvF6DA76h/jJUli1y8rh600eZO9i6oyY6BNehIBgJiUohlJB1OLL4t/Gb8fH2w/7tj6RvhmHMNJrbjF8+JViUT4tlrP55hHRnanPb8rl9La4Uz/iZtYU8GljpduCFcum0iepUy/pBXy6GKHPp1RRfMpCQXUw+HsywRpSZTGrQ7kO+kz+/B+J4X78zC2ju5sY6qbf4peafyR3DBpRTDooKbiJrNh7dtnXl3ZFLbl8GzksKrR-----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.pemchmod 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
~~~~(省略)~~~~## NginxFIP=`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.confserver {
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.servicesystemctl 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-etherpadRequest 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は以上になります