17
Fabric による CloudStack の自動インストール 〜簡単に検証構築を繰り返し構築する方法〜 15 CloudStack ユーザ会 in 北海道 2013 9 13 中島 博行

Fabricによるcloud stackインストール自動化

Embed Size (px)

Citation preview

Page 1: Fabricによるcloud stackインストール自動化

Fabric による CloudStack の自動インストール〜簡単に検証構築を繰り返し構築する方法〜

第 15 回 CloudStack ユーザ会in 北海道

2013 年 9 月 13 日中島 博行

Page 2: Fabricによるcloud stackインストール自動化

自己紹介● CloudStack 歴:約 1 年● 使えるプログラミング言語:パスカル

※ かれこれ 10 年以上も昔にやった大学の授業でならった程度で、それ以外の言語はちゃんと勉強したことがありません。

⇨ つまり、この発表は、それくらいの人でも簡単についてこれる内容です。でも、知っておくとそこそこ便利です。よかったら覚えて帰ってください。

Page 3: Fabricによるcloud stackインストール自動化

目次● 検証環境構築の問題点● 自動デプロイツール Fabric の紹介● Fabric の使い方● Fabric による CloudStack の自動インストール

(おまけ) Fabric のインストール

Page 4: Fabricによるcloud stackインストール自動化

環境構築は大変だ!● 検証を繰り返し行うためには、検証環境を何

度も構築することになる。● この繰り返し構築の手間が馬鹿にならない。● 検証環境構築を手軽に自動化できないか??

● そこで自動化ツール Fabric を使ってみる!

Page 5: Fabricによるcloud stackインストール自動化

環境構築は大変だ!● 検証を繰り返し行うためには、検証環境を何

度も構築することになる。● この繰り返し構築の手間が馬鹿にならない。● 検証環境構築を手軽に自動化できないか??

● そこで自動化ツール Fabric を使ってみる!

Page 6: Fabricによるcloud stackインストール自動化

Fabric とは● シェルスクリプトより簡単に複雑なことができる

– 難しいことを考えなくも簡単に SSH できます– 必要なファイルも簡単に put/get できます

● Chef や Puppet よりも覚えることが少なく、リモートのサーバへのインストールも不要

– 最低限、 run と put の 2 つのコマンドを知っていれば大丈夫です。

● スクリプトファイルは、 python で書かれている

Page 7: Fabricによるcloud stackインストール自動化

使い方● クライアント側に Fabric をインストールします● リモート側のサーバは、 SSH ができるように

なっている。

● これだけです。● 思いのほか簡単ですよ。

Page 8: Fabricによるcloud stackインストール自動化

実演● リモート環境のサーバに

① ログイン

② ホスト名を表示( hostname --fqdn )

③CentOS のアップデート( yum -y update )

④apache のインストール( yum -y install httpd )

してみます。

VM

【コマンド】 fab httpd http_install -f apache_install.py

httpd.local

ホストの指定 タスクの指定 利用するスクリプトファイルの指定

Page 9: Fabricによるcloud stackインストール自動化

CloudStack に適用する● CloudStack の環境構築はめんどくさい● なのに新しいバージョンが頻繁に出るし、い

ろいろあって作り直したくなる

● CloudStack のインストールに Fabric を活用してみます。

Page 10: Fabricによるcloud stackインストール自動化

CloudStack のちょっとおさらいCloudStack ってざっくり言うと、これらの要素が必要です。

①Management ②Hypervisor ④PS/SS③Database

今回は、 VMwareFusion を用いて事前に VM を 2 台用意し、

1 台目に①、③、④を 2 台目に②をインストールします。

VM1CSM

VM2KVM①Mng

③DB④PS/SS

②Hypervisor(KVM)

Page 11: Fabricによるcloud stackインストール自動化

実際の CloudStack のインストール<CSM>vi /etc/yum.repos.d/cloudstack.repo--[CloudStack]name=cloudstackbaseurl=http://cloudstack.apt-get.eu/rhel/4.1/enabled=1gpgcheck=0--yum -y install ntpvi /etc/ntp.conf--#server 0.centos.pool.ntp.org#server 1.centos.pool.ntp.org#server 2.centos.pool.ntp.orgserver -4 ntp.xxx.xxx--service ntpd startntpq -pchkconfi g ntpd onyum -y install cloudstack-management

(DB server)yum -y install mysql-servervi /etc/my.cnf--innodb_rollback_on_timeout=1innodb_lock_wait_timeout=600max_connections=350log-bin=mysql-binbinlog-format = 'ROW'--service mysqld startchkconfi g mysqld onmysql_secure_installationEnter current password for root (enter for none):enter keySet root password? [Y/n] YNew password:Re-enter new password:Remove anonymous users? [Y/n] YDisallow root login remotely? [Y/n] YRemove test database and access to it? [Y/n] YReload privilege tables now? [Y/n] Y

rpm -qa | grep selinuxvi /etc/selinux/confi g--SELINUX=permissive--setenforce permissivecloudstack-setup-databases cloud:password@localhost --deploy-as=root:passwordcloudstack-setup-management

<KVM>vi /etc/yum.repos.d/cloudstack.repo--[CloudStack]name=cloudstackbaseurl=http://cloudstack.apt-get.eu/rhel/4.1/enabled=1gpgcheck=0--yum -y install ntpvi /etc/ntp.conf--#server 0.centos.pool.ntp.org#server 1.centos.pool.ntp.org#server 2.centos.pool.ntp.orgserver -4 ntp.nttcloud.net--service ntpd startntpq -pchkconfi g ntpd onyum -y install cloudstack-agentvi /etc/libvirt/libvirtd.conf--listen_tls = 0listen_tcp = 1tcp_port = "16509"auth_tcp = "none"mdns_adv = 0--vi /etc/sysconfi g/libvirtd--LIBVIRTD_ARGS="--listen"--service libvirtd restartrpm -qa | grep selinuxvi /etc/selinux/confi g--SELINUX=permissive--setenforce permissiveiptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPTiptables -I INPUT -p tcp -m tcp --dport 1798 -j ACCEPTiptables -I INPUT -p tcp -m tcp --dport 16509 -j ACCEPTiptables -I INPUT -p tcp -m tcp --dport 5900:6100 -j ACCEPTiptables -I INPUT -p tcp -m tcp --dport 49152:49216 -j ACCEPTiptables-save > /etc/sysconfi g/iptablesservice rpcbind startservice nfs startchkconfi g nfs onchkconfi g rpcbind onrebootmkdir /primarymountmount -t nfs csm:/export/primary /primarymountumount /primarymountmkdir /secondarymountmount -t nfs csm:/export/secondary /secondarymountumount /secondarymount

(NFS server)yum -y install nfs-utilsmkdir -p /export/primarymkdir -p /export/secondaryvi /etc/exports--/export *(rw,async,no_root_squash)--exportfs -avi /etc/sysconfi g/nfs--RQUOTAD_PORT=875LOCKD_TCPPORT=32803LOCKD_UDPPORT=32769MOUNTD_PORT=892STATD_PORT=662STATD_OUTGOING_PORT=2020--vi /etc/sysconfi g/iptables--:INPUT ACCEPT [0:0]-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p udp --dport 111 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p tcp --dport 32803 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p udp --dport 32769 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p tcp --dport 892 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p udp --dport 892 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p tcp --dport 875 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p udp --dport 875 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p tcp --dport 662 -j ACCEPT-A INPUT -s xx.xx.xx.xx/24 -m state --state NEW -p udp --dport 662 -j ACCEPT--service iptables restartservice iptables savevi /etc/idmapd.conf--Domain = local--rebootservice rpcbind startservice nfs startchkconfi g nfs onchkconfi g rpcbind onreboot/

そこで Fabric 化してみます!

これを毎回手打ちは大変ですね。

Page 12: Fabricによるcloud stackインストール自動化

CloudStack インストールの Fabric 化

fab csm csm_install kvm kvm_install -f acs411.py

だけです!!本当に簡単ですよね。※ 上記でできるのは、 GUI ログインの手前まで。※ ゾーンの作成等は、手動になります。

一度、 Fabric スクリプトを書いておけば、何度も構築ができる。 また、バージョンアップ等でインストール方法が多少変更になってもスクリプトを直すだけで簡単に対応可能!

Page 13: Fabricによるcloud stackインストール自動化

今後の展望● GUI から設定するゾーン作成後も含めた自動化● VM 自体のデプロイ及び起動の自動化

Page 14: Fabricによるcloud stackインストール自動化

ご清聴ありがとうございました。

Page 15: Fabricによるcloud stackインストール自動化

(参考)インストール方法● For mac

1.AppStore � � Xcode � � � � � � �

2.Xcode � CommandLineTools � � � � � � �

3.brew � � � � � � �

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

4.python � � � � � � � �

brew install python

export PATH=/usr/local/share/python:$PATH

5.pip � � � � � � �

sudo easy_install pip

sudo pip install pycrypto

6.Fabric � � � � � � �

sudo pip install fabric

Page 16: Fabricによるcloud stackインストール自動化

(参考)用意した VM のスペック<CSM>

ipaddress 172.16.192.10

netmask 255.255.255.0

InstallType BasicServer

OS CentOS6.3

disk 80GB

CPU 1� �

Mem 512 MB

<KVM>

ipaddress 172.16.192.11

netmask 255.255.255.0

InstallType VirtualHost

OS CentOS6.3

disk 20GB

CPU 4 コア

Mem 2,560MB

� VMwareFusion だと、 VM 作成時に『プロセッサとメモリ』の設定画面の『詳細オプション』の『この仮想マシンのハイパーバイザアプリケーションを有効にする』をオンにする必要があります。

Page 17: Fabricによるcloud stackインストール自動化

(参考) CloudStack の Fabric インストールスクリプトfrom fabric.api import env,put,run

def csm() : env.user = 'root' env.password = 'password' env.hosts = ['172.16.192.10']

def kvm() : env.user = 'root' env.password = 'password' env.hosts = ['172.16.192.20']

def csm_install() : run('yum -y install ntp') put('※1/ntp.conf','/etc/ntp.conf') run('/etc/init.d/ntpd start') run('ntpq -p') run('chkconfig ntpd on') put('※1/cloudstack.repo','/etc/yum.repos.d/cloudstack.repo') run('yum -y install cloudstack-management') run('yum -y install mysql-server') put('※1/mysql.cnf','/etc/my.cnf') run('/etc/init.d/mysqld start') run('chkconfig mysqld on') run('mysql -u root -e "SET PASSWORD=PASSWORD(%s);"'%("'password'")) run('mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' WITH GRANT OPTION;"') put('※1/selinuxconfig','/etc/selinux/config') run('setenforce permissive') run('cloudstack-setup-databases cloud:password@localhost --deploy-as=root:password') run('yum -y install nfs-utils') run('mkdir -p /export/primary') run('mkdir -p /export/secondary') put('※1/exports','/etc/exports') run('exportfs -a') put('※1/nfs.conf','/etc/sysconfig/nfs') put('※1/iptables','/etc/sysconfig/iptables') run('/etc/init.d/iptables restart') run('/etc/init.d/iptables save') put('※1/idmapd.conf','/etc/idmapd.conf') run('/etc/init.d/rpcbind start') run('/etc/init.d/nfs start') run('chkconfig nfs on') run('chkconfig rpcbind on') run('cloudstack-setup-management') run('/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /export/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -F') run('reboot')

def kvm_install() : run('yum -y install ntp') put('※1/ntp.conf','/etc/ntp.conf') run('/etc/init.d/ntpd start') run('ntpq -p') run('chkconfig ntpd on') put('※1/cloudstack.repo','/etc/yum.repos.d/cloudstack.repo') run('yum -y install cloudstack-agent') put('※1/libvirtd.conf','/etc/libvirt/libvirtd.conf') put('※1/syslibvirtd.conf','/etc/sysconfig/libvirtd') run('/etc/init.d/libvirtd start') put('※1/selinuxconfig','/etc/selinux/config') run('setenforce permissive') run('iptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT') run('iptables -I INPUT -p tcp -m tcp --dport 1798 -j ACCEPT') run('iptables -I INPUT -p tcp -m tcp --dport 16509 -j ACCEPT') run('iptables -I INPUT -p tcp -m tcp --dport 5900:6100 -j ACCEPT') run('iptables -I INPUT -p tcp -m tcp --dport 49152:49216 -j ACCEPT') run('iptables-save > /etc/sysconfig/iptables') run('service rpcbind start') run('service nfs start') run('chkconfig nfs on') run('chkconfig rpcbind on') run('mkdir /primarymount') run('mount -t nfs csm:/export/primary /primarymount') run('umount /primarymount') run('mkdir /secondarymount') run('mount -t nfs csm:/export/secondary /secondarymount') run('umount /secondarymount') run('reboot')

※1の部分は自分の端末のパスを書いてください。また putした各ファイル( ntp.conf , cloudstack.repo , mysql.cnf , selinuxconfig , exports , nfs.conf , iptables , idmapd.conf , libvirtd.conf ,syslibvirtd.conf )は、各自の環境に合わせて事前に作成してください。