Mais conteúdo relacionado
Semelhante a 環境構築自動化ツールのご紹介 (20)
Mais de Etsuji Nakai (20)
環境構築自動化ツールのご紹介
- 2. クラウドが実現するソフト開発・運用の変革と自動化
Contents
既存ツールの組み合わせによる「パーソナルクラウド」の構築
複数環境へのデプロイ自動化ツール Aeolus Conductor
2 Open Cloud Campus
- 4. クラウドが実現するソフト開発・運用の変革と自動化
「パーソナルクラウド」における自動化の実例
Github
図の①〜③を1つの設定ファイルを元に自動実行するスクリプト
を作成して、「パーソナルクラウド」として活用
OS/アプリケーション アプリ設定情報
OS構成情報
パッケージ (Puppet Manifest)
(KickStartファイル)
Kickstart ③ アプリ導入/設定
YUM Git/Puppet
リポジトリ ② OS/アプリ導入
設定ファイルの
バージョン管理
VM ① VM作成
Apache VM構成情報
HTTP Server KVM (virt-installコマンドの
パラメータ群)
Red Hat Enterprise Linux 6 libvirt
x86_64サーバ
詳細は「アプリケーション環境構築の自動化をまじめに考えてみる(1)〜(4)」を参照
4 http://bit.ly/SRfpwb http://bit.ly/O9xgAa http://bit.ly/Qij9Gx http://bit.ly/QB9POk Open Cloud Campus
- 5. クラウドが実現するソフト開発・運用の変革と自動化
主な利用ツール (1)
libvirt
– Linux KVM, Xen, LXC などの仮想化環境をプログラムから操作するための標準ライブラ
リ(C言語、Pythonなどから利用可能)。
– VM、仮想ディスクイメージ、仮想ネットワークの作成・操作が可能。
– ここでは、libvirtを利用したコマンドvirt-installを使って、VMの自動作成を行なってい
る。
virt-installのコマンドオプションの例
# virt-install
--name ${vmname}
--vcpus ${vcpus}
--ram ${ram}
--disk path=${diskpath},size=${disksize},sparse=false
--network ${network}
--os-variant ${os-variant}
--location ${url}
--vnc
5 Open Cloud Campus
- 6. クラウドが実現するソフト開発・運用の変革と自動化
主な利用ツール (2)
KickStart KickStartファイルの例
– RHELのインストーラ(Anaconda) url --url=${url}
の一機能。GUIインストーラで入力す lang ja_JP.UTF-8
る項目を事前に書き込んだテキスト keyboard jp106
network --onboot yes --device eth0 --bootproto
ファイル(KickStartファイル)を利 static --ip ${ip} --netmask ${netmask}
用して、RHELのインストールを全自 --gateway ${gateway} --nameserver ${nameserver}
動で行う。 --hostname ${hostname}
rootpw passw0rd
– インストール後に指定のスクリプト timezone --isUtc Asia/Tokyo
bootloader --location=mbr
(Postスクリプト)を実行すること
zerombr
ができる。 clearpart --initlabel --drives=vda
– ここでは、RHELを自動インストール part /boot --fstype=ext4 --size=500
part swap --size=1024
した後に、Git/Puppetによるアプリ part / --fstype=ext4 --grow --size=200
ケーション導入・設定をキックしてい reboot
%packages
る。
@base
@core
@japanese-support
%end
%post --log=/root/anaconda-post.log
set -x
echo "${ip} ${hostname}" >> /etc/hosts
%end
6 Open Cloud Campus
- 7. クラウドが実現するソフト開発・運用の変革と自動化
主な利用ツール (3)
Puppetマニフェストの例
Puppet
class pgsql {
– OS/アプリケーションの構成管理 service { 'postgresql':
ツール。「あるべき状態」を宣言的 name
ensure
=> 'postgresql',
=> running,
に記述した「マニフェスト」に従っ enable => true,
subscribe => Package['postgresql-server'],
て、アプリケーションの導入、設定 }
ファイルの書き換えなどを自動実行 package { 'postgresql-server':
する。 name => 'postgresql-server',
ensure => installed,
– 管理対象サーバが多数ある場合は、 }
専用の「Puppetサーバ」からマニ file { '/var/lib/pgsql/data/postgresql.conf':
フェストの配布を行うクライアン owner => 'postgres',
group => 'postgres',
ト・サーバモデルで使用する。 mode => '0600',
source => "$FACTER_manifest_dir/dist/postgresql.conf",
– ここでは、Puppetサーバは使わず notify => Service['postgresql'],
に、Githubからマニフェストをダ }
require => Exec['initdb'],
ウンロードして、直接に適用する形
exec { 'initdb':
で利用している。 path => '/sbin',
command => 'service postgresql initdb',
logoutput => true,
creates => '/var/lib/pgsql/data/PG_VERSION',
before => Service['postgresql'],
require => Package['postgresql-server'],
notify => Exec['init_pw'],
}
・・・
7 Open Cloud Campus
- 8. クラウドが実現するソフト開発・運用の変革と自動化
主な利用ツール (4)
Git
– プログラムソースコードの分散バージョン管理システム。元々はLinux Kernelの開発用に
作成された。インターネット上にコードリポジトリを作成して無料で利用できるサービ
ス「Github」の登場により、利用者が増加した。
– ここでは、Puppetの設定ファイル(マニフェスト)をGithubにおいて、Kickstartの
Postスクリプトから、指定バージョンのマニフェストのダウンロードと適用を実行して
いる。
Githubからマニフェストを取得して適用するスクリプトの例
mkdir -p /tmp/gittmp
cd /tmp/gittmp
git clone $GitRepository
cd $RepoName
git checkout $ConfigTag
export FACTER_manifest_dir="/tmp/gittmp/$RepoName"
puppet main.pp
8 Open Cloud Campus
- 10. クラウドが実現するソフト開発・運用の変革と自動化
「パーソナルクラウド」自動化における考察
便利な点
– 設定ファイルの再利用性
• テキストファイルにすべての設定が記録されているので、設定変更が簡単で、少しづ
つ設定の異なる類似環境を何度でも再構築できる。
• Puppetのマニフェストがバージョン管理されているので、バージョン番号を指定す
るだけで、特定バージョンの設定が適用できる。 Github
不便な点
– 単一の物理サーバが前提
• 複数の物理サーバへのデプロイはできない。 v1.0 v1.1
– 複数VMの依存関係が扱えない
• Puppetはサーバ間の依存関係を解決する機能がないので、「DBサーバとWebサーバ
を連携させる」ような設定はできない。
• 現状では、必要な際は、手続き型のスクリプトで連携処理を行なっている。(ので、
Puppetの「宣言的記述」のメリットが半減してしまう。)
⇒ 本格的な自動化ツールでは、複数ノードへのデプロイと複数VMの依存関係の取り扱い
が必要。
10 Open Cloud Campus
- 13. クラウドが実現するソフト開発・運用の変革と自動化
複数クラウド/仮想化環境を適材適所で活用
共通の定義ファイルから複数環境に同一のアプリケーション実行環境を構築。
– システムテンプレート:JEOSの構成定義ファイル
– アプリケーション・ブループリント:アプリケーション実行環境の構成定義ファイル
システムテンプレート
アプリケーション・ブループリント
本番環境 開発・テスト環境
パブリック
仮想化環境A 仮想化環境B
クラウド
13 Open Cloud Campus
- 14. クラウドが実現するソフト開発・運用の変革と自動化
Aeolus Conductorによるアプリケーションデプロイの流れ
アプリケーションデプロイ時は、ConfigServerを介して構成情報を交換することで、複数
VMに依存する設定が可能です。
– Ruby Facterでの取得情報を交換可能。ただし、ワークフロー処理は限定的。
仮想ネットワークの構成は対象外。仮想マシンは既存のデフォルトネットワークに接続し
ます。
必要なサイズ/個数の仮想マシンを起動して
アプリケーションの導入・設定を実施
アプリケーション
ブループリント
構成情報の交換
指定のクラウドに
JEOSイメージを作成
ConfigServer
システム マシンイメージ
テンプレート (JEOS)
14 仮想マシン Open Cloud Campus
- 17. クラウドが実現するソフト開発・運用の変革と自動化
システムテンプレートによるJEOSの作成 (1)
「システムテンプレート」では、JEOSの構成情報を定義します。
– OSの種類、インストール元のレポジトリ、追加導入するパッケージ、導入後のカスタマ
イズコマンドなどを指定します。
システムテンプレートの例
<template>
<name>CentOS63 Template</name>
<os>
<name>RHEL-6</name>
<version>3</version>
<arch>x86_64</arch>
<install type='url'>
<url>http://172.16.1.1/CentOS63</url>
</install>
<rootpw>p@ssw0rd</rootpw>
</os>
<repositories>
<repository name="Aeolus">
<url>http://172.16.1.101/aeolus/</url>
</repository>
</repositories>
<packages>
<package name="aeolus-audrey-agent"/>
</packages>
<description>CentOS63 Image Factory Template</description>
<commands>
<command name="Update to latest packages">yum -y update</command>
</commands>
</template>
17 Open Cloud Campus
- 19. クラウドが実現するソフト開発・運用の変革と自動化
アプリケーション・ブループリントによるデプロイ (1)
「アプリケーション・ブループリント」では、起動するインスタンスと起動後の
アプリケーション導入/設定手順を定義します。
– 起動に使用するJEOSイメージ、インスタンスサイズ、デプロイ時にユーザが指定するパ
ラメータなどを指定します。
– アプリケーション導入/設定
アプリケーション・ブループリントの例
手順はスクリプトをベタ書
<?xml version="1.0"?>
きします。(実際には、こ <deployable version="1.0" name="RHEL6.3 motd hack">
のスクリプトから、Puppet <description/>
<assemblies>
などのツールとの連携を行 <assembly name="RHEL6-3-with-audrey-agent" hwp="small-x86_64">
います。) <image id="c0d6f20f-6e7a-4835-b41e-7b16a8cdbe35"/>
<services>
<service name="config_motd">
<executable>
<contents><![CDATA[#!/bin/bash
echo "$AUDREY_VAR_config_motd_message" >> /etc/motd]]>
</contents>
</executable>
<parameters>
<parameter name="message">
<value>Hello, World!</value>
</parameter>
</parameters>
</service>
</services>
</assembly>
</assemblies>
</deployable>
19 Open Cloud Campus
- 21. クラウドが実現するソフト開発・運用の変革と自動化
アプリケーション・ブループリントとPuppet/Githubの連携
アプリケーション・ブループリントとPuppet/Githubによる環境構築を連携する
ことも可能です。
– 下図のスクリプトをアプリケーション・ブループリントから実行すると、Puppetによる
アプリケーションの導入・設定が実施されます。
GithubからPuppetマニフェストを取得・適用するスクリプトの例
# Setting up glusterfs using Puppet
yum -y install http://mirror.us.leaseweb.net/epel/6/i386/epel-
release-6-7.noarch.rpm
yum -y install git
yum -y install puppet
mkdir -p /tmp/gittmp
cd /tmp/gittmp
git clone https://github.com/enakai00/gluster_puppet.git
cd gluster_puppet
git checkout $AUDREY_VAR_glusterd_gittag
export FACTER_manifest_dir="/tmp/gittmp/gluster_puppet"
export FACTER_data_device="/dev/xvdj"
puppet main.pp
– 詳細は、「Aeolus(アイオロス)でRHELonEC2を利用する(その3)」を参照
• http://bit.ly/RMFZae
21 Open Cloud Campus
- 22. クラウドが実現するソフト開発・運用の変革と自動化
Aeolus Conductorの考察
便利な点
– 複数環境の透過的利用
• 現実的なユースケースは今後の検討課題ではあるが、JEOSの作成からアプリケー
ションのデプロイまでを複数環境で実施できるツールはめずらしい。
– JEOS方式によるカスタマイズの容易性
• IaaSクラウドの多くはオリジナルイメージのスクラッチ作成やカスタマイズが面倒。
Aeolusであれば、システムテンプレートからイメージを自動生成可能。
• デプロイ時に動的にアプリケーションをインストールするので、アプリケーションの
バージョンアップに合せてイメージを再作成するなどの手間がかからない。
不便な点
– クラウド固有の機能が使えない
• セキュリティグループ、EBSのアタッチなどクラウド固有の機能に未対応。
– 複数VMデプロイ時のワークフロー処理が不十分
• アプリケーション・ブループリントでは、「VM2の構成が完了してから、VM1の構成
を開始する」程度の依存関係しか扱えず、複雑なワークフロー処理ができない。
⇒ 現実的なユースケースに合わせた機能拡張が今後の課題。
22 Open Cloud Campus