環境構築自動化ツールのご紹介
Upcoming SlideShare
Loading in...5
×
 

環境構築自動化ツールのご紹介

on

  • 2,250 views

 

Statistics

Views

Total Views
2,250
Views on SlideShare
2,233
Embed Views
17

Actions

Likes
5
Downloads
37
Comments
0

2 Embeds 17

https://twitter.com 15
https://si0.twimg.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

環境構築自動化ツールのご紹介 環境構築自動化ツールのご紹介 Presentation Transcript

  • オープンクラウド・キャンパス環境構築自動化ツールのご紹介 Ver1.0 2012/10/13 中井悦司 (Twitter @enakai00)
  • クラウドが実現するソフト開発・運用の変革と自動化 Contents  既存ツールの組み合わせによる「パーソナルクラウド」の構築  複数環境へのデプロイ自動化ツール Aeolus Conductor2 Open Cloud Campus
  • 既存ツールの組み合わせによる「パーソナルクラウド」の構築
  • クラウドが実現するソフト開発・運用の変革と自動化 「パーソナルクラウド」における自動化の実例 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
  • クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (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} --vnc5 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (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 %end6 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (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
  • クラウドが実現するソフト開発・運用の変革と自動化 主な利用ツール (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.pp8 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 (参考)Githubのスクリーンショット リポジトリの公開URL 過去の変更履歴を 全て保存 特定の時点のコードを タグ名で指定9 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 「パーソナルクラウド」自動化における考察  便利な点 – 設定ファイルの再利用性 • テキストファイルにすべての設定が記録されているので、設定変更が簡単で、少しづ つ設定の異なる類似環境を何度でも再構築できる。 • Puppetのマニフェストがバージョン管理されているので、バージョン番号を指定す るだけで、特定バージョンの設定が適用できる。 Github  不便な点 – 単一の物理サーバが前提 • 複数の物理サーバへのデプロイはできない。 v1.0 v1.1 – 複数VMの依存関係が扱えない • Puppetはサーバ間の依存関係を解決する機能がないので、「DBサーバとWebサーバ を連携させる」ような設定はできない。 • 現状では、必要な際は、手続き型のスクリプトで連携処理を行なっている。(ので、 Puppetの「宣言的記述」のメリットが半減してしまう。) ⇒ 本格的な自動化ツールでは、複数ノードへのデプロイと複数VMの依存関係の取り扱い   が必要。10 Open Cloud Campus
  • 複数環境へのデプロイ自動化ツール Aeolus Conductor
  • クラウドが実現するソフト開発・運用の変革と自動化 Aeolus Conductorとは? 「Aeolus(アイオロス)でRHELonEC2を利用する」 http://bit.ly/QzniL4  複数クラウドに対応したイメージ作成/アプリケーション環境構築の自動化ツール12 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 複数クラウド/仮想化環境を適材適所で活用  共通の定義ファイルから複数環境に同一のアプリケーション実行環境を構築。 – システムテンプレート:JEOSの構成定義ファイル – アプリケーション・ブループリント:アプリケーション実行環境の構成定義ファイル システムテンプレート アプリケーション・ブループリント 本番環境 開発・テスト環境 パブリック 仮想化環境A 仮想化環境B クラウド13 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 Aeolus Conductorによるアプリケーションデプロイの流れ  アプリケーションデプロイ時は、ConfigServerを介して構成情報を交換することで、複数 VMに依存する設定が可能です。 – Ruby Facterでの取得情報を交換可能。ただし、ワークフロー処理は限定的。  仮想ネットワークの構成は対象外。仮想マシンは既存のデフォルトネットワークに接続し ます。 必要なサイズ/個数の仮想マシンを起動して アプリケーションの導入・設定を実施 アプリケーション ブループリント 構成情報の交換 指定のクラウドに JEOSイメージを作成 ConfigServer システム マシンイメージ テンプレート (JEOS)14 仮想マシン Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 (参考)DeltacloudによるAPIの共通化  Deltacloud Libraryは、複数の仮想化基盤/クラウドを共通のREST API (Deltacloud API)で操作するためのライブラリ群 – Aeolus Conductorでは、複数環境への対応にDeltacloud Libraryを使用15 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 (参考)Deltacloud Driverの提供状況 http://deltacloud.apache.org/drivers.html#drivers16 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 システムテンプレートによる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
  • クラウドが実現するソフト開発・運用の変革と自動化 システムテンプレートによるJEOSの作成 (2)  Aeolus Conductorのメニュー画面から、対象クラウド用のJEOSを作成します。 – 対象のクラウドに対して「ビルド」を実行するとAeolusサーバ上のKVMで仮想マシンを 起動してイメージを作成後、指定のクラウドで利用可能な形式に変換します。 – その後「Push」を実行すると対象のクラウドにイメージの配信を行います。18 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 アプリケーション・ブループリントによるデプロイ (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
  • クラウドが実現するソフト開発・運用の変革と自動化 アプリケーション・ブループリントによるデプロイ (2)  Aeolus Conductorのメニュー画面から、アプリケーション・ブループリントを指 定して、デプロイを実施します。 – ユーザは、デプロイ先のクラウドを選択することが可能です。20 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 アプリケーション・ブループリントと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/RMFZae21 Open Cloud Campus
  • クラウドが実現するソフト開発・運用の変革と自動化 Aeolus Conductorの考察  便利な点 – 複数環境の透過的利用 • 現実的なユースケースは今後の検討課題ではあるが、JEOSの作成からアプリケー ションのデプロイまでを複数環境で実施できるツールはめずらしい。 – JEOS方式によるカスタマイズの容易性 • IaaSクラウドの多くはオリジナルイメージのスクラッチ作成やカスタマイズが面倒。 Aeolusであれば、システムテンプレートからイメージを自動生成可能。 • デプロイ時に動的にアプリケーションをインストールするので、アプリケーションの バージョンアップに合せてイメージを再作成するなどの手間がかからない。  不便な点 – クラウド固有の機能が使えない • セキュリティグループ、EBSのアタッチなどクラウド固有の機能に未対応。 – 複数VMデプロイ時のワークフロー処理が不十分 • アプリケーション・ブループリントでは、「VM2の構成が完了してから、VM1の構成 を開始する」程度の依存関係しか扱えず、複雑なワークフロー処理ができない。 ⇒ 現実的なユースケースに合わせた機能拡張が今後の課題。22 Open Cloud Campus
  • オープンクラウド・キャンパスクラウドの自動化とソフトウェア開発の 未来を一緒に考えて行きましょう! 中井悦司 Twitter @enakai00