15. 今もう一度知ろう。 Solaris のコンテナ型仮想化技術
OSC2015 Tokyo/Spring
Page 15
Solaris Zone とは
Solaris10 以降で実装
同じカーネルで複数 OS を動作
プロセス、ディスク、ネットワーク、
ユーザグループなどを分離
CPU 、メモリなどの制限
仮想化された Network(Project Crossbow)
を有効利用
ZFS 機能の有効利用
OpenStack 連携
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. 今もう一度知ろう。 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. Page 18今もう一度知ろう。 Solaris のコンテナ型仮想化技術
OSC2015 Tokyo/Spring
Zone を使ってみる (1) の補足
以下の設定値が必須
Zonepath
Solaris11 では以下のように自動設定
Solaris11 以外では明示的に設定が必要
Network 設定
Solaris11 では anet が自動設定
net を使用して、 VNIC を明示的に指定可能
Solaris11 以外では VNIC の明示的な指定が必
要
詳しくは後述
set zonepath=/system/zones/%{zonename}
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. 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. Page 21今もう一度知ろう。 Solaris のコンテナ型仮想化技術
OSC2015 Tokyo/Spring
Zone を作ってみる (4)
Zone のブート
zonecfg -z ゾーン名 boot
Zone の初期設定
zlogin -C ゾーン名
-C を指定して、コンソールモードで接続
初回設定 (sysconfig)
ホスト名
ネットワーク設定
タイムゾーン
初期ユーザ・ root のパスワード
初回以外は zlogin ゾーン名で接続
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. 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. 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. Page 28今もう一度知ろう。 Solaris のコンテナ型仮想化技術
OSC2015 Tokyo/Spring
仮想化 Network の利用
Solaris11 、 OpenSolaris では Network が仮想
化されている
仮想 SW 、 NIC を自由に組み合わせ可能
closed なネットワークも利用可能
Zone に複数の仮想 NIC を割り当てることにより
、自由なネットワーク構成可能
Zone に割り当てられた仮想 NIC 以外は接続不可
29. Page 29今もう一度知ろう。 Solaris のコンテナ型仮想化技術
OSC2015 Tokyo/Spring
じゆうなねっとわーく
Solaris11/OpenIndiana
大域ゾーン
物理 NIC
VNIC01
仮想 SW1
仮想 SW2
Zone1
VNIC1
Zone2
VNIC11
VNIC12
VNIC21
ルーティング
The Internet
31. Page 31今もう一度知ろう。 Solaris のコンテナ型仮想化技術
OSC2015 Tokyo/Spring
ZFS の使用
ZFS をゾーンの配置に使用
ZFS プール、 ZFS ファイルセットの
追加割り当て可能
ゾーン内からは、ゾーンに割り当てられた
領域以外アクセス不可
FC 、 iSCSI を zfs pool に割り当て可能
※ Solaris11 以降
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. 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