Solaris Zone と Puppet、Serverspec でインフラ CI
-
Upload
ftnk -
Category
Technology
-
view
605 -
download
2
Transcript of Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris ZoneとPuppet、
ServerspecでインフラCIOSC 2015 Tokyo/Fall
となか
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
自己紹介
名前: となかふみひさ✓
ID: @ftnk✓
インフラエンジニア
主に Solaris (151a 頃から)
この PC も Solaris✓
✓
✓
所属
静岡の Solaris メインの会社✓
日本 OpenSolaris ユーザグループ✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
日本OpenSolarisユーザーグループ
http://www.opensolaris.gr.jp/✓
#osoljp✓
活動
勉強会(読書会+α)
http://connpass.com/series/322/✓
✓
パッケージ作成
https://osdn.jp/projects/jposug/✓
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
agenda
Solaris でもインフラ CI したい
1.
Solaris Zone2.
Puppet3.
Serverspec4.
Solaris で CI5.
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solarisでも
インフラCIしたい
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
インフラ CI
Serverspec がリリースされてからインフラの CI が話題
✓
Puppet や Chef などの構成管理ソフトウェアでサーバを構築し、Serverspec でテスト
✓
CI のための環境を用意する方法として Vagrant や Docker がよく使われている
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris で CIVagrant で Solaris の VM を用意することはできるが、Solaris だけで閉じたい
✓
Solaris では Docker が使えないSolaris でも Docker に対応するという話はあるhttps://www.oracle.com/corporate/pressrelease/docker-gets-in-the-zone-with-oracle-solaris-073015.html
✓
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris で CI
Solaris には Zone があるんだし、Zone を使いたい
✓
Vagrant や Docker のような感じで、Zone を扱う方法が必要
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
とりあえずの方法
Docker や Vagrant 的なものを使わない
✓
構築済みの Zone に対して、Puppet などを実行し Serverspec でテスト新規の環境に対する実行をテストできない
手で巻き戻しが必要✓
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
まとめ
Zone を使いたい✓
CI のたびに、新規の環境を用意したい
✓
Vagrant や Docker のような感じで Zone を扱うしくみが欲しい
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris Zone
Zone の概要✓
Zone の種類✓
Zone の構築✓
Zone とパッケージ✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の概要
Solaris 10 以降(2005 年〜)✓
同じカーネルで複数のシステムを動作各種リソースの分離・制限✓
✓
詳しくは宮崎さんの OSC 2015 Tokyo/Spring の資料を参照
http://www.slideshare.net/satorumiyazaki/solaris-osc-tokyo2015springzone
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の種類(brand)
Solaris 11.2 における Zone の種類(brand)
solaris
標準的な Zone
solaris10
Solaris 10 を動かす Zone
solaris-kz
ホストとは異なるバージョンのカーネルを動かす Zone
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Immutable Zonefile-mac-profile の設定で zone を read only に
strict
読み取り専用✓
✓
fixed-configuration
/var 以下は書き込み可✓
✓
flexible-configuration
/etc と /var 以下は書き込み可✓
✓
none
読み書き可✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Immutable Zone
$ touch hogetouch: cannot create hoge: Read-only file system
zoneadm apply で反映不可✓
strict では書き込みできないので、起動時にログが書けることを確認するサービスは起動できない
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の構築 (solaris)
# zonecfg -z testzone create# zoneadm -z testzone install
Zone の構成には /etc/zones/SYSdefault.xml のテンプレートが使われる。
テンプレートを使わない場合は 'create -b'✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の構築 (solaris10)
# zonecfg -z testzone create -t SYSsolaris10# zoneadm -z testzone install -a sol10.flar -u
パッケージ system/zones/brand/brand-solaris10 が必要
✓
インストールにはいずれかのアーカイブが必要
flash archive / pax / cpio (+gzip/bzip2) / ufsdump (level 0)
✓
✓
'-t' で指定しているテンプレートの実体は /etc/zones/SYSsolaris10.xml
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の構築 (solaris-kz)
# zonecfg -z testzone create -t SYSsolaris-kz# zoneadm -z testzone install
パッケージ system/zones/brand/brand-solaris-kz が必要
✓
'-t' で指定しているテンプレートの実体は /etc/zones/SYSsolaris-kz.xml
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の構築
ここまでの方法はシンプルすぎ✓
実際にはネットワーク設定とかしたいことがある
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone 構築時にできること
Zone の構成を渡すcpu / memory / disk / network etc.✓
✓
AI マニフェストを指定するpackage / publisher / pool / zfs etc.✓
✓
SC プロファイルを指定するhostname / root / user / nsswitch.conf / resolv.conf / keymap etc.
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の構成を渡す
Zone の構成
cpu✓
memory✓
disk✓
network✓
など zonecfg で設定するもの
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の構成を渡す
# zonecfg -z testzone1 export -f testzone1.zonecfg# zonecfg -z testzone2 create -f testzone1.zonecfg
create 時に '-f' でファイルを渡すことができる✓
kernel zone の keysource リソースの export には権限が必要
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
AI マニフェストを指定する
AI マニフェスト
AI (Automated Installer) が参照するファイル✓
/usr/share/auto_install/manifest/zone_default.xml
✓
zpool/zfs/be/facet/package などを設定可能✓
✓
Zone のインストール時に AI が実行されます✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
AI マニフェストを指定する
# zoneadm -z testzone install -m testzone_manifest.xml
zoneadm install 時に '-m' で AI マニフェストを渡すことができる
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
SC プロファイルを指定する
SC (System Configuration) プロファイル
hostname/nsswitch.conf/resolv.conf/keymap/tiemzone/root/user account などを設定可能
Zone 初回ブート時の Wizard で設定する項目✓
SC プロファイルで設定することで Wizard が出なくなる
✓
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
SC プロファイルを指定する
# zoneadm -z testzone install -c testzone_profile.xml
zoneadm install/clone 時に '-c' で SC プロファイルを渡すことができる
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone の clone
# zoneadm -z testzone2 clone testzone1# zoneadm -z testzone2 clone testzone1 -c profile.xml
同一の zpool 上であれば、ZFS の clone
異なる zpool 上であれば、データのコピー✓
Publisher からのインストールより早い✓
✓
unconfig されるので、
SC プロファイルを渡す✓
初回ブート時に Wizard で設定✓
などが必要
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone 構築まとめSolaris 11.2 で使える Zone は 3 種類
solaris/solaris10/solaris-kz✓
✓
file-mac-profile で zone 内での読み書きを制御
✓
Zone 構築時に渡せる設定は渡しておくと便利
Zone の構成✓
AI マニフェスト✓
SC プロファイル✓
✓
Zone の clone は便利✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Puppet 概要
Puppetlabs による構成管理ツール
ZFS や Zone の操作にも対応✓
master/agent 構成、単体、どちらも可能✓
✓
Solaris 11.2 からパッケージが存在
Solaris 用 module が含まれている✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Puppet マニフェスト
サーバの設定を書いたファイルをマニフェストと呼ぶ
node 'default' { Package['pkg:/web/server/apache-22'] -> Service['svc:/network/http:apache22'] package { 'pkg:/web/server/apache-22': ensure => installed, } service { 'svc:/network/http:apache22': ensure => running, enable => true, }}
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
リソースタイプ
マニフェストに書く 'package' や 'service' などをリソースタイプという
✓
リソースタイプ
Puppet 標準で提供
http://docs.puppetlabs.com/references/latest/type.html
✓
✓
モジュールによって提供
https://forge.puppetlabs.com/✓
✓
ユーザによる定義✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris module
ネットワーク関連✓
サービス関連✓
その他(BE、パッケージ)✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris module: network
dladm
etherstub / ip tunnel / link aggregation / link properties / vlan / vnic
✓
✓
ipadm
address object / address properties / interface properties / ip interface / ipmp interface / protocol properties / vni interface
✓
✓
nsswitch✓
resolver✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris module: service
svccfg✓
nis✓
ldap✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris module: others
BE✓
packagefacet / variant / mediator / publisher
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Puppet の単純なデモ
Apache の設定パッケージのインストール✓
64bit バイナリを利用✓
mpm は worker✓
サービスを enable にする✓
サービスを起動✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Puppet まとめ
Puppet は構成管理ソフトウェア
✓
標準で zone や zfs に対応✓
Oracle による Solaris モジュール
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Serverspec 概要
http://serverspec.org/✓
宮下剛輔さんによる、サーバ構成のテストツール
✓
RSpec ベース✓
SSH / Docker API / WinRM などを経由してテストを実行
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Serverspec の Solaris 11 対応
ほぼ、となかが書いています✓
となかが使う範囲においては問題なく動いています
✓
Solaris 10 でもある程度は動くはずです
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris っぽいテスト 1
describe service('apache22') do it { should be_enabled } it { should be_running } its(:property) { should include('httpd/server_type' => 'worker') } its(:property) { should include('httpd/enable_64bit' => 'true') }end
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris っぽいテスト 2
describe zfs('rpool') do it { should exist } its(:property) { should include('mounted' => 'yes') }end
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
リソースタイプ
bond / bridge / cgroup / command / cron / default_gateway / docker_container / docker_image / file / group / host / iis_app_pool / iis_website / interface / ipfilter / ipnat / iptables / kernel_module / linux_audit_system / linux_kernel_parameter / lxc / mail_alias / mysql_config / package / php_config / port / ppa / process / routing_table / selinux / selinux_module / service / user / x509_certificate / x509_private_key / windows_feature / windows_registry_key / yumrepo / zfs
✓
http://serverspec.org/resource_types.html
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Advanced Tips
http://serverspec.org/advanced_tips.html✓
実際に使っていくには、serverspec-init で生成される Rakefile や spec_helpler のままではつらい
How to use host specific properties✓
How to share Serverspec tests among hosts
✓
How to use Serverspec tests as shared behaviors
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Serverspec まとめ
Serverspec サーバ構成のテストツール
✓
Solaris にも対応✓
Rakefile や spec_helper.rb は書き換え推奨
✓
Advanced Tips に目を通す✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
インフラCI
Puppet などの構成管理ソフトウェアで意図通りに構成されることをServerspec でテストし、継続的に Puppet などのコードを改善していくこと。
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Solaris に対するインフラCIの流れ
Solaris 環境の用意✓
Puppet 実行✓
Serverspec 実行✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
問題1: Solaris環境の用意
Vagrant で Solaris の VM を用意する✓
Solaris 上で Zone を用意する✓
Solaris 上で Kernel Zone を用意する✓
SPARC 上で LDOM を用意する✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
問題2: Zoneのあつかい
Zone の構築✓
Zone 内で Puppet の実行✓
Zone に対して Serverspec の実行
✓
Zone の破棄✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Zone のあつかい
docker4solaris を使う✓
自作スクリプトを使う✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
docker4solaris
https://github.com/maduma/docker4solaris
✓
Zone を Docker っぽく扱う Bash script約 250 行✓
環境は決め打ち
etherstub / ipnat / dhcp✓
✓
✓
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
Tutorial を動かしてみる
docker versiondocker search tutorialdocker pull learn/tutorialdocker run learn/tutorial echo "Hello World"docker run learn/tutorial ping www.google.comdocker run learn/tutorial pkg install apache-22docker ps -ldocker commit CONTAINER learn/apache-22docker imagesdocker run learn/apache-22 /usr/apache2/2.2/bin/apachectl -Mdocker inspect CONTAINERdocker push learn/apache-22
Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8
自作スクリプト
開発中✓
Zone を作って、Zone 内でコマンドを実行するところまではできている
✓
オプションを Vagrant や Docker に似せるか考え中
✓
ご意見募集中✓