• Like
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
Upcoming SlideShare
Loading in...5
×

沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1

  • 993 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
993
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
54
Comments
0
Likes
9

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 自動化編 1 openstackOpen  source  software  to  build  public  and  private  clouds. OpenStackとAnsibleによる IaaS基盤運用の自動化 2014-­07-­30 Hideki  Saito TwitterID:  @saito_hideki Internet  Initiative  Japan  Inc.
  • 2. 目次 •  はじめに ü  ITインフラ構築・運用管理の自動化 •  ハンズオン ü  本セッションで利用するシステム構成 ü  IaaS基盤を管理する ü  システム構築を自動化する 2
  • 3. はじめに 3
  • 4. •  自動化の目的 ü  日々繰り返される単純作業からエンジニアを解放する ü  作業ミスを未然に防ぎ品質を安定させる •  自動化の変遷 •  クラウド/自動化/構成管理ツール ü  OpenStack/CloudStack/Eucalyptus  など ü  Ansible,  Chef,  Puppet  など ITインフラ構築・運用管理の自動化① 手順書と引き継ぎ 手順書のスクリプト化   と自動実行 構成管理ツールの登場   4
  • 5. ITインフラ構築・運用管理の自動化② •  本セッションのテーマ OpenStackとAnsibleを利用して、インフラエンジニアの日常業 務である、クラウド基盤上の仮想リソース管理作業を可能な限り 自動化する。 5 構築業務 サーバ設計・構築 ネットワーク設計・構築 ファシリティ設計 運用管理システムの設計・開発 運用業務 システム全体の運用管理 資産管理
  • 6. ITインフラ構築・運用管理の自動化③ ITインフラエンジニアの典型的な業務は、このような感じでしょうか。 •  ネットワーク機器を設定する p  ポートを設定する p  サーバのNICを物理的に接続する p  wikiなどでドキュメントを更新する •  サーバを構築する p  OSをインストールする p  リモートログイン可能な状態にする p  追加パッケージのインストールや設定等の基本構築を行う p  ミドルウェアのインストール&設定を行う p  サービスに投入する p  wikiなどのドキュメントを更新する 以降の章では、このような日常業務を省力化する方法を考えてみます。 6
  • 7. ハンズオン 7
  • 8. 現在のシステム構成 本セッションで利用するシステム構成 8 <userID>-­router Router step-­server Instance OpenStackや仮想マシンに 対する操作はstep-­server上 から行います Ext-­Net <UserID>-­network 10.0.0.0/24 10.0.0.1 10.0.0.N
  • 9. IaaS基盤を管理する 9 •  OpenStackを管理する OpenStackのクラウド基盤を操作するには、3つの方法があります。 以降の章ではOpenStackが提供するCLIを利用した操作を体験し、その後 APIを利用した外部プログラム(Ansible)によるOpenStackの操作を体験し てみましょう。 • Horizonが提供するDashboard • OpenStackの主要な機能のみを提供するWebUI • 各コンポーネントが提供するコマンドラインインターフェイス • 管理者用コマンド • 一般利用者用コマンド CLI • RESTful  APIでOpenStackの全ての機能を利用可能 • Pythonのライブラリとしても提供されるAPI
  • 10. IaaS基盤を管理する  〜~  CLIによる操作① OpenStackの各コンポーネントが提供するCLIを利用して、以 下の流れで仮想リソースを作成してみましょう。 CLIのコマンド名は、それぞれのnovaコマンドやglanceコマンド など、コンポーネント名となっているのが通例です。 10 4.  仮想マシンにフローティングIPを付与してInternetに接続する 3.  仮想マシンを作成する 2.  Internet接続用にフローティングIPを払い出す 1.事前準備
  • 11. IaaS基盤を管理する  〜~  CLIによる操作② 事前準備 ●  step-­serverにsshログインして作成済みの環境変数定義ファイル(openrc)を反映させます #  cd  $HOME #  source  openrc ●  作成する仮想マシンへのsshログインに使用するキーペアを作成します #  ssh-­keygen  -­t  rsa  -­b  2048 Generating  public/private  rsa  key  pair. Enter  file  in  which  to  save  the  key  (/root/.ssh/id_rsa): Enter  passphrase  (empty  for  no  passphrase):  ******** Enter  same  passphrase  again:  ******** Your  identification  has  been  saved  in  /root/.ssh/id_rsa. Your  public  key  has  been  saved  in  /root/.ssh/id_rsa.pub. The  key  fingerprint  is: ba:18:ab:cf:31:43:4f:26:52:6c:87:9e:61:0f:84:29  root@step-­server The  key's  randomart  image  is: ●  novaコマンドで公開鍵をOpenStackに登録します #  nova  keypair-­add  key-­for-­app-­server  -­-­pub-­key  .ssh/id_rsa.pub #  nova  keypair-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  Name                              |  Fingerprint                                                                          | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  key-­for-­app-­server  |  ba:18:ab:cf:31:43:4f:26:52:6c:87:9e:61:0f:84:29  | |  key-­for-­step-­server|  bc:a7:7e:ec:59:55:3a:12:20:7a:9b:cc:1f:a6:47:ed  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ 11
  • 12. IaaS基盤を管理する  〜~  CLIによる操作③ 事前準備 ●  サンプルアプリケーションのサービス提供用にセキュリティグループを作成します #  nova  secgroup-­create  security-­for-­app-­server  "サンプルアプリケーションサービス用グループ" +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  Id                                                                      |  Name                                        |  Description                                                                | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  0e7d74ce-­593d-­4524-­980c-­83e06e6e3a69  |  security-­for-­app-­server  |  サンプルアプリケーションサービス用グループ  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ ●  作成したセキュリティグループ(security-­for-­app-­server)に許可ルールを追加します #  nova  secgroup-­add-­rule  security-­for-­app-­server  tcp  22  22  0.0.0.0/0 +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  IP  Protocol  |  From  Port  |  To  Port  |  IP  Range    |  Source  Group  | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  tcp                  |  22                |  22            |  0.0.0.0/0  |                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ #  nova  secgroup-­add-­rule  security-­for-­app-­server  tcp  80  80  0.0.0.0/0 +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  IP  Protocol  |  From  Port  |  To  Port  |  IP  Range    |  Source  Group  | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  tcp                  |  80                |  80            |  0.0.0.0/0  |                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ #  nova  secgroup-­add-­rule  security-­for-­app-­server  icmp  -­1  -­1  0.0.0.0/0 +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  IP  Protocol  |  From  Port  |  To  Port  |  IP  Range    |  Source  Group  | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  icmp                |  -­1                |  -­1            |  0.0.0.0/0  |                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ 12
  • 13. IaaS基盤を管理する  〜~  CLIによる操作④ 事前準備 ●  セキュリティグループ(security-­for-­app-­server)が作成されていることを確認します #  nova  secgroup-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  Id                                                                      |  Name                                          |  Description                                                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  1ea8746f-­d453-­42e4-­9dd5-­b82711a3710f  |  default                                    |  default                                                                    | |  0e7d74ce-­593d-­4524-­980c-­83e06e6e3a69  |  security-­for-­app-­server    |  サンプルアプリケーションサーバ用グループ  | |  40c83343-­9409-­402c-­ae89-­f6026a725193  |  security-­for-­step-­server  |  踏み台サーバ用のSSHを許可するグループ        | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ ●  security-­for-­app-­serverに許可ルールが追加されていることを確認します #  nova  secgroup-­list-­rules  security-­for-­app-­server +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  IP  Protocol  |  From  Port  |  To  Port  |  IP  Range    |  Source  Group  | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  tcp                  |  22                |  22            |  0.0.0.0/0  |                            | |  tcp                  |  80                |  80            |  0.0.0.0/0  |                            | |  icmp                |  -­1                |  -­1            |  0.0.0.0/0  |                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ 13
  • 14. IaaS基盤を管理する  〜~  CLIによる操作⑤ 事前準備 ●  仮想マシンのリストを取得してみます #  nova  list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  ID                                                                      |  Name                |  Status  |  Task  State  |  Power  State  |  Networks                                                                | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  812c40ec-­538f-­4efe-­8511-­eab531d99807  |  step-­server  |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.3,  15.125.118.53  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ ●  先ほど登録した公開鍵を確認してみます #  nova  keypair-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  Name                                |  Fingerprint                                                                          | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  key-­for-­app-­server    |  ba:18:ab:cf:31:43:4f:26:52:6c:87:9e:61:0f:84:29  | |  key-­for-­step-­server  |  bc:a7:7e:ec:59:55:3a:12:20:7a:9b:cc:1f:a6:47:ed  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ ●  仮想マシンの品目であるフレーバのリストを取得してみます #  nova  flavor-­list +-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­+-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+ |  ID    |  Name                          |  Memory_MB  |  Disk  |  Ephemeral  |  Swap  |  VCPUs  |  RXTX_Factor  |  Is_Public  | +-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­+-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+ |  100  |  standard.xsmall    |  1024            |  10      |  10                |            |  1          |  1.0                  |  N/A              | |  101  |  standard.small      |  2048            |  30      |  10                |            |  2          |  1.0                  |  N/A              | |  102  |  standard.medium    |  4096            |  30      |  50                |            |  2          |  1.0                  |  N/A              | |  103  |  standard.large      |  8192            |  30      |  130              |            |  4          |  1.0                  |  N/A              | |  104  |  standard.xlarge    |  15360          |  30      |  270              |            |  4          |  1.0                  |  N/A              | |  105  |  standard.2xlarge  |  30720          |  30      |  470              |            |  8          |  1.0                  |  N/A              | |  110  |  standard.4xlarge  |  61440          |  30      |  870              |            |  12        |  1.0                  |  N/A              | |  114  |  standard.8xlarge  |  122880        |  30      |  1770            |            |  16        |  1.0                  |  N/A              | |  203  |  highmem.large        |  16384          |  30      |  130              |            |  4          |  1.0                  |  N/A              | |  204  |  highmem.xlarge      |  30720          |  30      |  270              |            |  4          |  1.0                  |  N/A              | |  205  |  highmem.2xlarge    |  61440          |  30      |  540              |            |  8          |  1.0                  |  N/A              | +-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­+-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+ 14
  • 15. IaaS基盤を管理する  〜~  CLIによる操作⑥ 事前準備 ●  GuestOSのイメージリストを取得してみます #  nova  image-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  ID                                                                      |  Name                                                                                                                                                              |  Status  |  Server                                                              | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  d782c03d-­9666-­4639-­a62f-­53b376880120  |  ActiveState  Stackato  v3.2.1                                                                                                                |  ACTIVE  |  255c22fe-­ebf3-­401d-­951a-­114b9bbb27d1  | |  0c8a7e05-­7c50-­52eb-­9c13-­2a9135a9890c  |  ActiveState  Stackato-­v3.0.1  -­  Partner  Image                                                                                |  ACTIVE  |                                                                            | |  32b40af5-­7a66-­47e0-­894f-­51c5883ea3f5  |  BLU  AGE  Modernization  Cobol2SpringMVC                                                                                            |  ACTIVE  |                                                                            | |  1f0e2be0-­c2c3-­480b-­a81b-­996b49c8cd09  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  50f28bce-­c8e7-­4174-­9554-­37cb319a4168  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  85de2abd-­83fe-­50e1-­9de5-­d3a3af216d2a  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  892c7ae6-­cdd0-­4d98-­8f55-­6204ea302c29  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  8b91d309-­bbef-­4ab7-­bc1d-­169af05a3716  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  aef1d2e9-­fc2b-­4bcc-­924b-­ffbd1404c0ec  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  bc1d8d02-­64f6-­4bf9-­b3e8-­c3cba6a71801  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  c5cfa114-­5f33-­4784-­a666-­83e9b7706933  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  dc055245-­4689-­468a-­81a4-­fb7c2b0e9331  |  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  9019a56e-­2986-­58ea-­a294-­59e7c2deeddc  |  CentOS  5.6  Server  64-­bit  20111207  (Ramdisk)  (deprecated)                                                      |  ACTIVE  |                                                                            | |  f8c11f9a-­436f-­4d65-­ac4f-­8638984c5f25  |  CentOS  5.8  Server  64-­bit  20120828  (b)                                                                                            |  ACTIVE  |                                                                            | |  8a1a6f25-­dff4-­532f-­b669-­2a7fe9304a25  |  CentOS  6.2  Server  64-­bit  20120125  (Kernel)  (deprecated)                                                        |  ACTIVE  |                                                                            | |  c08e69f9-­ce9d-­587c-­aec7-­2b4919e79757  |  CentOS  6.2  Server  64-­bit  20120125  (Ramdisk)  (deprecated)                                                      |  ACTIVE  |                                                                            | |  202e7659-­f7c6-­444a-­8b32-­872fe2ed080c  |  CentOS  6.3  Server  64-­bit  20130116                                                                                                    |  ACTIVE  |                                                                            | <...> |  ae250c63-­3e46-­5db4-­be29-­2df7248aaab7  |  Windows  Server  2008  Enterprise  SP2  x64  Volume  License  20121031  (b)  (deprecated)        |  ACTIVE  |                                                                            | |  84e9fd6e-­b5a4-­481b-­8d57-­2323ae5eb430  |  Windows  Server  2008  Enterprise  SP2  x64  Volume  License  20131017  (b)  (deprecated)        |  ACTIVE  |                                                                            | |  1294610e-­fdc4-­579b-­829b-­d0c9f5c0a612  |  Windows  Server  2008  Enterprise  SP2  x64  Volume  License  20140415  (b)                                  |  ACTIVE  |                                                                            | |  7ab537bf-­a274-­4eb8-­80f1-­8e4264f0e32f  |  Windows  Server  2008  Enterprise  SP2  x86  Volume  License  20131017  (b)  (deprecated)        |  ACTIVE  |                                                                            | |  8a398ff7-­f4f7-­5beb-­bab0-­300c47345080  |  Windows  Server  2008  Enterprise  SP2  x86  Volume  License  20140415  (b)                                  |  ACTIVE  |                                                                            | |  6a6790b6-­31d6-­4fe4-­b26f-­8950cb98725c  |  Windows  Server  2008  R2  Enterprise  SP1  x64  Volume  License  20130925  (b)  (deprecated)  |  ACTIVE  |                                                                            | |  e08ecab2-­4acd-­540d-­b16a-­60284769aceb  |  Windows  Server  2008  R2  Enterprise  SP1  x64  Volume  License  20140415  (b)                            |  ACTIVE  |                                                                            | |  18a78e14-­0f4f-­4af8-­85fd-­245ea407d3a0  |  desktopsites  Konect  Elite  Version  8.6.2.100  (20140211)                                                          |  ACTIVE  |                                                                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ ●仮想マシンを接続するネットワークリストを取得してみます #  neutron  net-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  id                                                                      |  name                        |  subnets                                                                                    | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  5afad8aa-­b0e1-­479e-­af24-­b328d1a9f287  |  h-­saito-­network  |  103522e1-­421f-­4db8-­b47a-­9716c908d70c  10.0.0.0/24  | |  7da74520-­9d5e-­427b-­a508-­213c84e69616  |  Ext-­Net                  |  ef3bde66-­8ac4-­4356-­8ab4-­099519ba218a                          | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ 15
  • 16. IaaS基盤を管理する  〜~  CLIによる操作⑦ Internet接続用にフローティングIPを払い出す ●  Internet接続用にフローティングIPを払い出します #  nova  floating-­ip-­create +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  Ip                        |  Server  Id  |  Fixed  Ip  |  Pool        | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  15.125.74.215  |                      |  -­                |  Ext-­Net  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ ●  フローティングIPリストを取得してみます #  nova  floating-­ip-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  Ip                        |  Server  Id  |  Fixed  Ip  |  Pool        | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  15.125.74.215  |                      |  -­                |  Ext-­Net  | |  15.125.118.53  |                      |  10.0.0.3  |  Ext-­Net  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ 16
  • 17. IaaS基盤を管理する  〜~  CLIによる操作⑧ 仮想マシンを作成する ●  仮想マシン(app-­server)を作成して起動します #  nova  boot  app-­server  -­-­flavor  101  -­-­image  "CentOS  6.3  Server  64-­bit  20130116"   -­-­key-­name  key-­for-­app-­server  -­-­security-­groups  security-­for-­app-­server   -­-­nic  net-­id=5afad8aa-­b0e1-­479e-­af24-­b328d1a9f287 +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  Property                                        |  Value                                                                                                                                        | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  OS-­EXT-­AZ:availability_zone  |  nova                                                                                                                                          | |  OS-­EXT-­STS:power_state            |  0                                                                                                                                                | |  OS-­EXT-­STS:task_state              |  scheduling                                                                                                                              | |  OS-­EXT-­STS:vm_state                  |  building                                                                                                                                  | |  accessIPv4                                    |                                                                                                                                                    | |  accessIPv6                                    |                                                                                                                                                    | |  adminPass                                      |  H2KGMy8ohH83                                                                                                                          | |  config_drive                                |                                                                                                                                                    | |  created                                          |  2014-­07-­23T04:53:22Z                                                                                                          | |  flavor                                            |  standard.small  (101)                                                                                                          | |  hostId                                            |                                                                                                                                                    | |  id                                                    |  ed98ec64-­6884-­4c7f-­b462-­8e375efd7148                                                                          | |  image                                              |  CentOS  6.3  Server  64-­bit  20130116  (202e7659-­f7c6-­444a-­8b32-­872fe2ed080c)  | |  key_name                                        |  key-­for-­app-­server                                                                                                              | |  metadata                                        |  {}                                                                                                                                              | |  name                                                |  app-­server                                                                                                                              | |  progress                                        |  0                                                                                                                                                | |  security_groups                          |  security-­for-­app-­server                                                                                                    | |  status                                            |  BUILD                                                                                                                                        | |  tenant_id                                      |  10012734753930                                                                                                                      | |  updated                                          |  2014-­07-­23T04:53:22Z                                                                                                          | |  user_id                                          |  10035956719298                                                                                                                      | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ 17
  • 18. IaaS基盤を管理する  〜~  CLIによる操作⑨ 仮想マシンにフローティングIPを付与してInternetに接続する ●  app-­serverが作成されたことを確認します #  nova  list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  ID                                                                      |  Name                |  Status  |  Task  State  |  Power  State  |  Networks                                                                | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  ed98ec64-­6884-­4c7f-­b462-­8e375efd7148  |  app-­server    |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.39                              | |  812c40ec-­538f-­4efe-­8511-­eab531d99807  |  step-­server  |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.3,  15.125.118.53  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ ●  割り当てるフローティングIPを確認します #  nova  floating-­ip-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  Ip                        |  Server  Id  |  Fixed  Ip  |  Pool        | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  15.125.74.215  |                      |  -­                |  Ext-­Net  | |  15.125.118.53  |                      |  10.0.0.3  |  Ext-­Net  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ ●  app-­serverにフローティングIPを割り当てます #  nova  floating-­ip-­associate  -­-­fixed-­address=10.0.0.39  app-­server  15.125.74.215 ●  割り当てたフローティングIPに対してstep-­serverからsshログインできることを確認します #  ssh  root@15.125.74.215 [root@app-­server  ~˜]#  hostname app-­server 18
  • 19. 現在のシステム構成 IaaS基盤を管理する  〜~  CLIによる操作⑩ 19 <userID>-­router Router step-­server Instance Ext-­Net <UserID>-­network 10.0.0.0/24 10.0.0.1 10.0.0.N app-­server Instance 10.0.0.N app-­serverを新たに作成 しました
  • 20. まとめ ここまでの作業をまとめます ü  CLIを利用してIaaS基盤上に仮想マシンを作成しました ü  OpenStackのCLIで利用するクライアントコマンドは各コンポーネントが 提供します ü  OpenStackのCLIは各コンポーネント(novaやneutronなど)が提供する API経由でコンポーネントにリクエストを投げることにより基盤の操作を行 います ü  コマンドを利用するためには認証に必要な情報を特定の環境変数として 設定するか、コマンドライン引数として渡してやる必要があります ü  Dashboard(WebUI)からは、OpenStackの機能をフル活用することはで きず、CLIでのオペレーションが必要となる場合があります 20
  • 21. システム構築を自動化する 21
  • 22. Ansibleについて① Ansibleの特徴 AnsibleはPythonで書かれた*作業*だけなく*仕事*を自動化するためのツー ルで、OpenStackと組み合わせることにより、OS・ミドルウェア・アプリケー ションのインストール・設定作業を自動化することが可能です。 ü  作業の一連の流れを1つにまとめるPlaybookを持つ ü  多数の外部モジュールが標準・オプションで提供されている ü  必要な機能を提供するモジュールは自身で開発することが可能 ü  作業の冪等性が担保されている ü  push型でエージェントレスである ü  動作に必要な要件が少ない Ø  SSHログイン可能 Ø  Python実行環境(2.4以降)といくつかのライブラリが存在する 22
  • 23. • ファイルの転送、サービスの起動停止などAnsibleに行わせる 作業がモジュールとして提供されているmodule • Ansibleに行わせる一連の作業の流れをまとめたもの • Chefではrecipe、PuppetではmanifestにあたるPlaybook • 実行結果にり実行されるcallbackモジュール群 • 動的にターゲットホストをグルーピングするDynamic   Inventoryプログラム Plugin • 操作対象ノードに関する情報を記録しているファイル • PluginのDynamic  Inventoryプログラムを利用して動的生成 することも可能 Inventory Ansibleについて② Ansibleの主な構成要素 Ansibleは大きく以下の要素から構成されています。次章ではAnsibleを実際 に利用しつつ、その仕組を解説します。 23
  • 24. Ansibleについて③ ●  step-­serverにsshログインします 以降の作業は全てstep-­server上から実施します ●  step-­serverのrootユーザの.ssh/authorized_keysに自身の公開鍵を登録しておきます #  cat  ~˜/.ssh/id_rsa.pub  >>  ~˜/.ssh/authorized_keys ●  テキストエディタでinventoryファイルを作成します Ansibleの挙動についてはP27で解説します #  nano  $HOME/inventory 〜~inventoryファイルの内容ここから〜~ [localhost] 127.0.0.1 [localhost:vars] ansible_ssh_user=root ansible_ssh_pass=<パスフレーズ> [app-­server] 15.125.118.53 [app-­server:vars] ansible_ssh_user=root ansible_ssh_pass=<パスフレーズ> 〜~inventoryファイルの内容ここまで〜~ 24 [グループ名]と前章で作成したapp-­server に割り当てたフローティングIPを書いてく ださい ※step-­serverから到達可能なIPアドレス であればプライベートIP(fixed_ip)でもか まいません sshログインするためのユーザID と鍵のパスフレーズを書いてくだ さい sshログインするためのユーザID と鍵のパスフレーズを書いてくだ さい
  • 25. Ansibleについて④ ●  known_hostsのチェックを無効化しておきます #  export  ANSIBLE_HOST_KEY_CHECKING=False ●  pingモジュールを使用してstep-­serverのAnsibleから管理対象サーバへの接続性を確認します [書式]  ansible  -­i  <インベントリファイル>  -­m  <モジュール名>  <ホストグループ名  or  ホスト名> #  ansible  -­i  inventory  -­m  ping  localhost 127.0.0.1  |  success  >>  {        "changed":  false,        "ping":  "pong" } #  ansible  -­i  inventory  -­m  ping  app-­server 15.125.74.215  |  success  >>  {        "changed":  false,        "ping":  "pong" } #  ansible  -­i  inventory  -­m  ping  all 15.125.74.215  |  success  >>  {        "changed":  false,        "ping":  "pong" } 127.0.0.1  |  success  >>  {        "changed":  false,        "ping":  "pong" } 25 inventoryファイルの[グループ名] を指定します [グループ名]にallを指定すると全 てのinventoryのエントリに対して pingモジュールが実行されます "ping"に対して"pong"が返ってき ていれば接続に成功しています
  • 26. Ansibleについて⑤ ●  setupモジュールを使用してapp-­serverの情報を取得してみます #  ansible  -­i  inventory  -­m  setup  app-­server 15.125.74.215  |  success  >>  {        "ansible_facts":  {                "ansible_all_ipv4_addresses":  [                        "10.0.0.39"                ],                "ansible_all_ipv6_addresses":  [                        "fe80::f816:3eff:feab:3799"                ],                "ansible_architecture":  "x86_64",                "ansible_bios_date":  "01/01/2011",                "ansible_bios_version":  "Bochs", <...> "ansible_distribution":  "CentOS",                "ansible_distribution_major_version":  "6",                "ansible_distribution_release":  "Final",                "ansible_distribution_version":  "6.3",                "ansible_domain":  "", <...>  "changed":  false } 26 取得した情報は、Ansibleで再利用 することが可能です
  • 27. Ansibleについて⑥ Ansibleの挙動 以下にAnsibleの動きを図示します 27 Ansible 実行可能ファイル 実行可能ファイル ping モジュール setup モジュール Inventory ファイル sshd1 2 3 指定されたモジュールをインポートする ターゲットノードにsftp/scpで実行可 能ファイルを転送してssh経由でログイ ンし実行する 指定されたグループのホスト 群に関する情報を取得する モジュールから実行ファイル を生成です
  • 28. IaaS基盤を管理する  〜~  Ansibleによる操作① 事前準備 ●  ハンズオンで利用するAnsibleのモジュールをダウンロードします [URL]  https://github.com/h-­saito/openstack-­sample-­app #  cd  /usr/share/ansible/cloud #  wget  -­O  hp_nova_floating_ip  -­-­no-­check-­certificate  http://goo.gl/mnSsh4 #  wget  -­O  hp_nova_floating_ip_associate  -­-­no-­check-­certificate    http://goo.gl/GYW1RR #  ls cloudformation                ec2_metric_alarm                              nova_compute                                      rax_facts digital_ocean                  ec2_scaling_policy                          nova_keypair                                      rax_files digital_ocean_domain    ec2_snapshot                                      ovirt                                                    rax_files_objects digital_ocean_sshkey    ec2_tag                                                quantum_floating_ip                        rax_identity docker                                ec2_vol                                                quantum_floating_ip_associate    rax_keypair docker_image                    ec2_vpc                                                quantum_network                                rax_network ec2                                      elasticache                                        quantum_router                                  rax_queue ec2_ami                              gce                                                        quantum_router_gateway                  rds ec2_ami_search                gce_lb                                                  quantum_router_interface              rds_param_group ec2_asg                              gce_net                                                quantum_subnet                                  rds_subnet_group ec2_eip                              gce_pd                                                  rax                                                        route53 ec2_elb                              gc_storage                                          rax_cbs                                                s3 ec2_elb_lb                        glance_image                                      rax_cbs_attachments                        virt ec2_facts                          hp_nova_floating_ip                        rax_clb                                                vsphere_guest ec2_group                          hp_nova_floating_ip_associate    rax_clb_nodes ec2_key                              keystone_user                                    rax_dns ec2_lc                                linode                                                  rax_dns_record 28
  • 29. IaaS基盤を管理する  〜~  Ansibleによる操作② Internet接続用にフローティングIPを払い出す ●  hp_nova_floating_ipモジュールを利用してフローティングIPを払い出します #  cd  $HOME #  ansible  -­i  inventory  -­m  hp_nova_floating_ip   -­a  "state=present  login_username=$OS_USERNAME  login_password=$OS_PASSWORD login_tenant_name=$OS_TENANT_NAME  auth_url=$OS_AUTH_URL  region_name=$OS_REGION_NAME"  localhost 127.0.0.1  |  success  >>  {        "changed":  true,        "id":  "610f4d22-­4db7-­44a5-­9af1-­7ef652bb553c",        "ip":  "15.125.79.34",        "pool":  "Ext-­Net" } ●  払い出されたフローティングIPを確認しておきます #  nova  floating-­ip-­list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  Ip                        |  Server  Id  |  Fixed  Ip    |  Pool        | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ |  15.125.74.215  |                      |  10.0.0.39  |  Ext-­Net  | |  15.125.79.34    |                      |  -­                  |  Ext-­Net  | |  15.125.118.53  |                      |  10.0.0.3    |  Ext-­Net  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+ 29
  • 30. IaaS基盤を管理する  〜~  Ansibleによる操作③ 仮想マシンを作成する ●  nova_computeモジュールを利用して仮想マシン(app-­server1)を作成して起動します #  ansible  -­i  inventory  -­m  nova_compute   -­a  "state=present  login_username=$OS_USERNAME  login_password=$OS_PASSWORD login_tenant_name=$OS_TENANT_NAME  auth_url=$OS_AUTH_URL  region_name=$OS_REGION_NAME name=app-­server1 image_id=202e7659-­f7c6-­444a-­8b32-­872fe2ed080c flavor_id=101 key_name=key-­for-­app-­server security_groups=security-­for-­app-­server"  localhost 127.0.0.1  |  success  >>  {        "changed":  true,        "id":  "093745cf-­8d31-­49fc-­8a7b-­95f5c98a6430",        "info":  {                "OS-­EXT-­AZ:availability_zone":  "az3",                "OS-­EXT-­STS:power_state":  1,                "OS-­EXT-­STS:task_state":  null,                "OS-­EXT-­STS:vm_state":  "active",                "accessIPv4":  "",                "accessIPv6":  "", <...>        "private_ip":  "10.0.0.40",        "public_ip":  "",        "status":  "ACTIVE" } 30 image_idには、novaコマンドとは 違ってuuidを指定してやる必要が あるので注意してください "private_ip"のアドレスを、次頁 のフローティングIP割り当て時に "-­-­fixed_ip"  として指定します 作成するサーバ名はapp-­server1と します
  • 31. IaaS基盤を管理する  〜~  Ansibleによる操作④ 仮想マシンにフローティングIPを付与してInternetに接続する ●  app-­server1が作成されたことを確認します #  nova  list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  ID                                                                      |  Name                |  Status  |  Task  State  |  Power  State  |  Networks                                                                  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  ed98ec64-­6884-­4c7f-­b462-­8e375efd7148  |  app-­server    |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.39,  15.125.74.215  | |  093745cf-­8d31-­49fc-­8a7b-­95f5c98a6430  |  app-­server1  |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.40                                | |  812c40ec-­538f-­4efe-­8511-­eab531d99807  |  step-­server  |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.3,  15.125.118.53    | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ ●  app-­server1にフローティングIPを割り当てます #  ansible  -­i  inventory  -­m  hp_nova_floating_ip_associate   -­a  "state=present  login_username=$OS_USERNAME  login_password=$OS_PASSWORD login_tenant_name=$OS_TENANT_NAME  auth_url=$OS_AUTH_URL  region_name=$OS_REGION_NAME name=app-­server1  floating_ip=15.125.79.34  fixed_ip=10.0.0.40"  localhost 127.0.0.1  |  success  >>  {        "changed":  true,        "fixed_ip":  "10.0.0.40",        "floating_ip":  "15.125.79.34",        "id":  "093745cf-­8d31-­49fc-­8a7b-­95f5c98a6430",        "name":  "app-­server1" } ●  割り当てたフローティングIPに対してstep-­serverからsshログインできることを確認します #  ssh  root@15.125.79.34 [root@app-­server1  ~˜]#  hostname app-­server1 31
  • 32. 現在のシステム構成 IaaS基盤を管理する  〜~  Ansibleによる操作⑥ 32 <userID>-­router Router step-­server Instance Ext-­Net <UserID>-­network 10.0.0.0/24 10.0.0.1 10.0.0.N app-­server Instance 10.0.0.N app-­server1 Instance 10.0.0.N app-­server1を新たに作成 しました
  • 33. IaaS基盤を管理する  〜~  Ansibleによる操作⑦ Dynamic  Inventoryを利用する ●  前章で作成した仮想マシンをAnsibleから操作するためにエディタでフローティングIPを Inventoryファイルの[app-­server]グループに追加します ※step-­serverから接続可能なIPアドレスであればプライベートIP(fixed_ip)でもかまいません 〜~[app-­server]グループのみ抜粋〜~ [app-­server] 15.125.74.215 15.125.79.34 ●  pingモジュールで接続確認を行います #  ansible  -­i  inventory  -­m  ping  app-­server 15.125.79.34  |  success  >>  {        "changed":  false,        "ping":  "pong" } 15.125.74.215  |  success  >>  {        "changed":  false,        "ping":  "pong" } 33
  • 34. IaaS基盤を管理する  〜~  Ansibleによる操作⑧ Dynamic  Inventoryを利用する ●  Dynamic  Inventoryとは? Ansibleでは操作対象となるノードをInventoryファイルにあらかじめ記載しておく必要がありますが、 プログラムを利用してInventoryファイルの内容を動的に生成する仕組みがDynamic  Inventoryです nova.pyはテナント名のホストグループを動的に生成します ●  Dynamic  Inventory生成プログラムをダウンロードします #  cd  $HOME #  wget  -­O  nova.py  -­-­no-­check-­certificate  http://goo.gl/Iwz9iY #  chmod  +x  nova.py #  ./nova.py  -­-­list {    "10186636762086-­Project":  {        "_meta":  {            "hostvars":  {                "15.125.74.215":  { <...> "hosts":  [            "15.125.79.34",            "15.125.74.215"        ],        "vars":  {}    } } 34 ホストグループ名:  10186636762086-­Project 15.125.79.34 15.125.74.215
  • 35. IaaS基盤を管理する  〜~  Ansibleによる操作⑨ Dynamic  Inventoryを利用する ●  Dynamic  Inventoryを利用してみましょう 今回利用するnova.pyは、Inventoryファイル(inventory)内で<グループ名:vars>で設定していたログイン情報は生成 しないため、ansibleコマンドの引数として-­u  <ユーザID>と-­kで実行時のパスフレーズ入力オプションを明示的に指 定してやる必要があります [書式]  ansible  -­i  <収集プログラム名>  -­m  <モジュール名>  -­u  <ユーザID>  -­k  ホストグループ名 #  ansible  -­i  nova.py  -­m  ping  -­u  root  -­k  $OS_TENANT_NAME SSH  password:  ******** 15.125.74.215  |  success  >>  {        "changed":  false,        "ping":  "pong" } 15.125.79.34  |  success  >>  {        "changed":  false,        "ping":  "pong" } 35
  • 36. IaaS基盤を管理する  〜~  Playbookによる操作① 仕事をまとめるPlaybook ここまでは、ansibleコマンドにより単発の仕事をAnsibleに実行させてきまし たが、現実ではこのようが仕事が複数集まって手順として実施されることにな ります。Ansibleは、下記のような手順をPlaybookとして定義して実行するこ とが可能です。 以降ではAnsibleのPlaybook機能を利用して、手順書にしたがった作業を 自動化してみましょう。 36 パッケージインストール 設定変更 デーモン再起動 実行順序は常に保証される必要がある AnsiblePlaybook 1 2 3
  • 37. IaaS基盤を管理する  〜~  Playbookによる操作② Playbookを利用する AnsibleのPlaybookを利用して、サンプルアプリケーションをインストールし てみましょう。 サンプルアプリケーションの詳細は以下のサイトで確認できます。 ü  [URL]  https://github.com/irixjp/openstack-­sample-­app 手順は以下の通りです(ここでは手順の確認のみで作業は実施しません) 37 □  1.  インストール対象サーバにrootユーザでsshログインする -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ □  2.  以下の手順でコマンドを実行してインストールを行う -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ #  yum  install  -­q  -­y  git #  cd  /root #  git  clone  https://github.com/irixjp/openstack-­sample-­app.git #  sh  /root/openstack-­sample-­app/server-­setup/install_web.sh #  sh  /root/openstack-­sample-­app/server-­setup/install_rest.sh #  sh  /root/openstack-­sample-­app/server-­setup/install_db.sh #  sh  /root/openstack-­sample-­app/server-­setup/web.init.sh #  sh  /root/openstack-­sample-­app/server-­setup/rest.init.sh -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ □  3.  プラウザから  http://対象サーバ/  にアクセスして動作確認を行う
  • 38. IaaS基盤を管理する  〜~  Playbookによる操作③ サンプル・アプリケーションのインストール作業を自動化する ●  サンプルアプリケーションをダウンロードします [URL]  https://github.com/h-­saito/openstack-­sample-­app/blob/master/examples/playbooks/sample-­app.yml #  wget  -­O  sample-­app.yml  -­-­no-­check-­certificate  http://goo.gl/FTvTpm 〜~  sample-­app.yaml  〜~ -­-­-­ -­  name:  deploy  sample  application    hosts:  "{{  target  }}"    tasks:    -­  name:  package  install        yum:  name={{  item  }}  state=latest        with_items:        -­  git    -­  name:  git  clone  sample-­app        git:  repo=https://github.com/irixjp/openstack-­sample-­app.git  dest=/root/openstack-­sample-­app    -­  name:  execute  install_web        raw:  /bin/sh  /root/openstack-­sample-­app/server-­setup/install_web.sh    -­  name:  execute  install_rest        raw:  /bin/sh  /root/openstack-­sample-­app/server-­setup/install_rest.sh    -­  name:  execute  install_db        raw:  /bin/sh  /root/openstack-­sample-­app/server-­setup/install_db.sh    -­  name:  web  init        raw:  /bin/sh  /root/openstack-­sample-­app/server-­setup/web.init.sh    -­  name:  rest  init        raw:  /bin/sh  /root/openstack-­sample-­app/server-­setup/rest.init.sh 38 hosts:  セクションにはInventoryファイル内の ホストグループを設定します task:  セクションにはAnsibleに実行させる手順 を実行順に列挙します
  • 39. IaaS基盤を管理する  〜~  Playbookによる操作④ サンプル・アプリケーションのインストール作業を自動化する ●  サンプルアプリケーションをapp-­server,app-­server2にインストールします #  ansible-­playbook  -­i  nova.py  -­u  root  -­k  -­-­extra-­vars="target=$OS_TENANT_NAME"  sample-­app.yml SSH  password:    ******** PLAY  [deploy  sample  application]  **********************************************   GATHERING  FACTS  ***************************************************************   ok:  [15.125.74.215] ok:  [15.125.79.34] TASK:  [package  install]  *******************************************************   changed:  [15.125.79.34]  =>  (item=git) changed:  [15.125.74.215]  =>  (item=git) TASK:  [git  clone  sample-­app]  **************************************************   changed:  [15.125.74.215] changed:  [15.125.79.34] TASK:  [execute  install_web]  ***************************************************   ok:  [15.125.74.215] ok:  [15.125.79.34] TASK:  [execute  install_rest]  **************************************************   ok:  [15.125.79.34] ok:  [15.125.74.215] TASK:  [execute  install_db]  ****************************************************   ok:  [15.125.74.215] ok:  [15.125.79.34] TASK:  [web  init]  **************************************************************   ok:  [15.125.74.215] ok:  [15.125.79.34] TASK:  [rest  init]  *************************************************************   ok:  [15.125.79.34] ok:  [15.125.74.215] PLAY  RECAP  ********************************************************************   15.125.74.215                            :  ok=8        changed=2        unreachable=0        failed=0       15.125.79.34                              :  ok=8        changed=2        unreachable=0        failed=0   39
  • 40. IaaS基盤を管理する  〜~  Playbookによる操作⑤ サンプル・アプリケーションのインストール作業を自動化する app-­server,  app-­server1にブラウザでアクセスしてみましょう 40
  • 41. まとめ ここまでの作業をまとめます ü  Ansibleの仕組みを説明しました ü  Ansibleを利用してIaaS基盤上に仮想マシンを作成しました ü  Dynamic  Inventoryを利用して動的にInventoryを生成する方法を説明 しました ü  AnsibleのPlaybookを利用して複数手順を1つにまとめる方法について 説明しました ü  Playbookを利用してサンプルアプリケーションを同時に複数ホストに対し てインストールしました 41
  • 42. 現在のシステム構成 自動化編  完了時点 42 <userID>-­router Router step-­server Instance Ext-­Net <UserID>-­network 10.0.0.0/24 10.0.0.1 10.0.0.N app-­server Instance 10.0.0.N app-­server1 Instance 10.0.0.Nサンプルアプリケーションを インストールしました
  • 43. 自動化編  〜~おつかれさまでした〜~ 43
  • 44. 追補1:  Playbookで仮想マシンを作成する 44
  • 45. Playbookで仮想マシンを作成する① 仮想マシン作成手順のPlaybook化を進める ここまでの作業を手順としてまとめると、以下のようになります •  フローティングIPを払い出す(hp_nova_floating_ipモジュール) •  仮想マシンを作成して起動する(nova_computeモジュール) •  フローティングIPを仮想マシンに割り当てる (hp_nova_floating_ip_associateモジュール) 45 hp_nova_floating_ip nova_compute hp_nova_floating_ip_associate AnsiblePlaybook 1 2 3
  • 46. Playbookで仮想マシンを作成する② ●  Playbookをダウンロードします [URL]  https://github.com/h-­saito/openstack-­sample-­app/blob/master/examples/playbooks/ #  cd  $HOME  &&  source  openrc  &&  export  ANSIBLE_HOST_KEY_CHECKING=False #  wget  -­O  vm_with_floating_ip.yml  -­-­no-­check-­certificate  http://goo.gl/WjOzoP ●  仮想マシン(app-­server3)を作成します #  ansible-­playbook  -­i  inventory  -­-­extra-­vars=" state=present  user=$OS_USERNAME  password=$OS_PASSWORD  tenant=$OS_TENANT_NAME auth_url=$OS_AUTH_URL  region=$OS_REGION_NAME server_name=app-­server3"  vm_with_floating_ip.yml PLAY  [create  vm  and  associate  floating_ip]  ************************************   GATHERING  FACTS  ***************************************************************   ok:  [127.0.0.1] TASK:  [create  floating_ip]  ****************************************************   changed:  [127.0.0.1] TASK:  [create  vm  instance]  ****************************************************   changed:  [127.0.0.1] TASK:  [associate  floating_ip  to  vm  instance]  **********************************   changed:  [127.0.0.1] PLAY  RECAP  ********************************************************************   127.0.0.1                                    :  ok=4        changed=3        unreachable=0        failed=0   46
  • 47. Playbookで仮想マシンを作成する③ ●  vm_with_floating_ip.yml  〜~前編〜~ 今回利用したPlaybookの内容は以下の通りです -­-­-­ -­  name:  create  vm  and  associate  floating_ip    hosts:  localhost    vars:        image_id:  "202e7659-­f7c6-­444a-­8b32-­872fe2ed080c"        flavor_id:  "101"        key_name:  "key-­for-­app-­server"        sec_group:  "security-­for-­app-­server"    tasks:    -­  name:  create  floating_ip        local_action:  hp_nova_floating_ip            state={{  state  }}            login_username={{  user  }}            login_password={{  password  }}            login_tenant_name={{  tenant  }}            auth_url={{  auth_url  }}        register:  floating_ip 47 [解説] Playbookを構成するブロックの役割は以下の 通りです ======================================== hosts  -­>  Playbookを適用する対象ホスト                  グループ -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ vars    -­>  Playbook内で利用する変数を定義                  するセクション                  定義した変数は  {{  変数名  }}  で                  値に置き換えられる                  ansible-­playbookコマンド実行時                  -­-­extra-­vars  "変数名=値  ..."                  としてオプション指定することも                  可能 -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­ tasks  -­>  Playbookで実行するモジュール群                  を列挙する。記載順に実行される -­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­
  • 48. Playbookで仮想マシンを作成する④ ●  vm_with_floating_ip.yml  〜~中編〜~    -­  name:  create  vm  instance        local_action:  nova_compute            state={{  state  }}            login_username={{  user  }}            login_password={{  password  }}            login_tenant_name={{  tenant  }}            auth_url={{  auth_url  }}            name={{  server_name  }}            image_id={{  image_id  }}            flavor_id={{  flavor_id  }}            key_name={{  key_name  }}            security_groups={{  sec_group  }}        register:  instance 48
  • 49. Playbookで仮想マシンを作成する④ ●  vm_with_floating_ip.yml  〜~後編〜~    -­  name:  associate  floating_ip  to  vm  instance        local_action:  hp_nova_floating_ip_associate            state={{  state  }}            login_username={{  user  }}            login_password={{  password  }}            login_tenant_name={{  tenant  }}            auth_url={{  auth_url  }}            name={{  server_name  }}            floating_ip={{  floating_ip.ip  }}            fixed_ip={{  instance.private_ip  }} ## ##  [EOF] ## 49
  • 50. 追補2:  サンプル・アプリケーションの展開 50
  • 51. サンプル・アプリケーションの展開① 役割を分けたノードへの展開 WEB/ReST/DBの3台の仮想マシンを構築して、それぞれ役割 ごとにアプリケーションをインストールしてみましょう。 51
  • 52. サンプル・アプリケーションの展開② 役割を分けたノードへの展開 ●  web/rest/dbサーバをPlaybookで作成します 小さめのフレーバで3台の仮想マシンを作成します #  cd  $HOME  &&  source  openrc  &&  export  ANSIBLE_HOST_KEY_CHECKING=False #  ansible-­playbook  -­i  inventory  -­-­extra-­vars=" state=present  user=$OS_USERNAME  password=$OS_PASSWORD  tenant=$OS_TENANT_NAME auth_url=$OS_AUTH_URL  region=$OS_REGION_NAME flavor_id=100  server_name=web"  vm_with_floating_ip.yml   #  ansible-­playbook  -­i  inventory  -­-­extra-­vars=" state=present  user=$OS_USERNAME  password=$OS_PASSWORD  tenant=$OS_TENANT_NAME auth_url=$OS_AUTH_URL  region=$OS_REGION_NAME flavor_id=100  server_name=rest"  vm_with_floating_ip.yml   #  ansible-­playbook  -­i  inventory  -­-­extra-­vars=" state=present  user=$OS_USERNAME  password=$OS_PASSWORD  tenant=$OS_TENANT_NAME auth_url=$OS_AUTH_URL  region=$OS_REGION_NAME flavor_id=100  server_name=db"  vm_with_floating_ip.yml   #  nova  list +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  ID                                                                      |  Name                |  Status  |  Task  State  |  Power  State  |  Networks                                                                  | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  66bfb4d4-­73b1-­405b-­8716-­de0356beb069  |  db                    |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.47,  15.125.76.128  | |  184a20d5-­7bbc-­451f-­bc27-­fd3533f89f50  |  rest                |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.46,  15.125.76.0      | |  812c40ec-­538f-­4efe-­8511-­eab531d99807  |  step-­server  |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.3,  15.125.118.53    | |  b2b2cadc-­02a9-­42f6-­befe-­9a7bf8b1f41a  |  web                  |  ACTIVE  |  -­                    |  Running          |  h-­saito-­network=10.0.0.45,  15.125.75.89    | +-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ 52
  • 53. サンプル・アプリケーションの展開③ 役割を分けたノードへの展開 ●  Playbook(sample-­app-­multinode.yml)をダウンロードします #  wget  -­O  sample-­app-­multinode.yml  -­-­no-­check-­certificate  http://goo.gl/wTCZQv ●  エディタでInventoryファイル(sample-­hosts)新規に作成してdb/rest/dbサーバを登録します web,rest,dbには、作成した仮想マシンのフローティングIPを設定してください #  nano  sample-­hosts 〜~  sample-­hosts  ここから  〜~ [web] 15.125.75.89  ansible_ssh_user=root  ansible_ssh_pass=<パスフレーズ> [rest] 15.125.76.0  ansible_ssh_user=root  ansible_ssh_pass=<パスフレーズ> [db] 15.125.76.128  ansible_ssh_user=root  ansible_ssh_pass=<パスフレーズ> 〜~  sample-­hosts  ここまで  〜~ ●  pingモジュールで接続確認を行います #  ansible  -­i  sample-­hosts  -­m  ping  all 15.125.75.89  |  success  >>  {  "changed":  false,    "ping":  "pong"  }   15.125.76.128  |  success  >>  {    "changed":  false,    "ping":  "pong"  }   15.125.76.0  |  success  >>  {    "changed":  false,      "ping":  "pong"  } 53
  • 54. サンプル・アプリケーションの展開④ 役割を分けたノードへの展開 ●  エディタでendpoint.conf.j2ファイルを新規に作成します 〜~  endpoint.conf.j2  ここから  〜~ [rest-­server] rest_host  =  {{  rest  }} rest_endpoint  =  http://%(rest_host)s:5555/bbs [db-­server] db_host  =  {{  db  }} db_endpoint  =  mysql://user:password@%(db_host)s/sample_bbs?charset=utf8 〜~  endpoint.conf.j2  ここまで  〜~ ●  セキュリティグループにMySQL(TCP  Port:3306)とrestサーバのアプリケーション(TCP  Port:5555) を追加します #  nova  secgroup-­add-­rule  security-­for-­app-­server  tcp  3306  3306  10.0.0.0/24 +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  IP  Protocol  |  From  Port  |  To  Port  |  IP  Range        |  Source  Group  | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  tcp                  |  3306            |  3306        |  10.0.0.0/24  |                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ #  nova  secgroup-­add-­rule  security-­for-­app-­server  tcp  5555  5555  10.0.0.0/24 +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  IP  Protocol  |  From  Port  |  To  Port  |  IP  Range        |  Source  Group  | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ |  tcp                  |  5555            |  5555        |  10.0.0.0/24  |                            | +-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­+-­-­-­-­-­-­-­-­-­-­-­-­-­-­+ 54
  • 55. サンプル・アプリケーションの展開⑤ 役割を分けたノードへの展開 ●  Playbook(sample-­app-­multinode.yml)をダウンロードします [URL]  https://github.com/h-­saito/openstack-­sample-­app #  wget  -­O  sample-­app-­multinode.yml  -­-­no-­check-­certificate  http://goo.gl/Enk93Z ●  Playbook(sample-­app-­multinode.yml)を実行します web,rest,dbには、作成した仮想マシンのプライベートIPを設定してください #  ansible-­playbook  -­i  sample-­hosts  -­-­extra-­vars=" web=10.0.0.45  rest=10.0.0.46  db=10.0.0.47"  sample-­app-­multinode.yml 55
  • 56. サンプル・アプリケーションの展開⑥ 役割を分けたノードへの展開 ●  PlayBook(sample-­app-­multinode.yml)実行結果 Playbookに記述した条件(when)に合致した場合のみ処理が実行されているのがわかります PLAY  [deploy  sample  application]  ********************************************** GATHERING  FACTS  *************************************************************** ok:  [15.125.78.48]  ok:  [15.125.78.41]  ok:  [15.125.78.46] TASK:  [package  install]  ******************************************************* changed:  [15.125.78.41]  =>  (item=git)  changed:  [15.125.78.48]  =>  (item=git)  changed:  [15.125.78.46]  =>  (item=git) TASK:  [git  clone  sample-­app]  ************************************************** changed:  [15.125.78.41]  changed:  [15.125.78.46]  changed:  [15.125.78.48] TASK:  [install  web  service]  *************************************************** skipping:  [15.125.78.46]  skipping:  [15.125.78.48]  ok:  [15.125.78.41] TASK:  [install  rest  service]  **************************************************   skipping:  [15.125.78.48]  skipping:  [15.125.78.41]  ok:  [15.125.78.46] TASK:  [install  db  service]  **************************************************** skipping:  [15.125.78.46]  skipping:  [15.125.78.41]  ok:  [15.125.78.48] TASK:  [copy  endpoint.conf  to  all  servers]  ************************************* skipping:  [15.125.78.48]  changed:  [15.125.78.46]  changed:  [15.125.78.41] NOTIFIED:  [start  web  service]  ************************************************* skipping:  [15.125.78.46]  ok:  [15.125.78.41] NOTIFIED:  [start  rest  service]  ************************************************ skipping:  [15.125.78.41]  ok:  [15.125.78.46] PLAY  RECAP  ******************************************************************** 15.125.78.41                              :  ok=6        changed=3        unreachable=0        failed=0 15.125.78.46                              :  ok=6        changed=3        unreachable=0        failed=0 15.125.78.48                              :  ok=4        changed=2        unreachable=0        failed=0 56
  • 57. 追補3:APIによる操作 57
  • 58. APIによる操作① APIによる操作 クラウド基盤管理の自動化を進めるにあたって、外部プログラムからの制御 は必須の要件となります。 OpenStackの各コンポーネントは、外部プログラムから制御されることを想 定したAPIを提供しています。 58
  • 59. APIによる操作② ●  novaクライアントライブラリを利用して仮想マシンのリストを取得してみます ※  ">>>"はbpythonのプロンプトです #  cd  $HOME  &&  source  openrc  &&  export  ANSIBLE_HOST_KEY_CHECKING=False #  bpython >>>  from  novaclient.client  import  Client  as  NV >>>  from  neutronclient.v2_0.client  import  Client  as  NT >>>  import  os >>>  U  =  os.environ.get('OS_USERNAME') >>>  P  =  os.environ.get('OS_PASSWORD') >>>  T  =  os.environ.get('OS_TENANT_NAME') >>>  A  =  os.environ.get('OS_AUTH_URL') >>>  R  =  os.environ.get('OS_REGION_NAME') >>>  nv  =  NV(2,  U,  P,  T,  A,  region_name=R) >>>  nv.servers.list() [<Server:  db>,  <Server:  rest>,  <Server:  web>,  <Server:  app-­server1>,  <Server:  app-­server>,  <Server:  step -­server>] 59 仮想マシン毎に作られるServerクラスのインスタンス リストが取得できます
  • 60. APIによる操作③ ●  Serverクラスのインスタンスから仮想マシン情報(名前、UUID、Networkなど)を参照してみます >>>  vm  =  nv.servers.list()[0] >>>  vm.name u'db' >>>  vm.id u'263d11e7-­d83b-­4864-­9286-­e0bc836da751' >>>  vm.flavor {u'id':  u'100',  u'links':  [{u'href':  u'https://region-­a.geo-­1.compute.hpcloudsvc.com/10012734753930/flav ors/100',  u'rel':  u'bookmark'}]} >>>  vm.addresses {u'h-­saito-­network':  [{u'OS-­EXT-­IPS-­MAC:mac_addr':  u'fa:16:3e:14:b6:3a',  u'version':  4,  u'addr':  u'10.0. 0.50',  u'OS-­EXT-­IPS:type':  u'fixed'},  {u'OS-­EXT-­IPS-­MAC:mac_addr':  u'fa:16:3e:14:b6:3a',  u'version':  4,   u'addr':  u'15.125.78.48',  u'OS-­EXT-­IPS:type':  u'floating'}]} ●  参照だけでなく仮想マシンの起動・停止・再起動などの操作も可能です >>>  vm.status u'ACTIVE' >>>  vm.stop() >>>  vm.get() >>>  vm.status u'SHUTOFF' 60
  • 61. APIによる操作④ ●  GuestOSのイメージリストを取得してみます >>>  nv.images.list() [        <Image:  Debian  Wheezy  7.6  64-­bit  20140714  -­  Partner  Image>,        <Image:  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)>,        <Image:  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)>,        <Image:  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)>,        <Image:  CentOS  5.6  Server  64-­bit  20111207  (Kernel)  (deprecated)>, ...        <Image:  Ubuntu  Quantal  12.10  Server  64-­bit  20121017  (deprecated)>,        <Image:  Ubuntu  Raring  13.04  Server  64-­bit  20130601  (deprecated)> ] 61 利用可能なImageクラスのリストが取得できます
  • 62. APIによる操作⑤ ●  フレーバのイメージリストを取得してみます >>>  nv.flavors.list() [        <Flavor:  standard.xsmall>,        <Flavor:  standard.small>,        <Flavor:  standard.medium>,        <Flavor:  standard.large>,        <Flavor:  standard.xlarge>,        <Flavor:  standard.2xlarge>,        <Flavor:  standard.4xlarge>,        <Flavor:  standard.8xlarge>,        <Flavor:  highmem.large>,        <Flavor:  highmem.xlarge>,        <Flavor:  highmem.2xlarge> ] 62 利用可能なFlavorクラスのリストが取得できます
  • 63. APIによる操作⑥ 仮想マシンを作成する ●  CLIと同様に仮想マシン(app-­server2)を作成して起動します >>>  sg  =  nv.security_groups.find(name='security-­for-­app-­server') >>>  vm  =  nv.servers.create( ...  name='app-­server2', ...  image='202e7659-­f7c6-­444a-­8b32-­872fe2ed080c', ...  flavor='100', ...  security_groups=[sg.id], ...  key_name='key-­for-­app-­server') >>>  vm.status u'BUILD' >>>  vm.get() >>>  vm.status u'ACTIVE' >>>  nv.servers.list() [<Server:  app-­server2>,  <Server:  db>,  <Server:  rest>,  <Server:  web>,  <Server:  app-­server1>,  <Server:  app -­server>,  <Server:  step-­server>] 63 セキュリティグループはUUIDで指定する 必要があるため、予め  SecurityGroupクラス のインスタンス(sg)を取得しておく app-­server2がリストアップされた app-­server2の作成が終わって起動状態となった
  • 64. APIによる操作⑦ 仮想マシンを作成する ●  サービス提供用にフローティングIPを払い出します >>>  nv.floating_ips.create() <FloatingIP  fixed_ip=None,  id=d729b237-­541c-­44f6-­bed1-­0522196a7454,  instance_id=None,  ip=15.125.81.160,   pool=Ext-­Net> ●  払い出したフローティングIPを仮想マシン(app-­server2)に割り当てます >>>  vm.networks {u'h-­saito-­network':  [u'10.0.0.51']} ●  仮想マシン(app-­server2)にフローティングIP(15.125.81.160)を割り当てます >>>  nv.servers.add_floating_ip(vm.id,  '15.125.81.160',  fixed_address='10.0.0.51') >>>  vm.get() >>>  vm.networks {u'h-­saito-­network':  [u'10.0.0.51',  u'15.125.81.160']} ●  仮想マシン(app-­server2)にsshログインしてみます #  ssh  root@15.125.81.160 [root@app-­server2  ~˜]#  hostname app-­server2 64 15.125.81.160  が払い出された app-­server2のプライベートIPは   10.0.0.51 app-­server2にフローティングIP が割り当てられた