60
Solaris ZonePuppetServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8 Solaris ZonePuppetServerspecインフラCI OSC 2015 Tokyo/Fall となか

Solaris Zone と Puppet、Serverspec でインフラ CI

  • Upload
    ftnk

  • View
    600

  • Download
    2

Embed Size (px)

Citation preview

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

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 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

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

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

Serverspec のデモ

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

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 に似せるか考え中

ご意見募集中✓

Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8

デモ

Solaris ZoneとPuppet、ServerspecでインフラCI - OSC 2015 Tokyo/Fall Powered by Rabbit 2.1.8

まとめ

Solaris には道具が揃っているので、それらをうまくつなげるものを書ければ、なんとかなる

docker4solaris のような割り切り重要