Embed presentation
Downloaded 69 times
今もう一度知ろう。 Solaris のコンテナ型 仮想化技術 みやざきさとる 日本 OpenSolaris ユーザグループ
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 2 Agenda コンテナ型仮想化とは Solaris Zone を使った コンテナ型仮想化 Zone の使い方
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 3 自己紹介 とある IT 企業の Solaris 使い Twitter: s_miyaza Solaris なのは趣味です 最近 Solaris のお仕事がありません... ( ́ ・ ω ・` )
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 4 コンテナ型仮想化とは
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 5 仮想化についておさらい 同一ハードウェアで、別 OS を動かす 別 OS 別アーキテクチャ OS の物理的制約を回避し、柔軟に構成 メモリ ディスク ネットワーク
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 6 ネイティブ仮想化とコンテナ型仮想化 ネイティブ仮想化 エミュレータにより子 OS を動作 OS 側は無修正で動作 オーバヘッドあり VMware 、 Xen 、 KVM など コンテナ型仮想化 OS 権限を使用して子 OS を分離 同じ OS が動作 ( 基本的には ...) オーバヘッドなし Jail 、 Solaris Zone 、 LXC など
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 7 コンテナ型仮想化とは OS レベルでカプセル化 基本的に、同一 OS で動作 コンテナからは他コンテナ、親のリソースに アクセス不可 親からはコンテナのリソースにアクセス可能 オーバヘッドなし 同じ OS で動く リソースも親まかせ
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 8 いろいろなコンテナ Chroot Jail OpenVZ(Virtuozzo) LXC Docker Solaris Zone
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 9 Chroot 指定したパスを root として動作する chroot 化のプロセスは上位にアクセス不可 指定したパス以下に使用バイナリコピー ネットワークは親 OS のものを使用 CPU/ メモリなどの制限不可 UNIX 系 OS ならたいてい使用可能
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 10 Jail FreeBSD で動作 ファイルシステム、プロセス空間、 ユーザアカウントなどを親 OS から分離 jail ごとに一つの IP アドレスを使用可能
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 11 OpenVZ(Virtuozzo) Linux 上で動作 (OpenVZ 用カーネル使用 ) Parallels 社が開発 OSS 版が OpenVZ 、商用版が Virtuozzo リソースをコンテナごとに分離可能 ファイルシステム ユーザグループ プロセスツリー ネットワーク デバイス、 IPC オブジェクト ライブマイグレーション可能
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 12 LXC Linux で動作 (2.6.29 以降 ) Namespace+CGroups で実装 Namespace 名前によってリソースをグループ化 CGroups(Control Groups) Namespace によってグループされたリ ソースを制御 CPU 、メモリ、ブロック I/O の制御
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 13 Docker Linux で動作 アプリケーションコンテナ =特定アプリケーションのみ動作する LXC や Namespace を使用して実装 Docker の image を git 登録すること で、 簡易にデプロイ可能
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 14 •Solaris Zone を使ったコンテナ型仮想化
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 15 Solaris Zone とは Solaris10 以降で実装 同じカーネルで複数 OS を動作 プロセス、ディスク、ネットワーク、 ユーザグループなどを分離 CPU 、メモリなどの制限 仮想化された Network(Project Crossbow) を有効利用 ZFS 機能の有効利用 OpenStack 連携
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 16 Solaris Zone の構成 Solaris 大域ゾーン (Global Zone) ローカルストレージ iSCSI FC-SAN 非大域ゾーン (Non-Global Zone) ZBE1 ZBE1 仮想 SW1 Net0 Net0 Net1 Zone2 ZBE2 ZBE2 DATA Net0 仮想 SW2 Net1DATA
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 17 Zone を作ってみる (1) Zone の設定 zonecfg -z ゾーン名 create; commit 対話型設定も可能 % sudo /usr/sbin/zonecfg -z zone1 'create ; verify ; export ; commit ' create -b set zonepath=/system/zones/%{zonename} set autoboot=false set autoshutdown=shutdown set ip-type=exclusive add anet set linkname=net0 set lower- set configure-allowed-address=true set link-protection=mac-nospoof set mac-address=auto end % sudo /usr/sbin/zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - zone1 configured /system/zones/zone1 solaris excl % sudo /usr/sbin/zonecfg -z zone1 zonecfg:zone1>
Page 18今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Zone を使ってみる (1) の補足 以下の設定値が必須 Zonepath Solaris11 では以下のように自動設定 Solaris11 以外では明示的に設定が必要 Network 設定 Solaris11 では anet が自動設定 net を使用して、 VNIC を明示的に指定可能 Solaris11 以外では VNIC の明示的な指定が必 要 詳しくは後述 set zonepath=/system/zones/%{zonename}
Page 19今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Zone を作ってみる (2) zonecfg -z ゾーン名 create ゾーン名の名前を付けた Zone を作成 zonecfg -z ゾーン名 verify Zone の設定を確認 zonecfg -z ゾーン名 export Zone の設定を出力 この出力情報を基に Zone 設定も可能 zonecfg -z ゾーン名 commit Zone の設定を確定 Solaris-1: % sudo /usr/sbin/zonecfg -z zone1 export > /net/solaris-2/share/zone1.cfg Solaris-2: % sudo /usr/sbin/zonecfg -z zone1 -f /share/zone1.cfg
Page 20今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Zone を作ってみる (3) Zone のインストール zoneadm -z ゾーン名 install pkg リポジトリへアクセスが必要 デフォルトで http://pkg.oracle.com/solaris/release/ % sudo /usr/sbin/zoneadm -z zone1 install The following ZFS file system(s) have been created: rpool/VARSHARE/zones/zone1 Progress being logged to /var/log/zones/zoneadm.20150224T232755Z.zone1.install Image: Preparing at /system/zones/zone1/root. ( 中略 ) Next Steps: Boot the zone, then log into the zone console (zlogin -C) to complete the configuration process. Log saved in non-global zone as /system/zones/zone1/root/var/log/zones/zoneadm.20150224T232755Z.zone1.inst % sudo /usr/sbin/zoneadm list -cv パスワード : ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - zone1 installed /system/zones/zone1 solaris excl
Page 21今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Zone を作ってみる (4) Zone のブート zonecfg -z ゾーン名 boot Zone の初期設定 zlogin -C ゾーン名 -C を指定して、コンソールモードで接続 初回設定 (sysconfig) ホスト名 ネットワーク設定 タイムゾーン 初期ユーザ・ root のパスワード 初回以外は zlogin ゾーン名で接続
Page 22今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring リソースの分離 同じカーネルを使用 プロセスの分離 CPU/ メモリの制限 ディスクの制限 ネットワークの制限
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 23 同じカーネルを使用 大域ゾーン システム コール メモリ 割り当て 非大域ゾーン プロセス システム コール メモリ 割り当て プロセス カーネル
今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 24 大域ゾーンからみたプロセス 大域ゾーンからは非大域ゾーンのプロセスが見える 非大域ゾーンのプロセス= 大域ゾーンのプロセス (Zone 名付 ) % ps -efZ ZONE UID PID PPID C STIME TTY TIME CMD global root 0 0 0 2 月 07 ? 0:02 sched global root 5 0 0 2 月 07 ? 85:24 zpool-rpool global root 1 0 0 2 月 07 ? 0:01 /sbin/init global root 2 0 0 2 月 07 ? 0:00 pageout global root 3 0 0 2 月 07 ? 109:36 fsflush ( 中略 ) global root 2356 1 0 2 月 07 ? 0:00 zoneadmd -z zone1 zone1 root 3611 1 0 2 月 07 ? 0:01 /usr/sbin/syslogd zone1 root 3591 3203 0 2 月 07 zoneconsole 0:00 /usr/lib/saf/ttymon ... zone1 root 3589 1 0 2 月 07 ? 0:07 /usr/lib/fm/fmd/fmd zone1 root 3582 3580 0 2 月 07 ? 0:00 /usr/lib/autofs/automountd zone1 root 3496 1 0 2 月 07 ? 0:00 /usr/sbin/cron zone1 root 3588 1 0 2 月 07 ? 0:00 /usr/lib/inet/inetd start
Page 25今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring 非大域ゾーンからみたプロセス 非大域ゾーンのプロセスしかみえない 他の非大域 Zone のプロセスも見えない % sudo zlogin zone1 ps -efZ Password: ZONE UID PID PPID C STIME TTY TIME CMD zone1 root 3580 2952 0 Feb 07 ? 0:00 /usr/lib/autofs/automountd zone1 root 3438 2952 0 Feb 07 ? 0:15 /usr/sbin/nscd zone1 root 3110 2952 0 Feb 07 ? 0:01 /sbin/init zone1 root 3569 2952 0 Feb 07 ? 0:00 /usr/lib/inet/in.ndpd ( 中略 ) zone1 root 3611 2952 0 Feb 07 ? 0:01 /usr/sbin/syslogd zone1 root 3591 3203 0 Feb 07 console 0:00 /usr/lib/saf/ttymon -g -d ... zone1 root 3589 2952 0 Feb 07 ? 0:07 /usr/lib/fm/fmd/fmd zone1 root 3582 3580 0 Feb 07 ? 0:00 /usr/lib/autofs/automountd zone1 root 3496 2952 0 Feb 07 ? 0:00 /usr/sbin/cron zone1 root 3588 2952 0 Feb 07 ? 0:00 /usr/lib/inet/inetd start
Page 26今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring CPU の制限 Zone の設定で CPU を制限 capped-cpu Zone で使用する CPU 時間を制限 1 を指定すると 100 %、 1.5 を指定すると 150% 動的変更可能 (Solaris11 のみ ) dedicated-cpu(Solaris11 のみ ) 特定の CPU を指定して割り当て zonecfg:zone1> add capped-cpu zonecfg:zone1:capped-cpu> set ncpus=1 zonecfg:zone1:capped-cpu> end zonecfg:zone1> add dedicated-cpu zonecfg:zone1:dedicated-cpu> set ncpus=3-4 zonecfg:zone1:dedicated-cpu> end zonecfg:zone1> add capped-cpu zonecfg:zone1:capped-cpu> set ncpus=1 zonecfg:zone1:capped-cpu> end
Page 27今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring メモリの制限 Zone の設定でメモリを制限 capped-memory ゾーンが使用できるメモリの最大値を指定 K 、 M 、 G 、 T の単位を指定可能 zonecfg:zone1> add capped-memory zonecfg:zone1:capped-memory> set physical=2G zonecfg:zone1:capped-memory> end
Page 28今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring 仮想化 Network の利用 Solaris11 、 OpenSolaris では Network が仮想 化されている 仮想 SW 、 NIC を自由に組み合わせ可能 closed なネットワークも利用可能 Zone に複数の仮想 NIC を割り当てることにより 、自由なネットワーク構成可能 Zone に割り当てられた仮想 NIC 以外は接続不可
Page 29今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring じゆうなねっとわーく Solaris11/OpenIndiana 大域ゾーン 物理 NIC VNIC01 仮想 SW1 仮想 SW2 Zone1 VNIC1 Zone2 VNIC11 VNIC12 VNIC21 ルーティング The Internet
Page 30今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Network の制限 割り当てた VNIC に対して帯域幅を制限 dladm を使用 maxbw を VNIC に対して指定すると帯域幅を制限 以下の例では、 100Mbps に制限 flowadm を使用 大域幅、優先度、接続先など より細かい制限が可能 % dladm show-linkprop -p maxbw zone1/net0 LINK PROPERTY PERM VALUE EFFECTIVE DEFAULT POSSIBLE zone1/net0 maxbw rw -- -- -- -- % sudo dladm set-linkprop -p maxbw=100 zone1/net0 % dladm show-linkprop -p maxbw zone1/net0 LINK PROPERTY PERM VALUE EFFECTIVE DEFAULT POSSIBLE zone1/net0 maxbw rw 100 100 -- --
Page 31今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring ZFS の使用 ZFS をゾーンの配置に使用 ZFS プール、 ZFS ファイルセットの 追加割り当て可能 ゾーン内からは、ゾーンに割り当てられた 領域以外アクセス不可 FC 、 iSCSI を zfs pool に割り当て可能 ※(注記) Solaris11 以降
Page 32今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring ZFS を使用したディスクの制限 Zone のパスに対して quota を設定 ZFS の機能を使用して、制限可能 以下は、 ZonePATH に対して、 1GB の quota を設定 % sudo /usr/sbin/zfs list rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris NAME USED AVAIL REFER MOUNTPOINT rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris 680M 23.2G 635M /system/zones/zone1/root % sudo /usr/sbin/zfs get mountpoint rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris NAME PROPERTY VALUE SOURCE rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris mountpoint /system/zones/zone1/root temporary % sudo /usr/sbin/zfs get quota rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris NAME PROPERTY VALUE SOURCE rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris quota none default % sudo /usr/sbin/zfs set quota=1G rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris % sudo /usr/sbin/zfs get quota rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris NAME PROPERTY VALUE SOURCE rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris quota 1G local
Page 33今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring ZFS を使用したデプロイ (1) ゾーンの clone 既存のゾーンと同じゾーンを作成 zoneadm -z ゾーン名 clone 既存ゾーン名 % sudo zonecfg -z zone2 'create; verify; commit' % sudo zoneadm list -v ID NAME STATUS PATH BRAND IP 0 global running / solaris shared % sudo zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - zone1 installed /system/zones/zone1 solaris excl - zone2 configured /system/zones/zone2 solaris excl % sudo zoneadm -z zone2 clone zone1 The following ZFS file system(s) have been created: rpool/VARSHARE/zones/zone2 Progress being logged to /var/log/zones/zoneadm.20150226T211933Z.zone2.clone Log saved in non-global zone as /system/zones/zone2/root/var/log/zones/zoneadm.20150226T211933Z % zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - zone1 installed /system/zones/zone1 solaris excl - zone2 installed /system/zones/zone2 solaris excl
Page 34今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring ZFS を使用したデプロイ (2) ZFS の clone を使用してデプロイ ZFS Clone は、 snapshot を元に書き込み可 能なファイルセットを作成する機能 snapshot 元との差分のみが書き込まれる ディスクの有効利用 % zfs list rpool/VARSHARE/zones/zone1/rpool/ROOT 717M 23.2G 31K legacy rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris 717M 307M 664M /system/zones/zone1/root rpool/VARSHARE/zones/zone1/rpool/ROOT/solaris/var 44.9M 307M 43.9M /system/zones/zone1/root/var rpool/VARSHARE/zones/zone2/rpool/ROOT 5.03M 23.2G 31K legacy rpool/VARSHARE/zones/zone2/rpool/ROOT/solaris-0 5.03M 23.2G 667M /system/zones/zone2/root rpool/VARSHARE/zones/zone2/rpool/ROOT/solaris-0/var 45K 23.2G 43.9M /system/zones/zone2/root/var
Page 35今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring ZFS の重複排除の有効利用 ZFS の重複排除 ブロック単位で同じデータを使いまわす 変更分のみ増える Zone は root パーティションがほぼ同じ =重複排除が効きやすい! Global-Zone Zone1 Zone2
Page 36今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring 変わりもの Zone たち Branded Zone LX Solaris8/9 Solaris10 Kernel Zone
Page 37今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring LX Zone なぜか Zone 内で Linux が動く ただし、 CentOS3.8 OpenSolaris で動作 Project Janus の成果 カーネルをエミュレート なので遅い ...? 正式版 Solaris10/11 ではサポートされず 最近、 StormOS(by Joyent) で動きが Ubuntu14.x が動いたとか...
Page 38今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Solaris8/9 Zone Solaris10 のみで動作 古い Solaris8/9 の延命 P2V でマイグレーション可能 ライブマイグレーション可能らしい ... 有償
Page 39今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Solaris10 Zone Solaris11 で動作 P2V 可能 標準機能!
Page 40今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Kernel Zone Solaris11.2 以降で動作 Zone は同じカーネルを使用 Kernel Zone は、別カーネルで動作 他ゾーンの動作影響を受けない パッチレベルの異なるカーネルを動作可能 CPU の仮想化命令が必要 VTi 、 AMD-V 、 SPARC T4/T5 物理空きメモリ 8GB 推奨 ZFS のキャッシュ (ARC) を制限する必要あり
Page 41今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring OpenStack と連携 Solaris11.2 から OpenStack サポート 前回 (OSC2014 Tokyo/Fall) 発表 http://www.slideshare.net/satorumiyazaki/oracle -solarisopenstack Havana ベース Zone および KernelZone をサポート Cinder(block storage) 、 Swift(Object Storage) で ZFS サポート Solaris11.2 の仮想化ネットワークスイッチ( Elastic Virtual Switch) と Neutron の連携
Page 42今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring そんな Zone の問題点 初回起動が遅い 数分かかる サービスの初期化が遅い ⇒AIマニフェストを指定して、インストールするP KGを制限する % zoneadm -z ゾーン名 install -m ai_manifest.xml 初回設定 (sysconfig 実施 ) ⇒ インストール時に sysconfig のマニフェスト指定 % zoneadm -z ゾーン名 install -c sc_manifest.xml カーネルパニックすると皆こける ⇒Kernel Zone くらいしか回避策なし
Page 43今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring まとめ Solaris Zone は、同じカーネルで動く =オーバヘッドが少ない CPU/Memory/Network 帯域 を制限 ZFS の機能をフル活用 Clone 重複排除 サイズ制限 変態ゾーンもあるよ LX とか、カーネルゾーンとか OpenStack と連携もあるよ