13
Ver1.0 2012/12/16 中井悦司 (Twitter @enakai00) オープンクラウド・キャンパス Linux KVMとKickStartとPuppetと GitHubで作るパーソナルクラウド

Personal Cloud Automation

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Personal Cloud Automation

Ver1.0 2012/12/16中井悦司 (Twitter @enakai00)

オープンクラウド・キャンパス

Linux KVMとKickStartとPuppetとGitHubで作るパーソナルクラウド

Page 2: Personal Cloud Automation

Open Cloud Campus2

クラウドが実現するソフト開発・運用の変革と自動化

自己紹介

中井悦司(なかいえつじ)– Twitter @enakai00

日々の仕事– Senior Solution Architect and

Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。

昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)

好評発売中

Page 3: Personal Cloud Automation

Open Cloud Campus3

クラウドが実現するソフト開発・運用の変革と自動化

最近やってること (1)

http://www.slideshare.net/enakai/how-quantum-configures-virtual-networks-under-the-hood

特にQuantum関係

Page 4: Personal Cloud Automation

Open Cloud Campus4

クラウドが実現するソフト開発・運用の変革と自動化

最近やってること (2)

自動化ツールの研究

http://www.slideshare.net/enakai/ss-15242229

Page 5: Personal Cloud Automation

Open Cloud Campus5

クラウドが実現するソフト開発・運用の変革と自動化

Aeolus Conductor

複数クラウドに対応したイメージ作成/アプリケーション環境構築の自動化ツール

「Aeolus(アイオロス)でRHELonEC2を利用する」 http://bit.ly/QzniL4

Page 6: Personal Cloud Automation

Open Cloud Campus6

クラウドが実現するソフト開発・運用の変革と自動化

「パーソナルクラウド」における自動化の実例

図の①〜③を1つの設定ファイルを元に自動実行するスクリプトを作成して、「パーソナルクラウド」として活用

Red Hat Enterprise Linux 6x86_64サーバ

ApacheHTTP Server KVM

Github

VM

YUMリポジトリ

設定ファイルのバージョン管理

OS/アプリケーションパッケージ

libvirt

Kickstart

Git/Puppet

① VM作成

② OS/アプリ導入

③ アプリ導入/設定

VM構成情報(virt-installコマンドのパラメータ群)

OS構成情報(KickStartファイル)

アプリ設定情報(Puppet Manifest)

詳細は「アプリケーション環境構築の自動化をまじめに考えてみる(1)〜(4)」を参照http://bit.ly/SRfpwb http://bit.ly/O9xgAa http://bit.ly/Qij9Gx http://bit.ly/QB9POk

Page 7: Personal Cloud Automation

Open Cloud Campus7

クラウドが実現するソフト開発・運用の変革と自動化

主な利用ツール (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

Page 8: Personal Cloud Automation

Open Cloud Campus8

クラウドが実現するソフト開発・運用の変革と自動化

主な利用ツール (2)

KickStart– RHELのインストーラ(Anaconda)

の一機能。GUIインストーラで入力する項目を事前に書き込んだテキストファイル(KickStartファイル)を利用して、RHELのインストールを全自動で行う。

– インストール後に指定のスクリプト(Postスクリプト)を実行することができる。

– ここでは、RHELを自動インストールした後に、Git/Puppetによるアプリケーション導入・設定をキックしている。

url --url=${url}lang ja_JP.UTF-8keyboard jp106network --onboot yes --device eth0 --bootproto static --ip ${ip} --netmask ${netmask} --gateway ${gateway} --nameserver ${nameserver} --hostname ${hostname}rootpw passw0rdtimezone --isUtc Asia/Tokyobootloader --location=mbrzerombrclearpart --initlabel --drives=vdapart /boot --fstype=ext4 --size=500part swap --size=1024part / --fstype=ext4 --grow --size=200reboot%packages@base@core@japanese-support%end%post --log=/root/anaconda-post.logset -xecho "${ip} ${hostname}" >> /etc/hosts%end

KickStartファイルの例

Page 9: Personal Cloud Automation

Open Cloud Campus9

クラウドが実現するソフト開発・運用の変革と自動化

主な利用ツール (3)

Puppet– OS/アプリケーションの構成管理

ツール。「あるべき状態」を宣言的に記述した「マニフェスト」に従って、アプリケーションの導入、設定ファイルの書き換えなどを自動実行する。

– 管理対象サーバが多数ある場合は、専用の「Puppetサーバ」からマニフェストの配布を行うクライアント・サーバモデルで使用する。

– ここでは、Puppetサーバは使わずに、Githubからマニフェストをダウンロードして、直接に適用する形で利用している。

class pgsql { service { 'postgresql': name => 'postgresql', ensure => running, enable => true, subscribe => Package['postgresql-server'], }

package { 'postgresql-server': name => 'postgresql-server', ensure => installed, }

file { '/var/lib/pgsql/data/postgresql.conf': owner => 'postgres', group => 'postgres', mode => '0600', source => "$FACTER_manifest_dir/dist/postgresql.conf", notify => Service['postgresql'], 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'], }・・・

Puppetマニフェストの例

Page 10: Personal Cloud Automation

Open Cloud Campus10

クラウドが実現するソフト開発・運用の変革と自動化

主な利用ツール (4)

Git– プログラムソースコードの分散バージョン管理システム。元々はLinux Kernelの開発用に

作成された。インターネット上にコードリポジトリを作成して無料で利用できるサービス「Github」の登場により、利用者が増加した。

– ここでは、Puppetの設定ファイル(マニフェスト)をGithubにおいて、KickstartのPostスクリプトから、指定バージョンのマニフェストのダウンロードと適用を実行している。

Githubからマニフェストを取得して適用するスクリプトの例

mkdir -p /tmp/gittmpcd /tmp/gittmpgit clone $GitRepositorycd $RepoNamegit checkout $ConfigTagexport FACTER_manifest_dir="/tmp/gittmp/$RepoName"puppet main.pp

Page 11: Personal Cloud Automation

Open Cloud Campus11

クラウドが実現するソフト開発・運用の変革と自動化

(参考)Githubのスクリーンショット

リポジトリの公開URL

特定の時点のコードをタグ名で指定

過去の変更履歴を全て保存

Page 12: Personal Cloud Automation

Open Cloud Campus12

クラウドが実現するソフト開発・運用の変革と自動化

「パーソナルクラウド」自動化における考察

便利な点– 設定ファイルの再利用性

• テキストファイルにすべての設定が記録されているので、設定変更が簡単で、少しづつ設定の異なる類似環境を何度でも再構築できる。

• Puppetのマニフェストがバージョン管理されているので、バージョン番号を指定するだけで、特定バージョンの設定が適用できる。

不便な点–単一の物理サーバが前提

• 複数の物理サーバへのデプロイはできない。– 複数VMの依存関係が扱えない

• Puppetはサーバ間の依存関係を解決する機能がないので、「DBサーバとWebサーバを連携させる」ような設定はできない。

• 現状では、必要な際は、手続き型のスクリプトで連携処理を行なっている。(ので、Puppetの「宣言的記述」のメリットが半減してしまう。)

⇒ 本格的な自動化ツールでは、複数ノードへのデプロイと複数VMの依存関係の取り扱い  が必要。

Github

v1.0 v1.1

Page 13: Personal Cloud Automation

中井悦司Twitter @enakai00

オープンクラウド・キャンパス

クラウドの自動化とソフトウェア開発の未来を一緒に考えて行きましょう!