Solaris 10 - Zones (Solaris Containers)

Popis zón v Solarisu

Lukáš Cirkva


Obsah

Úvod
1. Vlastnosti Solaris Zones v krátkosti
1. Instalace
1.1. HW a hostitelský Solaris
1.2. Instalace zóny
1.2.1. Instalace ze šablony
1.3. První spuštění
2. Konfigurace a použití
2.1. Status a použití
2.2. Konfigurační soubory
2.3. Přídání zařízení
2.4. Ukončení a smazání zóny
3. Zdroje použité literatury

Úvod

Solaris 10 je unixový operační systém od společnosti Sun Microsystems vydaný začátkem roku 2005. Tento manuál slouží jako popis několika použití zajímavé technologie Solaris Zones.

Solaris Zones - (dovolím si přeložit jako zóny) je technologie umožňující vytvářet a provozovat virtuální servery a tím poskytovat na nezávislé a zabezpečené prostředí pro provoz aplikací. Zóny lze provozovat v operačním sytému Solaris 10. Zóny jsou dvojího druhu - jediná globální zóna (global zone) a lokální zóny (non-global zone), kterých v globální zóně lze provozovat množství omezené pouze výkonem HW do počtu 8192 na jednom serveru.

Globální zóna je plná bootovatelná instalace operačního systému Solaris 10 na x86 nebo sparc platformě. Ne-globální zóny z globální zóny lze instalovat, startovat, monitorovat, mazat či jinak spravovat příkazy zonecfg a zoneadm.

Základní vlastností, pro někoho výhodou pro jiného omezením, je jediný kernel v systému (FS /platform, /usr a /sbin), vše ostatní je odděleno od procesu init dále (co zóna to vlastní init). Například lze využívat vlastní souborový systém, virtuální HW, samozřejmostí je oddělené jmenný prostor i prostor procesů, tedy procesy i root konta v lokálních zónách nemají přístup do jiných zón.

1. Vlastnosti Solaris Zones v krátkosti

Souhrný soupis:

  • až 8192 zón na jediném fyzickém serveru

  • každá lokální zóna má vlastní oddělený systém kont ( například /etc/passwd), souborové systémy, zařízení, nastavení sítě, zdroje a zabezpečení.

  • komunikovat mezi lokálními zónami lze pouze přes síť

  • Solaris v zónach není nijak pozměněn, aplikace není nutno portovat

  • každou lokální zónu lze zapínat, vypínat nezávisle na ostatních

  • pro každou zónu lze přidělit systémové prostředky pomocí SW pro správu zdrojů (resource management). Například přidělit procentuální podíl na CPU nebo síťovce.

Kapitola 1. Instalace

1.1. HW a hostitelský Solaris

Pro instalaci jsem použil notebook jedné nejmenované značky a SW Vmware Worstation 5.0 (s demo licencí) pro snadnost instalace a snadnost testování z mého oblíbeného Debiánu.

Solaris 10 jsem nainstaloval do souboru a mnou vybraná instalace (vše bez GNU) zabírá na disku cca. 4GB prostoru. Pro Solaris 10 doporučuji min. 256MB RAM. Při 128MB v Java Desktopu (upravené Gnome) již mi odmítal spouštet procesy. :-) Instalace Solarisu do Vmware je jednoduchá, přesto doporučuji přečíst si návody na stránkách vmware.org.

Každá zóna spotřebuje minimálně 40MB RAM a 320MB na HDD.

Identifikace systému v Solarisu:

global-zone# uname -a
SunOS solaris 5.10 Generic i86pc i386 i86pc

Výpis souborového systému:

global-zone# df -h
Filesystem             size   used  avail capacity  Mounted on
/dev/dsk/c0d0s0         11G   3,1G   7,5G    30%    /
/devices                 0K     0K     0K     0%    /devices
ctfs                     0K     0K     0K     0%    /system/contract
proc                     0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
swap                   271M   608K   271M     1%    /etc/svc/volatile
objfs                    0K     0K     0K     0%    /system/object
/dev/dsk/c0d0p0:boot    10M   1,5M   8,6M    15%    /boot
/usr/lib/libc/libc_hwcap1.so.1
                        11G   3,1G   7,5G    30%    /lib/libc.so.1
fd                       0K     0K     0K     0%    /dev/fd
swap                   271M     0K   271M     0%    /tmp
swap                   271M    20K   271M     1%    /var/run

Výpis informace o procesoru:

global-zone# psrinfo -v
Status of virtual processor 0 as of: 07/10/2005 23:01:23
  on-line since 07/09/2005 20:39:45.
  The i386 processor operates at 1600 MHz,
        and has an i387 compatible floating point processor.

Nastavení sítě v Solarisu, relevatní soubory:

global-zone# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000 
pcn0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 2
        inet 172.16.146.128 netmask ffffff00 broadcast 172.16.146.255
        ether 0:c:29:7a:ce:75 
global-zone# cat /etc/hosts
#
# Internet host table
#
127.0.0.1       localhost       loghost
172.16.146.130  zone1
172.16.146.128  solaris # Added by DHCP
global-zone# cat /etc/netmasks 

172.16.146.0    255.255.255.0
global-zone# cat /etc/defaultrouter
172.16.146.129

1.2. Instalace zóny

Vytvoření cílového adresáře pro zóny:

global-zone# mkdir /ZONE

Stav zón, ve výpisu je pouze globální zóna, což je hostitelský Solaris 10:

global-zone# zoneadm list -vc
  ID NAME             STATUS         PATH                          
   0 global           running        / 

Vytvoření zóny s názvem zone1 a nastavení automatického spuštění po startu, nastavení sítě a nakonec výpis sdílených adresářů. "pcn0" je název fyzického síťového zařízení.

global-zone# zonecfg -z zone1
zone1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
zonecfg:zone1>  set zonepath=/ZONE/zone1
zonecfg:zone1> set autoboot=true
zonecfg:zone1> add net
zonecfg:zone1:net>
zonecfg:zone1:net> set address=172.16.146.130
zonecfg:zone1:net>               
zonecfg:zone1:net> set physical=pcn0
zonecfg:zone1:net> end
zonecfg:zone1> info
zonepath: /ZONE/zone1
autoboot: true
pool: 
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
net:
        address: 172.16.146.130
        physical: pcn0
zonecfg:zone1> verify
zonecfg:zone1> commit
zonecfg:zone1> ^D

Výpis nastavení zóny a stavu zón:

global-zone# zonecfg -z zone1 info
zonepath: /ZONE/zone1
autoboot: true
pool: 
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
net:
        address: 172.16.146.130
        physical: pcn0

Ve výpisu je globální zóna a jedna zóna pouze nakonfigurovaná:

global-zone# zoneadm list -vc
  ID NAME             STATUS         PATH                          
   0 global           running        /                             
   - zone1            configured     /ZONE/zone1

Tak a teď je čas zónu nainstalovat, doba instalace na mém notebooku trvá přibližně 15 minut.

global-zone# zoneadm -z zone1 install
Preparing to install zone <zone1>.
Creating list of files to copy from the global zone.
Copying <14666> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <965> packages on the zone.
Initialized <965> packages on zone.                                
Zone <zone1> is initialized.
The file </ZONE/zone1/root/var/sadm/system/logs/install_log> contains a log of the zone installation.

Velikost zóny po instalaci

global-zone# ls -la /ZONE/zone1/
total 6
drwx------   3 root     root         512 Jul 10 23:28 .
drwxr-xr-x   3 root     root         512 Jul 10 23:20 ..
drwxr-xr-x  16 root     root         512 Jul 10 23:32 root
global-zone# du -sk /ZONE/zone1
317476  /ZONE/zone1

Teď již je vidět zóna ve výpisu ve stavu po nainstalování, není běžící:

global-zone# zoneadm list -vc
  ID NAME             STATUS         PATH                          
   0 global           running        /                             
   - zone1            installed      /ZONE/zone1      

1.2.1. Instalace ze šablony

Když mám jednu zónu již vytvořenou mohu k instalaci dalších použít export nastavení do souboru současné zóny, pozměnit hostname a IP a nainstalovat.

Export nastavení do souboru:

gloval-zone# zonecfg -z zone1
zonecfg:zone1> export
create -b
set zonepath=/DATA/zone1
set autoboot=true
add net
set address=172.16.146.130
set physical=pcn0
end
zonecfg:zone1>  export -f /root/zone3.cfg

Změna údajů v souboru /root/zone3.cfg:

create -b
set zonepath=/DATA/zone3
set autoboot=true
add net
set address=172.16.146.133
set physical=pcn0
end

Konfigurace nové zóny ze šablony:

global-zone# zonecfg -z zone3 -f /root/zone3.cfg

máme zónu nastavenou, následuje instalace:

global-zone# zoneadm -z zone3 install

1.3. První spuštění

Boot zóny:

global-zone# zoneadm -z zone1 boot

Pro první připojení do zóny z hostitelského Solarisu - globální zóny je nutný parametr -C, který připojení k systémové konzoli a vyvolá následující dialogy. Průchod těmito dialogy způsobí konečnou dokonfiguraci zóny.

global-zone# zlogin  -C zone1
[Connected to zone 'zone1' console]

Zvolení jazyka a locales v interaktivním módu:

Select a Language
  0. English
  1. German
  2. fr
Please make a choice (0 - 2), or press h or ? for help: 0
Select a Locale
   0. English (C - 7-bit ASCII)
   1. Czech Republic (ISO8859-2)
   2. Czech Republic (UTF-8 + euro)
   3. Czech Republic (UTF-8)
   4. Hungary (ISO8859-2)
   5. Hungary (UTF-8)
   6. Poland (ISO8859-2)
   7. Poland (UTF-8)
   8. Slovakia (ISO8859-2)
   9. Go Back to Previous Screen
Please make a choice (0 - 9), or press h or ? for help: 1

V dalších krocích následuje volba jméno (hostname) počítače, nastavení sítě, zvolení časové zóny, zadání root hesla a reboot zóny. Mimo jiné se také vygenerují ssh klíče a nastaví se ssh daemon aktivní po startu.

Kapitola 2. Konfigurace a použití

Tato kapitola popisu jak nastavovat a pracovat se zónami.

2.1. Status a použití

Připojení do zóny na konzoli:

global-zone# zlogin  -C zone1
[Connected to zone 'zone1' console]

Výpis procesů v zóně:

zone1# ps -ef | more
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root   590   516   0 12:13:30 ?           0:00 /sbin/sh /lib/svc/method/sysidtool-net
    root   617   503   0 12:14:14 pts/2       0:00 -sh
    root   598   503   0 12:13:31 ?           0:00 /usr/sbin/cron
    root   516   503   0 12:13:16 ?           0:04 /lib/svc/bin/svc.startd
    root   503   503   0 12:13:15 ?           0:00 zsched
    root   514   503   0 12:13:16 ?           0:00 /sbin/init 
    root   518   503   0 12:13:16 ?           0:07 /lib/svc/bin/svc.configd
    root   629   622   0 12:14:55 pts/2       0:00 bash
    root   628   622   0 12:14:55 pts/2       0:00 ps -ef
    root   599   593   0 12:13:31 ?           0:00 /usr/sbin/sysidnet -l
    root   562   503   0 12:13:28 ?           0:00 /usr/sbin/nscd
    root   622   617   0 12:14:15 pts/2       0:00 bash
  daemon   564   503   0 12:13:28 ?           0:00 /usr/lib/crypto/kcfd
    root   593   590   0 12:13:30 ?           0:00 /usr/sbin/sysidnet -l
    root   626   503   0 12:14:47 ?           0:00 /usr/lib/ssh/sshd

Odpojení ze zóny kombinací kláves ~., což ve std. nastavení koliduje s ssh, nutno přenastavit (například parametr ssh -e "#" ...).

zone1# ~.

Výpis procesů init při spuštěné zóně:

global-zone# ps -ef | grep init
    root     1     0   0   Nov 10 ?           0:13 /sbin/init
    root  6084  6077   0 21:11:36 ?           0:00 /sbin/init 
    root  6504 28720   0 21:17:17 pts/2       0:00 grep init

global-zone# ps -ef | grep 6077
    root  6077     1   0 21:11:24 ?           0:00 zsched
    root  6084  6077   0 21:11:36 ?           0:00 /sbin/init 

2.2. Konfigurační soubory

Konfigurační soubory se nachází v adresáři /etc/zone.

Soubor /etc/zones/index obsahuje informace o nastavených zónách:

global:installed:/
zone1:installed:/DATA/zone1
zone2:installed:/DATA/zone2
zone3:installed:/DATA/zone3

Konfigurace konkrétních zón se nacházejí v samostatných souborech /etc/zones/zone_name.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
    DO NOT EDIT THIS FILE.  Use zonecfg(1M) instead.
-->
<zone name="zone1" zonepath="/DATA/zone1" autoboot="true">
  <network address="172.16.146.130" physical="eri0"/>
</zone>

2.3. Přídání zařízení

Vytvoření loop-back souborového systému (FS) v souboru:

global-zone#  mkfile 1g /DATA/file1
global-zone#  lofiadm -a /DATA/file1

Přidání zařízení do zóny, pozor je nutné přidat raw i character device:

global-zone# zonecfg -z zone1
zonecfg:zone1> add device
zonecfg:zone1:device> set match=/dev/lofi/1
zonecfg:zone1:device> set match=/dev/rlofi/1
zonecfg:zone1:device> end
zonecfg:zone1> verify
zonecfg:zone1> commit
zonecfg:zone1>D^

Výpis zařízení v zóně po rebootu:

zone1# ls -la /dev/lofi/1
brw-------   1 root     sys      147,  1 Nov 13 21:47 /dev/lofi/1

Vytvoření souborového systému:

zone1#  newfs /dev/lofi/1
newfs: construct a new file system /dev/rlofi/1: (y/n)? y
/dev/rlofi/1:   2097000 sectors in 3495 cylinders of 1 tracks, 600 sectors
        1023.9MB in 219 cyl groups (16 c/g, 4.69MB/g, 2240 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 9632, 19232, 28832, 38432, 48032, 57632, 67232, 76832, 86432,

Připojení FS a výpis obsazeného prostoru:

zone1# mount /dev/lofi/1 /DATA

bash-3.00# df -h
Filesystem             size   used  avail capacity  Mounted on
/                       33G   4.0G    29G    13%    /
/dev                    33G   4.0G    29G    13%    /dev
proc                     0K     0K     0K     0%    /proc
ctfs                     0K     0K     0K     0%    /system/contract
swap                   3.0G   272K   3.0G     1%    /etc/svc/volatile
mnttab                   0K     0K     0K     0%    /etc/mnttab
fd                       0K     0K     0K     0%    /dev/fd
swap                   3.0G     0K   3.0G     0%    /tmp
swap                   3.0G    32K   3.0G     1%    /var/run
/dev/lofi/1            961M   1.0M   902M     1%    /DATA

2.4. Ukončení a smazání zóny

Zóny je nejdříve vhodné vypnout příkazem (v zóně) init 5 nebo halt nebo z hostitelského Solarisu:

global-zone# zlogin zone1 shutdown -y -i0 -g0

deinstalace zóny:

global-zone# zoneadm -z zone1 uninstall -F
global-zone# zoneadm list -cv
  ID NAME             STATUS         PATH                          
   0 global           running        /                             
   - zone1            configured     /ZONE/zone1

a smazání zóny:

global-zone# zonecfg -z zone1 delete -F
global-zone# zoneadm list -cv
  ID NAME             STATUS         PATH                          
   0 global           running        / 

Kapitola 3. Zdroje použité literatury

Seznam odkazů použité literatury:

TOPlist