Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

今もう一度知ろう。 Solarisのコンテナ型仮想化技術

Solarisで提供されるコンテナ型の仮想化技術Zoneについて、実際に作成方法など含めて紹介する

  • Login to see the comments

今もう一度知ろう。 Solarisのコンテナ型仮想化技術

  1. 1. 今もう一度知ろう。 Solaris のコンテナ型 仮想化技術 みやざきさとる 日本 OpenSolaris ユーザグループ
  2. 2. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 2 Agenda コンテナ型仮想化とは Solaris Zone を使った コンテナ型仮想化 Zone の使い方
  3. 3. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 3 自己紹介 とある IT 企業の Solaris 使い Twitter: s_miyaza Solaris なのは趣味です 最近 Solaris のお仕事がありません… (´ ・ ω ・` )
  4. 4. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 4 コンテナ型仮想化とは
  5. 5. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 5 仮想化についておさらい 同一ハードウェアで、別 OS を動かす 別 OS 別アーキテクチャ OS の物理的制約を回避し、柔軟に構成 メモリ ディスク ネットワーク
  6. 6. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 6 ネイティブ仮想化とコンテナ型仮想化 ネイティブ仮想化 エミュレータにより子 OS を動作 OS 側は無修正で動作 オーバヘッドあり VMware 、 Xen 、 KVM など コンテナ型仮想化 OS 権限を使用して子 OS を分離 同じ OS が動作 ( 基本的には ...) オーバヘッドなし Jail 、 Solaris Zone 、 LXC など
  7. 7. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 7 コンテナ型仮想化とは OS レベルでカプセル化 基本的に、同一 OS で動作 コンテナからは他コンテナ、親のリソースに アクセス不可 親からはコンテナのリソースにアクセス可能 オーバヘッドなし 同じ OS で動く リソースも親まかせ
  8. 8. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 8 いろいろなコンテナ Chroot Jail OpenVZ(Virtuozzo) LXC Docker Solaris Zone
  9. 9. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 9 Chroot 指定したパスを root として動作する chroot 化のプロセスは上位にアクセス不可 指定したパス以下に使用バイナリコピー ネットワークは親 OS のものを使用 CPU/ メモリなどの制限不可 UNIX 系 OS ならたいてい使用可能
  10. 10. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 10 Jail FreeBSD で動作 ファイルシステム、プロセス空間、 ユーザアカウントなどを親 OS から分離 jail ごとに一つの IP アドレスを使用可能
  11. 11. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 11 OpenVZ(Virtuozzo) Linux 上で動作 (OpenVZ 用カーネル使用 ) Parallels 社が開発 OSS 版が OpenVZ 、商用版が Virtuozzo リソースをコンテナごとに分離可能 ファイルシステム ユーザグループ プロセスツリー ネットワーク デバイス、 IPC オブジェクト ライブマイグレーション可能
  12. 12. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 12 LXC Linux で動作 (2.6.29 以降 ) Namespace+CGroups で実装 Namespace 名前によってリソースをグループ化 CGroups(Control Groups) Namespace によってグループされたリ ソースを制御 CPU 、メモリ、ブロック I/O の制御
  13. 13. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 13 Docker Linux で動作 アプリケーションコンテナ =特定アプリケーションのみ動作する LXC や Namespace を使用して実装 Docker の image を git 登録すること で、 簡易にデプロイ可能
  14. 14. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 14 •Solaris Zone を使ったコンテナ型仮想化
  15. 15. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 15 Solaris Zone とは Solaris10 以降で実装 同じカーネルで複数 OS を動作 プロセス、ディスク、ネットワーク、 ユーザグループなどを分離 CPU 、メモリなどの制限 仮想化された Network(Project Crossbow) を有効利用 ZFS 機能の有効利用 OpenStack 連携
  16. 16. 今もう一度知ろう。 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
  17. 17. 今もう一度知ろう。 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-link=auto 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>
  18. 18. Page 18今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Zone を使ってみる (1) の補足 以下の設定値が必須 Zonepath Solaris11 では以下のように自動設定 Solaris11 以外では明示的に設定が必要 Network 設定 Solaris11 では anet が自動設定 net を使用して、 VNIC を明示的に指定可能 Solaris11 以外では VNIC の明示的な指定が必 要 詳しくは後述 set zonepath=/system/zones/%{zonename}
  19. 19. 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
  20. 20. 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
  21. 21. Page 21今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Zone を作ってみる (4) Zone のブート zonecfg -z ゾーン名 boot Zone の初期設定 zlogin -C ゾーン名 -C を指定して、コンソールモードで接続 初回設定 (sysconfig) ホスト名 ネットワーク設定 タイムゾーン 初期ユーザ・ root のパスワード 初回以外は zlogin ゾーン名で接続
  22. 22. Page 22今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring リソースの分離 同じカーネルを使用 プロセスの分離 CPU/ メモリの制限 ディスクの制限 ネットワークの制限
  23. 23. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Page 23 同じカーネルを使用 大域ゾーン システム コール メモリ 割り当て 非大域ゾーン プロセス システム コール メモリ 割り当て プロセス カーネル
  24. 24. 今もう一度知ろう。 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
  25. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. Page 28今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring 仮想化 Network の利用 Solaris11 、 OpenSolaris では Network が仮想 化されている 仮想 SW 、 NIC を自由に組み合わせ可能 closed なネットワークも利用可能 Zone に複数の仮想 NIC を割り当てることにより 、自由なネットワーク構成可能 Zone に割り当てられた仮想 NIC 以外は接続不可
  29. 29. Page 29今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring じゆうなねっとわーく Solaris11/OpenIndiana 大域ゾーン 物理 NIC VNIC01 仮想 SW1 仮想 SW2 Zone1 VNIC1 Zone2 VNIC11 VNIC12 VNIC21 ルーティング The Internet
  30. 30. 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 -- --
  31. 31. Page 31今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring ZFS の使用 ZFS をゾーンの配置に使用 ZFS プール、 ZFS ファイルセットの 追加割り当て可能 ゾーン内からは、ゾーンに割り当てられた 領域以外アクセス不可 FC 、 iSCSI を zfs pool に割り当て可能 ※ Solaris11 以降
  32. 32. 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
  33. 33. 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
  34. 34. 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
  35. 35. Page 35今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring ZFS の重複排除の有効利用 ZFS の重複排除 ブロック単位で同じデータを使いまわす 変更分のみ増える Zone は root パーティションがほぼ同じ =重複排除が効きやすい! Global-Zone Zone1 Zone2
  36. 36. Page 36今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring 変わりもの Zone たち Branded Zone LX Solaris8/9 Solaris10 Kernel Zone
  37. 37. Page 37今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring LX Zone なぜか Zone 内で Linux が動く ただし、 CentOS3.8 OpenSolaris で動作 Project Janus の成果 カーネルをエミュレート なので遅い ...? 正式版 Solaris10/11 ではサポートされず 最近、 StormOS(by Joyent) で動きが Ubuntu14.x が動いたとか…
  38. 38. Page 38今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Solaris8/9 Zone Solaris10 のみで動作 古い Solaris8/9 の延命 P2V でマイグレーション可能 ライブマイグレーション可能らしい ... 有償
  39. 39. Page 39今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Solaris10 Zone Solaris11 で動作 P2V 可能 標準機能!
  40. 40. Page 40今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring Kernel Zone Solaris11.2 以降で動作 Zone は同じカーネルを使用 Kernel Zone は、別カーネルで動作 他ゾーンの動作影響を受けない パッチレベルの異なるカーネルを動作可能 CPU の仮想化命令が必要 VTi 、 AMD-V 、 SPARC T4/T5 物理空きメモリ 8GB 推奨 ZFS のキャッシュ (ARC) を制限する必要あり
  41. 41. 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 の連携
  42. 42. 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 くらいしか回避策なし
  43. 43. Page 43今もう一度知ろう。 Solaris のコンテナ型仮想化技術 OSC2015 Tokyo/Spring まとめ Solaris Zone は、同じカーネルで動く =オーバヘッドが少ない CPU/Memory/Network 帯域 を制限 ZFS の機能をフル活用 Clone 重複排除 サイズ制限 変態ゾーンもあるよ LX とか、カーネルゾーンとか OpenStack と連携もあるよ

×