16
hbstudy#37 x IDCF クラウドハンズオン Chef Server および knife-cloudstack-fog 導入手順書 2012年9月1日 初版 @tafujish @anikundesu

hbstudy37 doc

Embed Size (px)

DESCRIPTION

http://connpass.com/event/927/

Citation preview

Page 1: hbstudy37 doc

hbstudy#37 x IDCF クラウドハンズオン

Chef Server および knife-cloudstack-fog

導入手順書

2012年 9月 1日

初版

@tafujish @anikundesu

Page 2: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

2 / 16

目次

1. この文書について .................................................................. 3

2. IDCF クラウド上に仮想マシン作成 .................................................... 4

1) CloudPortalから Chef Server 用の仮想マシンを作成 ............................... 4

2) SSH接続するためのネットワーク設定 ............................................. 4

3. Chef Serverの構築 ................................................................ 5

1) Chef Server用 VM(CentOS 6.1)に SSH ログイン .................................... 5

2) Chef Serverを導入 ............................................................. 5

4. Chef Workstation(knife-cloudstack-fog 実行環境)の構築 .............................. 7

1) Chef Workstation 操作用ユーザーの作成 .......................................... 7

2) Rubyコンパイル用パッケージ導入 ................................................ 7

3) Chef Workstation 環境の前提ソフトウェア導入 .................................... 7

4) knife-cloudstack-fogの各種設定 ................................................ 8

5. knife-cloudstack-fogから仮想マシン作成 ........................................... 11

1) knife-cloudstack-fogを使った VM 構築自動化 .................................... 11

6. Template ID、Service Offering ID、VMのインスタンス ID、Zone IDの調べ方 ........... 15

付録)公式の knife-cloudstack-fog をインストール ...................................... 16

Page 3: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

3 / 16

1. この文書について

この文書は、IDC フロンティアのクラウドサービス セルフタイプ(以下、IDCF クラウド)において、

Chef Server を構築し、knife-cloudstack-fogによる VM作成から Chef Server 管理下に登録するま

での手順を説明したものです。

検証は行っておりますが、動作を保証するものではありません。また、本手順書に従って操作をし

たことによって不利益、損害等が発生した場合でも、一切保証は致しません。

Page 4: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

4 / 16

2. IDCF クラウド上に仮想マシン作成

※IDCF クラウドの操作方法については、エントリーガイド(pp.21-27)を参照してください

1) CloudPortal から Chef Server 用の仮想マシンを作成

https://noahcloud.jp/ へアクセスし、配布したユーザ名/パスワードにてログインします。

以下の設定で仮想マシンを作成します。

テンプレート [LATEST] CentOS 6.1 64-bit

VMタイプ M4 ( Hourly ) 2CPU, 4GB RAM

ディスク選択 必要ありません

仮想マシン名 任意

グループ名 任意

SSH Keys SSH鍵生成

※生成後、秘密鍵をローカルにコピーしてください

2) SSH 接続するためのネットワーク設定

CloudPortalで TCP22番を開放するようポートフォーワーディングルールとファイアウォールを

設定します。

※ここでの設定は、仮想マシン作成後(ステータスが Runnning)になった後に実施してください

「リソース」>「ネットワーク」>「ポートフォーワーディング」にて、TCP22 番を転送します。

「リソース」>「ネットワーク」>「ファイアウォール」にて、TCP22番を開けます。

Page 5: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

5 / 16

3. Chef Server の構築

1) Chef Server 用 VM(CentOS 6.1)に SSH ログイン

ローカルの環境から、作成した仮想マシンに SSH 接続します。

2) Chef Server を導入

以下のコマンドで、RBEL リポジトリを追加後、yum コマンドで Chef サーバをインストールします。

その後、Chef Serverのセットアップスクリプトを実行します。

# rpm -Uvh http://rbel.co/rbel6

# yum install rubygem-chef-server

# setup-chef-server.sh

ここで、chef-server-webui サービスが正常に立ち上がりません。以下のコマンドで、Chef Server

のサービスが起動しているか確認します。

# service chef-server status

chef-server (pid ####) を実行中...

# service chef-server-webui status

chef-server-webui が停止していますが PID ファイルが残っています

実行中、という表示なら問題なし。検証時は『chef-server-webui が停止していますが PID ファイ

ルが残っています』というエラーが初回は必ず出てしまいます。この時は以下のコマンドを実行し、

プロセス再起動を行います。

# service chef-server-webui restart

ここで、CloudPortalの画面から「リソース」>「ネットワーク」>「ポートフォーワーディング」

と「ファイアウォール」にて、TCP/4040を公開します。

Page 6: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

6 / 16

次に、Chef-Server の Web 画面にアクセスできるか確認します。

URL およびログイン情報は以下の通りです。

URL http://(4040 番ポートを開放したグローバル IP):4040/

User名 admin

パスワード(初期設定) chef321go

ログイン直後、強制的にパスワード変更を求められるので、任意のパスワードに変更します。

Page 7: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

7 / 16

4. Chef Workstation(knife-cloudstack-fog 実行環境)の構築

1) Chef Workstation 操作用ユーザーの作成

Chef Workstation で操作を行うための一般ユーザーを作成し、パスワード設定と、SSHログインの

ための公開鍵を登録します。

# useradd hoge

# passwd hoge (念のためパスワードを設定)

# mkdir /home/hoge/.ssh

# cp /root/.ssh/authorized_keys /home/hoge/.ssh/

# chown -R hoge:hoge /home/hoge/.ssh

2) Rubyコンパイル用パッケージ導入

次に Rubyをコンパイルするために必要なパッケージをインストールします。また、gitも利用する

のでインストールします。

# yum install gcc make openssl-devel readline-devel libxslt-devel git

3) Chef Workstation 環境の前提ソフトウェア導入

SSH で先ほど作成したユーザーでログインします。

・RVM の導入

CentOS6の OS 標準の Ruby は 1.8.7 ですが、この後使う knife-cloudstack-fog では Ruby 1.9.3を利

用する必要があります。そのため、Chef Workstation ユーザー専用の Ruby 環境を、RVMを用いて構

築します。

下記コマンドを実行すると、RVMのインストール、および Ruby 1.9.3-p194 がソースコードからコン

パイルされ、インストールされます。

# su - hoge

$ curl -L https://get.rvm.io | bash -s stable --ruby

※ruby 1.9.3のコンパイルが行われるため、完了まで 10分程度かかります。

Page 8: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

8 / 16

インストール後、.bash_profileに rvm用設定が追記されたことを確認します。

$ cat ~/.bash_profile

(以下の行があることを確認)

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

確認後、.bash_profileをロードします。その後、rvm コマンド、および ruby –vで Ruby 1.9.3が

利用されていることを確認します。

$ source ~/.bash_profile

$ rvm list

rvm rubies

=* ruby-1.9.3-p194 [ x86_64 ]

$ ruby -v

ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

4) knife-cloudstack-fog の各種設定

ruby-gemで knife-cloudstack-fog をインストールします。ただし、公開されている

knife-cloudstack-fogでは、SSH 鍵認証に関連した機能の不足があるため、機能を追加したバージ

ョンを導入します。

(knife-cloudstack-fogのソース入手と gem ファイルのビルド)

$ cd ~

$ wget https://github.com/anikundesu/knife-cloudstack-fog/zipball/master -O

knife-cloudstack-fog.zip

$ unzip -q knife-cloudstack-fog.zip

$ cd anikundesu-knife-cloudstack-fog-(コミット番号)/

$ gem build knife-cloudstack-fog.gemspec

(gem で Chefと knife-cloudstack-fog のインストール)

$ gem install chef --no-ri --no-rdoc

$ gem install fog --no-ri --no-rdoc

$ gem install --local knife-cloudstack-fog-0.2.15.gem

Page 9: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

9 / 16

・knifeツール用の Directory 構造の準備

Knife コマンドを実行するために、ホームディレクトリの下に、chef-repo ディレクトリを作成しま

す。さらに knifeコマンド実行に必要なファイル群を展開します。その後、knife 設定ファイルを置

く chef-repo/.chefディレクトリを作成します。

$ cd ~

$ git clone git://github.com/opscode/chef-repo.git

$ mkdir -p ~/chef-repo/.chef

・knife用の環境セットアップ

まず、rootユーザーにて Chef Serverで Default で作成されている validationユーザー、および

webui ユーザーの秘密鍵をコピーします。

$ su -

(以下、root での作業)

# cp /etc/chef/validation.pem /etc/chef/webui.pem /home/hoge/chef-repo/.chef/

(validation.pem と webui.pem をコピー)

# chown -R hoge:hoge /home/hoge/chef-repo/.chef

# exit

$

次に、Chef Server、Workstationの初期設定を行います。

$ knife configure -i

WARNING: No knife configuration file found

Where should I put the config file? [/home/hoge/.chef/knife.rb]

/home/hoge/chef-repo/.chef/knife.rb

Please enter the chef server URL: [http://i-???-?????-VM.cs???cloud.internal:4000]

Please enter a clientname for the new client: [hoge](chef server で作るユーザー名)

Please enter the existing admin clientname: [chef-webui]

Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem]

/home/hoge/chef-repo/.chef/webui.pem

Please enter the validation clientname: [chef-validator]

Please enter the location of the validation key: [/etc/chef/validation.pem]

/home/hoge/chef-repo/.chef/validation.pem

Page 10: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

10 / 16

Please enter the path to a chef repository (or leave blank): /home/hoge/chef-repo

Creating initial API user...

Created client[hoge]

Configuration file written to /home/hoge/chef-repo/.chef/knife.rb

さらに、knife-cloudstack-fogで利用するための CloudStack API 情報、API エンドポイント URL情

報を、~/chef-repo/.chef/knife.rb に追記します。

$ vi ~/chef-repo/.chef/knife.rb

(以下の行を追加)

knife[:cloudstack_access_key_id] = "APIキー"

knife[:cloudstack_secret_access_key] = "秘密鍵"

knife[:cloudstack_api_endpoint] = "https://api.noahcloud.jp/portal/client/api"

API キーおよび秘密鍵は、IDCF クラウドのポータル右上の「マイプロファイル」をクリックすると

表示されます。(最新のエンドポイントの情報は FAQ を参照します)

・knife-cloudstack-fog の動作確認

以下のコマンドを実行し、knife-cloudstack-fog が正常に動作していることを確認します。

$ cd ~/chef-repo

$ knife cloudstack zone list

ID Name Network Type Security Groups?

1 jp-east-t1v Advanced No

Page 11: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

11 / 16

5. knife-cloudstack-fog から仮想マシン作成

1) knife-cloudstack-fog を使った VM 構築自動化

・SSH キーペアの準備

これから knife-cloudstack-fogにて新規作成する VM に SSH ログインするためのキーペアを準備し

ます。(1)~(3)のいずれかの方法で、キーペアを用意します。

(1) 仮想マシン作成時に作成した SSH鍵を利用する場合

ローカルに保存した秘密鍵を、仮想マシンへ SCP ファイル転送やテキストコピーで作成します。

(2) CloudStackにて生成させる場合

$ knife cloudstack keypair create -k (Keyの名前) -o (生成する秘密鍵ファイル名)

$ mv (秘密鍵) ~/chef-repo/.chef/

$ chmod 400 ~/chef-repo/.chef/(秘密鍵)

(3)ローカルで生成した SSHキーを登録する場合

$ ssh-keygen –b 2048

(パスフレーズは無しで作成すること)

$ knife cloudstack keypair create -k (Keyの名前) -p "(公開鍵を 1行で) "

・キーペアが登録されていることを確認

以下のコマンドで、keypair が CloudStack に登録されていることを確認します。

$ knife cloudstack keypair list

Name Fingerprint Private Key

(Key の名前) 37:7f:d8:8d:ee:13:06:42:12:48:47:ff:eb:e0:05:15

Page 12: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

12 / 16

・bootstrapスクリプトの作成

VM 作成後、Chef Clientとして動作するための一連の設定を行うスクリプト(bootstrap)を準備し

ます。拡張後の knife-cloudstack-fogの中に、CentOS 6用の bootstrap があるのでコピーします。

$ cd ~/chef-repo/.chef

$ mkdir bootstrap

$ cd bootstrap

$ cp ~/anikundesu-knife-cloudstack-fog-fbdcfea/erb/centos6.erb ./

・cookbookの入手と Chef Serverへのアップロード

下記サイトに Chef のコミュニティにより作成された Cookbook のリストがあるので、好きなものを

選んで導入することができます。

http://community.opscode.com/cookbooks

Cookbookのアップロードをするために、~/chef-repo ディレクトリで以下を実行します。

$ knife cookbook site install (cookbook 名)

$ knife cookbook upload (cookbook 名)

ここでは、例として getting-started、apache2という 2つの cookbookをアップロードします。

$ cd ~/chef-repo

$ git init

$ knife cookbook site install getting-started

$ knife cookbook site install apache2

$ knife cookbook upload -a

※site installにてローカルにダウンロードした cookbook すべてをアップロード

アップロード後、Chef Server の Web UI の「Cookbooks」タブに、uploadした cookbook が表示され

ることを確認します。

Page 13: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

13 / 16

・VMの作成

knife-cloudstack-fogは knifeコマンドに”cloudstack”から始まるサブコマンドを渡すことで実

行できます。

利用可能なサブコマンド一覧、および各コマンドに渡す引数は以下のように調べることができます。

利用可能サブコマンド一覧

$ knife cloudstack

knife cloudstack

FATAL: Cannot find sub command for: 'cloudstack'

Available cloudstack subcommands: (for details, knife SUB-COMMAND --help)

** CLOUDSTACK COMMANDS **

knife cloudstack template list (options)

knife cloudstack volume list (options)

knife cloudstack securitygroup list (options)

knife cloudstack server list (options)

knife cloudstack keypair list (options)

knife cloudstack keypair create (options)

knife cloudstack server delete INSTANCE_ID [INSTANCE_ID] (options)

knife cloudstack server stop INSTANCE_ID [INSTANCE_ID] (options)

knife cloudstack server create (options)

knife cloudstack zone list (options)

knife cloudstack diskofferings list (options)

knife cloudstack networks list (options)

knife cloudstack serviceoffering list (options)

Page 14: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

14 / 16

server create サブコマンドのオプション(--help)

$ knife cloudstack server create --help

knife cloudstack server create (options)

--server-url URL Chef Server URL

--key KEY API Client Key

~略~

仮想マシンを作成する際には、以下のような引数を渡すことで、VM作成と、Chef Server 管理下へ

の追加、および Cookbook に含まれる Recipe を実行してくれます。

$ knife cloudstack server create \

-s (service offering ID) -t (template ID) -z (zone ID) -d (bootstrap script) \

-i (SSH Private key of keypair) -k (CloudStack keypair name) \

-N (displayname on Chef Server/CloudStack UI) \

-r '[RECIPE1]', '[RECIPE2]',・・・

以下は、IDCFクラウド上で CentOS 6.1 64bitの仮想マシンを作り、getting-startedと apache2 の

Recipe を実行します。また、Service Offering として『S2』を指定しています。

(CentOS 6.1 64bit で VMを作る場合)

$ cd ~/chef-repo

$ knife cloudstack server create -s 30 -t 1021 -z 1 -d centos6 \

-i ~/chef-repo/.chef/srv2clt.pem -k srv2clt -N ChefClient3 \

-r 'recipe[getting-started]','recipe[apache2]'

・cookbookが実行されていることの確認

SSH で作成した clientにログインします。

Root のホームディレクトリに chef-getting-started.txt があることを確認し、内容も確認。

[Workstation]$ ssh –i ~/chef-repo/.chef/(秘密鍵) root@(作成した仮想マシンの IP)

[Chef Client]$ ls ~/

[Chef Client]$ cat chef-getting-started.txt

Page 15: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

15 / 16

Chef Server の Web UIの「Nodes」タブに、作成した仮想マシン(Node)が表示されることを確認し

ます。

6. Template ID、Service Offering ID、VM のインスタンス ID、Zone

ID の調べ方

いずれも knife cloudstack のサブコマンドで調べることができます。

$ knife cloudstack template list

(テンプレート一覧)

$ knife cloudstack serviceoffering list

(サービスオファリング一覧)

$ knife cloudstack server list

(作成したサーバ一覧)

$ knife cloudstack zone list

(ゾーン一覧)

参考 LINK

knife-cloudstack-fog 公式

http://rubygems.org/gems/knife-cloudstack-fog

IDCF クラウド対応 knife-cloudstack-fog 作成者 anikundesu

https://github.com/anikundesu/

Page 16: hbstudy37 doc

Chef Server および knife-cloudstack-fog 導入手順書

16 / 16

付録)公式の knife-cloudstack-fog をインストール

公式の knife-cloudstack-fog をインストールするには、現在インストールされている

knife-cloudstack-fogをアンインストールした後、gemインストールします。

$ gem uninstall knife-cloudstack-fog

Successfully uninstalled knife-cloudstack-fog-0.2.15

$ gem install knife-cloudstack-fog

Fetching: knife-cloudstack-fog-0.2.15.gem (100%)

Successfully installed knife-cloudstack-fog-0.2.15

1 gem installed

Installing ri documentation for knife-cloudstack-fog-0.2.15...

Installing RDoc documentation for knife-cloudstack-fog-0.2.15...