Solaris 10 Container Daniel Schossig daniel@schossig.net
Inhalt Definition Virtualisierung Betriebssystem Virtualisierungslösungen Vorteile Solaris 10 Container Zonen Container Netzwerk Beispiel Zonen/Container Zukunft Demo
Definition Virtualisierung Technik zum verbergen der physischen gegebenheiten einer Computerressource vor anderen Systemen, Applikationen oder Benutzern. Abstraktion von Computerressourcen Existiert nicht real, wirkt täuschend echt Unterscheidung Systemvirtualisierung und Betriebssystemvirtualisierung C't 2006/13 S. 182 http://en.wikipedia.org/wiki/virtualisation
Betriebssystemvirtualisierung Bildet reale Umgebung authentisch nach Unterschied zur SV: Prozessor ist echt Mehrere Betriebssystemumgebungen aber nur ein Betriebssystemkern Nach außen hin eigenständige Systeme C't 2006/13 S. 182
Virtualisierungslösungen Features File Operating system Disk I/O rate Memory CPU Network Live Mechanism system isolation quotas limiting limits quotas isolation migration Chroot Most UNIX-Like Yes No No No No No No Linux-Vserver Linux Yes Yes Yes/No[1] Yes Yes Yes No Openvz Linux Yes Yes Yes[2] Yes Yes Yes Yes Virtuozzo Linux, WindowsYes Yes Yes/No[1] Yes Yes Yes Yes Container Solaris Yes Yes No Yes Yes Yes[3] No[4] FreeBSD Jail FreeBSD Yes No No No No Yes No [1] Abhänig vom Scheduler [2] Seit 2.6.18 basierend auf CFQ Scheduler [3] Netzwerk ist nicht Isoliert, aber Virtualisiert. Eigene IP, route, Firewall möglich [4] shutdown-move-restart http://en.wikipedia.org/wiki/operating_system-level_virtualization
Praktischer Nutzen i.d.r. sind Virtuelle Umgebungen portabel Vereinfachte Administration Effektivere Ressourcennutzung Spart Platz und Kosten C't 2006/13 S. 182 http://blogs.sun.com/kchangs/resource/bootcamp-containers-041206.pdf
Vorteile Container Sehr gute Integration in Solaris Update sehr einfach Ressourcenmanagement sehr mächtig Alle Tools auf Zonen zugeschnitten Alles aus einem Guss http://www.sun.com/software/solaris/containers_learning_center.jsp
Anforderungen Solaris 10 x86/x64 mit 120MHz Sparc mit 250MHz 256MB RAM 2GB Festplattenspeicher Theoretisch über 8000 Container http://www.sun.com/software/solaris/specs.jsp http://www.opensolaris.org/os/community/zones/faq/
Zonen Virtuelle Umgebung Applikationen laufen darin Isoliert hilft bei: Softwarefehlern, Einbrüchen i.d.r. keine Anpassung der Anwendungen Global Zone Sparse-/Whole-root Zone Keine non-global zonen in non-global zonen http://www.opensolaris.org/os/community/zones/faq/#basic_zone http://regions.cmg.org/regions/mspcmg/presentations/may2006/solaris10%20overview%20cmg%205-2006.pdf
Sparse- und Whole-Root Zone Sparse-Root Zone Whole-Root Zone Gemeinsame Verzeichnisse Keine gemeinsamen Verzeichnisse Geringster Platzbedarf Einfach zu aktualisieren Einschränkungen beim konfigurieren Größter Platzbedarf Höherer Ressourcenverbrauch Keine Einschränkungen beim konfigurieren http://www.as-systeme.de/unternehmen/events/downloads/unternehmen/i.1c0fy-n01qp/best_practices http://www.opensolaris.org/os/community/zones/faq/#basic_glossary
Sparse und Whole-Root Zone http://www.as-systeme.de/unternehmen/events/downloads/unternehmen/i.1c0fy-n01qp/best_practices
Container nutzt Ressourcenmanagment von Solaris Resource Feineinstellungen Grobeinstellungen CPU Shares mit FSS* Prozessor Sets RAM Projects und rcapd Memory Sets HDD Größe ZFS, SVM Softpartitionen Eigene HDD/Slice HDD Durchsatz Eigene HDD/Controller Netzwerk IPQoS Eigene NICs *Fair Share Scheduler http://www.solarisinternals.com/wiki/index.php/zones_resource_controls
Prozessor Sets Fixed CPUs Feste Prozessoranzahl pro Zone Varying CPUs Min./Max. Prozessoranzahl pro Zone CPU Shares Vergabe von Shares http://www.solarisinternals.com/wiki/index.php/zones_resource_controls
Netzwerk Ein TCP/IP Stack für das gesamte System Zonen sehen Traffic anderer Zonen nicht Eine Routingtabelle im TCP/IP Stack Eigene IP Adresse Teilen meistens gemeinsame NIC http://www.as-systeme.de/unternehmen/events/downloads/unternehmen/i.1c0fy-n01qp/best_practices
Beispiel [root@test]/# zonecfg -z test-zone test-zone: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:test-zone> create zonecfg:test-zone> set autoboot=true zonecfg:test-zone> set zonepath=/export/test-zone zonecfg:test-zone> add net zonecfg:test-zone:net> set address=192.168.0.53 zonecfg:test-zone:net> set physical=hme0 zonecfg:test-zone:net> end
Beispiel zonecfg:test-zone> add fs zonecfg:test-zone:fs> set dir=/usr/local zonecfg:test-zone:fs> set special=/pub zonecfg:test-zone:fs> set type=lofs zonecfg:test-zone:fs> end zonecfg:test-zone> verify zonecfg:test-zone> commit
Beispiel zonecfg:test-zone> info zonename: test-zone zonepath: /export/testzone autoboot: true pool: limitpriv: inherit-pkg-dir: dir: /lib [...] fs: dir: /usr/local special: /pub raw not specified type: lofs options: [] net: address: 192.168.0.53 physical: hme0 zonecfg:test-zone> exit
Beispiel [root@test]/# mkdir /export/test-zone [root@test]/# chmod 700 /export/test-zone [root@test]/# zoneadm -z test-zone verify [root@test]/# zoneadm -z test-zone install Preparing to install zone <test-zone>. Creating list of files to copy from the global zone. Copying <4731> files to the zone.
Beispiel Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <1073> packages on the zone. Initializing package <5> of <1073>: percent complete: 0% Initialized <1073> packages on zone. Zone <test-zone> is initialized. The file </export/testzone/root/var/sadm/system/logs/install_log> contains a log of the zone installation.
Beispiel [root@test]/# zoneadm -z test-zone boot [root@test]/# zoneadm list -cv ID NAME STATUS PATH 0 global running / 1 postsql running /export/postsql 2 small-zone running /export/small-zone 3 test-zone running /export/test-zone [root@test]/# zlogin -C test-zone test-zone console login:
Ressourcenmanagment [root@test]/# svcadm enable pools [root@test]/# pooladm -s Beispiel CPU [root@test]/# poolcfg -c "create pool pool1" [root@test]/# poolcfg -c "create pool pool2" [root@test]/# zonecfg -z small-zone set pool=pool1 [root@test]/# zonecfg -z postsql set pool=pool2 [root@test]/# poolcfg -f - <<EOF > create pset pset1 (uint pset.min = 1 ; uint pset.max = 1) > associate pool pool1 (pset pset1) > EOF [root@test]/# poolcfg -f - <<EOF > create pset pset2 (uint pset.min = 1 ; uint pset.max = 1) > associate pool pool2 (pset pset2) > EOF http://www.opensolaris.org/os/project/rm/pools/msets/ http://www.solarisinternals.com/wiki/index.php/zones_resource_controls
Ressourcenmanagment [root@test]/# zonecfg -z small-zone info zonename: small-zone zonepath: /export/small-zone autoboot: true pool: pool1 [...] [root@test]/# zonecfg -z postsql info zonename: postsql zonepath: /export/postsql autoboot: true pool: pool2 [...] http://www.opensolaris.org/os/project/rm/pools/msets/ http://www.solarisinternals.com/wiki/index.php/zones_resource_controls
Ressourcenmanagment Beispiel Speicher > poolcfg -f <<EOF > create mset mset1 (uint mset.min = 512M; uint mset.max = 512M) > modify mset mset1 (uint mset.minswap = 1GB; uint mset.maxswap = 1GB) > associate pool pool1 (mset mset1) > EOF im Moment nur über rcapd lösbar http://www.opensolaris.org/os/project/rm/pools/msets/ http://www.solarisinternals.com/wiki/index.php/zones_resource_controls
Zukunft Ständige Weiterentwicklung Zukunftssicher Solaris Containers for Linux Applications ZFS Integration Konfigurierbare Privilegien Eigener TCP/IP Stack für jede Zone http://learningsolaris.com/archives/2006/03/13/zones-future-features/ http://www.itjungle.com/tug/tug110206-story01.html http://www.sun.com/software/solaris/scla.jsp http://www.opensolaris.org/os/community/brandz/brandz_lae_faq/
Demo Global Zone 192.168.0.50 small-zone 192.168.0.51 sshd Apache hme0:1 postsql 192.168.0.52 sshd postgresql hme0:2 /usr /lib /export/small-zone hme0
Wichtige Anlaufstellen http://www.sun.com/software/solaris/containers_learning_center.jsp http://docs.sun.com/app/docs/doc/819-2450 http://www.solarisinternals.com/wiki/index.php/zones http://learningsolaris.com/zones-unofficial-faq/ http://www.opensolaris.org/os/community/zones/faq/
Danke für die Aufmerksamkeit! Fragen?