soft layerと運用管理の自動化・省力化あれこれ
TRANSCRIPT
Copyright © NHN Techorus Corp.
SoftLayer と運用管理の自動化・省力化あれこれ
Page 2
自己紹介
名前
大久保 智之(おおくぼ ともゆき)
所属 NHN テコラス株式会社 SE 部
経歴 SI 系会社で顧客先に常駐して運用管理業務を中心に関わった後、 フォースクーナ ( 現 NHN テコラス ) で MSP 業務に携わる 現在はクラウドを中心とした運用サービスの導入・運用を担当
Page 3
会社概要
社 名 NHN テコラス株式会社
事業 開始 2000 年よりデータセンター事業開始
事業 内容データセンター事業 クラウド事業マネージド事業 セキュリティ事業 EC 支援事業
管理 稼動サ ーバ 数 10,000 台以上( 2015 年 1 月現在)所 在 地 新宿 渋谷 大阪 浜松 名古屋 福岡
インターネット黎明期からの長い経験と管理稼働サーバ数 10,000 台以上を誇る豊富な実績
Page 4
事業紹介
データセンター
IT インフラ統合アウトソース
AWS 向け構築・運用パック
マルチクラウドマネージド
IT インフラ・マネージド事業
Page 5
事業紹介
高速データ転送CLOUD CONNECT
光ファイバネットワーク
BUSINESS CONNECT
大容量メール配信MMDS
クラウドゲームプラットフォーム
CLOUD GAMING PLATFORM
VPS/ レンタルサーバ
EX-CLOUD
メールセキュリティSecure MX
オプション・ソリューション
Page 6
事業紹介
教育機関のためのクラウドサービス
教育機関向けクラウド事業
EC 支援事業
Page 7
今日の話題
SoftLayer × Packer
SoftLayer × Consul
SoftLayer × cloud-init/chef
Page 8
SoftLayer × Packer
Page 9
SoftLayer × Packer
クラウド環境では仮想マシンイメージ管理が悩ましい
仮想マシンイメージの乱立 仮想マシンイメージ作成後のアップデート
仮想マシンイメージのバージョン管理
Page 10
Packer SoftLayer Builder
SoftLayer の FLEX イメージを作成できる Packer の Builder
使うためにはビルドが必要
Page 11
Packer SoftLayer Builder のビルド■Packer のダウンロードと展開# cd /usr/local/src# wget https://releases.hashicorp.com/packer/0.9.0/packer_0.9.0_linux_amd64.zip # unzip packer_0.9.0_linux_amd64.zip# mkdir /usr/local/packer# mv packer /usr/local/packer/packer
■ ビルド環境の用意 (CentOS6.6 64bit 版を使用 )# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm# yum install git mercurial golang –enablerepo=epel# export GOPATH=/usr/share/gocode
■ ソースコードのダウンロードと配置# git clone https://github.com/leonidlm/packer-builder-softlayer.git $GOPATH/src/github.com/leonidlm/packer-builder-softlayer# cd $GOPATH/src/github.com/leonidlm/packer-builder-softlayer# go get# cd /usr/local/src# wget https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/gosshold/source-archive.zip# unzip source-archive.zip# mv gosshold $GOPATH/src/code.google.com/p
■ ビルド# cd $GOPATH/src/github.com/leonidlm/packer-builder-softlayer# go build –o /usr/local/packer/packer-builder-softlayer main.go
Page 12
FLEX イメージビルド用設定ファイル例{ "variables": { "sl_username": "{{env `SL_USERNAME`}}", "sl_api_key": "{{env `SL_API_KEY`}}" }, "provisioners": [ { "type": "shell", "inline": [ "sudo yum install -y dnsmasq" ] } ],
"builders": [{ "type": "softlayer", "api_key": "{{user `sl_api_key`}}", "username": "{{user `sl_username`}}", "datacenter_name": "tok02", "base_os_code": "CENTOS_6_64", "image_name": "packer-centos-{{isotime}}", "image_description": "centos image created by packer at {{isotime}}", "image_type": "flex", "instance_name": "packer-centos-{{isotime}}", "instance_domain": "techorus.com", "instance_cpu": 1, "instance_memory": 1024, "instance_network_speed": 10, "instance_disk_capacity": 25, "ssh_port": 22, "ssh_timeout": "15m", "ssh_pty": "true", "instance_state_timeout": "25m" }]}
Page 13
FLEX イメージのビルド$ export SL_USERNAME=< あなたのユーザ名 >$ export SL_API_KEY=< あなたの API キー >$ sudo /usr/local/packer/packer build sl_centos.json
softlayer output will be in this color.
==> softlayer: Creating temporary ssh key for the instance...==> softlayer: Created SSH key with id '149598'==> softlayer: Creating an instance...==> softlayer: Created instance, id: '111b55ce-d25e-44e6-b1bd-52e8452fc5d7'==> softlayer: Waiting for the instance to become ACTIVE...==> softlayer: Waiting for SSH to become available...==> softlayer: Connected to SSH!==> softlayer: Provisioning with shell script: /tmp/packer-shell202280662***************( 略 ) ***************Build 'softlayer' finished.
==> Builds finished. The artifacts of successful builds are:--> softlayer: tok02::2dea6e7a-2763-4481-8c7a-0d6df4ec4e16
Page 14
SoftLayer × Consul
Page 15
SoftLayer × Consul
クラウド環境ではノード管理が悩ましい
IP アドレスの直打ちは出来ればやめたい
ノードの増減で都度設定を変更したくない
内部用のホスト名は外部に公開したくない
Page 16
今回試した構成
仮想サーバ ×3 台オーダー1 台をサーバー、 2 台をクライアント ( 最小構成 )プライベート側の IP アドレスを Consul を使って名前解決
Page 17
Consul と dnsmasq
Consul については、以下記事を参考にさせていただきました。
Consul, DNS and dnsmasq http://www.morethanseven.net/2014/04/25/consul/
【 Consul 】 dnsmasq で名前解決を行う方法を試してみた http://pocketstudio.jp/log3/2014/05/01/consul_with_dnsmasq_name_resolution/
Page 18
Consul のセットアップ■Consul サーバのセットアップ# cd /usr/local/src/# wget wget https://releases.hashicorp.com/consul/0.6.3/consul_0.6.3_linux_amd64.zip# unzip consul_0.6.3_linux_amd64.zip # cp consul /usr/bin/consul
■Consul クライアントのセットアップ# cd /usr/local/src/# wget wget https://releases.hashicorp.com/consul/0.6.3/consul_0.6.3_linux_amd64.zip# unzip consul_0.6.3_linux_amd64.zip # cp consul /usr/bin/consul
■Consul サーバの起動$ consul agent -server -bootstrap-expect=1 -data-dir=/tmp/consul -node=< ノード名 > -bind=< ノード名 > -ui-dir=/opt/consul/dist &
■Consul クライアントのクラスタへの参加$ consul agent -data-dir=/tmp/consul -node=< ノード名 > -bind=< クライアントの IP> -join=< サーバの IP> &
Page 19
dnsmasq のセットアップ # yum install dnsmasq
# cp -p /etc/dnsmasq.conf /etc/dnsmasq.conf.org
# vi /etc/dnsmasq.conf 以下 2 行を追加 server=/consul/127.0.0.1#8600 strict-order
# vi /etc/resolv.conf 先頭に「 127.0.0.1 」を追加 nameserver 127.0.0.1 nameserver 10.0.80.11 nameserver 10.0.80.12
# chkconfig dnsmasq on
# service dnsmasq start
Consulを名前解決する対象にする
名前解決の問い合わせ順を制御
Page 20
名前解決の確認sv1:# consul members Node Address Status Type Build Protocol DC server 10.132.79.180:8301 alive server 0.6.3 2 dc1 sv2 10.132.79.135:8301 alive client 0.6.3 2 dc1 sv3 10.132.79.137:8301 alive client 0.6.3 2 dc1
sv2:# consul members Node Address Status Type Build Protocol DC server 10.132.79.180:8301 alive server 0.6.3 2 dc1 sv2 10.132.79.135:8301 alive client 0.6.3 2 dc1 sv3 10.132.79.137:8301 alive client 0.6.3 2 dc1
sv2:# host sv3.node.consul sv3.node.consul has address 10.132.79.137
sv2:# host softlayer.com softlayer.com has address 66.228.119.72 softlayer.com has IPv6 address 2607:f0d0:1000:11:66:228:119:72 softlayer.com mail is handled by 5 mx.softlayer.com. softlayer.com mail is handled by 20 mx151.softlayer.com. softlayer.com mail is handled by 20 mx101.softlayer.com.
サーバ / クライアント両方からメンバーが見える
透過的に外部・内部の名前解決
Page 21
SoftLayer × cloud-init/chef
Page 22
SoftLayer × cloud-init / chef
クラウド環境では仮想マシンが多くなってしまいがち アップデートが段々つらくなる
設定変更が段々つらくなる
機器の構成を都度しらべるのはつらい
Page 23
cloud-init と chef
cloud-init を使って、 OS 起動時に特定のスクリプトを実行
実行されたスクリプト内で chef-client コマンドを実行し、Chef-Server 上のレシピを実行する
Page 24
cloud-init 経由のスクリプト実行例
Cloud-init v. 0.7.5 running 'modules:final' at Fri, 04 Mar 2016 06:19:42 +0000. Up 275.05 seconds.[2016-03-04T00:19:45-06:00] INFO: Forking chef instance to converge...[2016-03-04T00:19:45-06:00] INFO: *** Chef 12.7.2 ***[2016-03-04T00:19:45-06:00] INFO: Chef-client pid: 1509[2016-03-04T00:19:48-06:00] INFO: Run List is [recipe[cron::default]][2016-03-04T00:19:48-06:00] INFO: Run List expands to [cron::default][2016-03-04T00:19:48-06:00] INFO: Starting Chef Run for sv2.softlayer-test.info[2016-03-04T00:19:48-06:00] INFO: Running start handlers[2016-03-04T00:19:48-06:00] INFO: Start handlers complete.[2016-03-04T00:19:48-06:00] INFO: HTTP Request Returned 404 Not Found: [2016-03-04T00:19:48-06:00] INFO: Loading cookbooks [[email protected]][2016-03-04T00:19:48-06:00] INFO: Processing yum_package[cronie] action install (cron::default line 21)[2016-03-04T00:19:51-06:00] INFO: Processing service[cron] action enable (cron::default line 24)[2016-03-04T00:19:51-06:00] INFO: Processing service[cron] action start (cron::default line 24)[2016-03-04T00:19:51-06:00] INFO: service[cron] started[2016-03-04T00:19:52-06:00] INFO: Chef Run complete in 3.578102623 seconds[2016-03-04T00:19:52-06:00] INFO: Running report handlers[2016-03-04T00:19:52-06:00] INFO: Report handlers completeCloud-init v. 0.7.5 finished at Fri, 04 Mar 2016 06:19:52 +0000. Datasource DataSourceNone. Up 284.35 seconds
#!/bin/shchef-client -c /etc/chef/client.rb
OS起動時にchef-clientを実行
Page 25
Ohai 経由の構成情報
Page 26
まとめ
Packer を使って、仮想マシンイメージ管理を楽に
Consul を使って名前解決を楽に
cloud-init/chef を使って運用管理ルーティンを楽に