Dernière mise-à-jour : 2020/01/30 03:28
Le concept de zones sous Solaris est similaire du concept des BSD Jails. Vue de cette façon une zone est une machine virtuelle minimaliste.
Au lieu de monopoliser un ordinateur par serveur monté, il est possible d'installer plusieurs prisons ou zones dans le même ordinateur.
Sous Solaris le terme container peut défini en tant que :
Solaris container = Solaris Zone + Solaris Resource Manager ( SRM )
Chaque zone nécessite approximativement 100Mo d'espace disque et 15Mo de mémoire vive.
Il existe deux types de zones :
Une zone globale :
Une zone locale :
Il existe deux types de zones locales :
C'est le type de zone par défaut. Il partage les répertoires suivants avec la zone globale :
Contient une arborescence propre à elle.
Créez un File System dédié aux zones :
# zfs list NAME USED AVAIL REFER MOUNTPOINT mypool 372K 340M 37,4K /mypool # zfs create -o mountpoint=/zones mypool/zones # zfs list NAME USED AVAIL REFER MOUNTPOINT mypool 227K 340M 37,4K /mypool mypool/zones 37,4K 340M 37,4K /zones
Créez maintenant une zone en utilisant la commande zonecfg :
# zonecfg -z myzone myzone: Aucune zone de cette sorte configurée Utilisez 'create' pour commencer à configurer une nouvelle zone. zonecfg:myzone> create zonecfg:myzone> set zonepath=/zones/myzone zonecfg:myzone> set autoboot=true zonecfg:myzone> verify zonecfg:myzone> commit zonecfg:myzone> exit
L'option -z indique à la commande zonecfg que l'argument myzone est le nom de la zone.
La configuration de votre zone est stocké zone un fichier xml :
# cat /etc/zones/myzone.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="myzone" zonepath="/zones/myzone" autoboot="true"> <inherited-pkg-dir directory="/lib"/> <inherited-pkg-dir directory="/platform"/> <inherited-pkg-dir directory="/sbin"/> <inherited-pkg-dir directory="/usr"/> </zone>
Pour créer une BIG zone, il convient de supprimer les lignes <inherited-pkg-dir directory=“/chemin”/> et </zone>. Par exemple :
<?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="myzone1" zonepath="/zones/myzone1" autoboot="true"/>
Vous pouvez aussi utiliser la commande create -b pour générer ce fichier automatiquement.
Votre fichier de zone a été généré en utilisant un modèle :
# cat /etc/zones/SUNWdefault.xml <?xml version="1.0"?> <!-- Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. ident "@(#)SUNWdefault.xml 1.2 07/01/14 SMI" DO NOT EDIT THIS FILE. Use zonecfg(1M) instead. --> <!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1"> <zone name="default" zonepath="" autoboot="false"> <inherited-pkg-dir directory="/lib"/> <inherited-pkg-dir directory="/platform"/> <inherited-pkg-dir directory="/sbin"/> <inherited-pkg-dir directory="/usr"/> </zone>
Vous pouvez voir la configuration de votre zone en utilisant la commande info:
# zonecfg -z myzone zonecfg:myzone> info zonename: myzone zonepath: /zones/myzone brand: native autoboot: true bootargs: pool: limitpriv: scheduling-class: ip-type: shared hostid: inherit-pkg-dir: dir: /lib inherit-pkg-dir: dir: /platform inherit-pkg-dir: dir: /sbin inherit-pkg-dir: dir: /usr zonecfg:myzone>
Pour quitter zonecfg, utilisez la commande exit :
zonecfg:myzone> exit #
Lister les zones sur votre machine en utilisant la sous-commande list de la commande zoneadm :
# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - myzone configured /zones/myzone native shared
Les options utilisées avec la commande sont :
Switch | Description |
---|---|
-c | Lister toutes les zones |
-v | Verbose |
Notez que la zone locale est configurée par défaut avec une couche IP partagée (shared). Ceci implique que l'interface réseau est partagée entre la zone globale et la zone locale. De ce fait aucune configuration du routage ne peut être faite dans la zone locale. En effet tout le routage doit être configuré dans la zone globale. Il est cependant possible de dédier une interface réseau à la zone locale en stipulant set ip-type=exclusive avec la commande zonecfg.
Installez maintenant votre zone :
# zoneadm -z myzone install Un système de fichiers ZFS a été créé pour cette zone. Preparing to install zone <myzone>. Creating list of files to copy from the global zone. Copying <2893> files to the zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <1181> packages on the zone. Initialized <1181> packages on zone. Zone <myzone> is initialized. Le fichier </zones/myzone/root/var/sadm/system/logs/install_log> contient un journal de l'installation de la zone.
Lister de nouveau vos zones :
# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - myzone installed /zones/myzone native shared
Notez que le STATUS de myzone est passé de configured à installed.
Vérifiez et démarrez votre zone ainsi :
# zoneadm -z myzone verify # zoneadm -z myzone boot
Vérifiez maintenant que le statut de myzone est passé à running :
# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared 1 myzone running /zones/myzone native shared
Connectez-vous maintenant à votre zone :
# zlogin -C myzone [Connecté à la console de la zone 'myzone']
Appuyez sur la touche ↵ Entrée et configurez la zone :
Après que la zone soit redémarrée, vous verrez un résultat similaire à celui-ci :
rebooting system due to change(s) in /etc/default/init [NOTICE : Zone en cours de réinitialisation] SunOS Release 5.10 Version Generic_147441-01 64-bit Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved. Hostname: myzone.fenestros.loc myzone.fenestros.loc console login:
Ouvrez un autre terminal et connectez-vous directement à la zone en utilisant l'option -S avec la commande zlogin :
# zlogin -S myzone [Connecté à la zone 'myzone' pts/7] # pwd / # hostname myzone.fenestros.loc #
Créez l'utilisateur user1 dans myzone :
# zlogin -S myzone [Connecté à la zone 'myzone' pts/7] # mkdir -p /export/home/user1 # useradd -d /export/home/user1 -m user1 # passwd user1 New Password: pass1234 Re-enter new Password: pass1234 passwd: password successfully changed for user1 # exit [Connexion à la zone 'myzone' pts/5 fermée] #
Afin de se connecter à myzone directement en tant qu'user1, utilisez l'option -l de la commande zlogin :
# zlogin -l user1 myzone [Connecté à la zone 'myzone' pts/5] Oracle Corporation SunOS 5.10 Generic Patch January 2005 $ exit [Connexion à la zone 'myzone' pts/5 fermée] #
Pour pouvoir partager des fichiers, vous devez configurer un montage de type LOFS.
Dans la zone globale, créez un répertoire pour partager des fichiers :
# mkdir -p /root/zones/myzone
Utilisez maintenant la commande zonecfg afin de configurer le partage :
# zonecfg -z myzone zonecfg:myzone> add fs zonecfg:myzone:fs> set dir=/root/share zonecfg:myzone:fs> set special=/root/zones/myzone zonecfg:myzone:fs> set type=lofs zonecfg:myzone:fs> add options [rw,nodevices] zonecfg:myzone:fs> end zonecfg:myzone> exit #
Notez que dir indique le point de montage dans la zone locale tandis que special indique le partage dans la zone globale.
Créez maintenant un fichier dans /root/zones/myzone :
# touch /root/zones/myzone/testshare
Redémarrez la zone myzone, connectez-vous en tant que root et vérifiez que vous pouvez voir le partage. Ensuite créez un fichier dans /root/share :
# zoneadm -z myzone reboot # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared 3 myzone running /zones/myzone native shared # zlogin -S myzone [Connecté à la zone 'myzone' pts/5] # cd /root # ls share # cd share # ls testshare # touch shareback
Quittez la zone myzone et vérifiez que vous pouvez voir le fichier shareback à partir de la zone globale :
# exit [Connexion à la zone 'myzone' pts/5 fermée] # ls /root/zones/myzone shareback testshare
Insérez le CD des Additions invité de VirtualBox en utilisant les menus Périphériques > Installer les Additions invité … de la fenêtre de votre machine virtuelle.
Vous pouvez aussi partager le lecteur DVD de la zone globale. Par contre il ne faut pas utiliser la procédure ci-dessus car celle-ci crée un point de montage permenant de type LOFS qui vous empêchera de retirer un DVD du lecteur tant que a zone locale fonctionne :
# mkdir /zones/myzone/root/globaldvdrom # ls /cdrom/cdrom0 # ls /cdrom/cdrom0 32Bit runasroot.sh 64Bit VBoxLinuxAdditions.run AUTORUN.INF VBoxSolarisAdditions.pkg autorun.sh VBoxWindowsAdditions-amd64.exe cert VBoxWindowsAdditions-x86.exe OS2 VBoxWindowsAdditions.exe # mount -F lofs /cdrom/cdrom0 /zones/myzone/root/globaldvdrom # zlogin myzone ls /globaldvdrom 32Bit 64Bit AUTORUN.INF OS2 VBoxLinuxAdditions.run VBoxSolarisAdditions.pkg VBoxWindowsAdditions-amd64.exe VBoxWindowsAdditions-x86.exe VBoxWindowsAdditions.exe autorun.sh cert runasroot.sh
Démontez le DVD et éjectez-le :
# umount /zones/myzone/root/globaldvdrom # eject cdrom
Pour retirer le partage LOFS, il faut procéder ainsi :
# zonecfg -z myzone zonecfg:myzone> info fs fs: dir: /root/share special: /root/zones/myzone raw non spécifié type: lofs options: [rw,nodevices] zonecfg:myzone> remove fs dir=/root/share zonecfg:myzone> exit # zoneadm -z myzone reboot #
Avant de continuer, arrêtez votre VM Solaris, ajoutez un deuxième processeur à la VM et démarrez-la.
Visualisez d'abord ce que votre zone locale a détecté en tant que CPU présents :
# zlogin myzone psrinfo -v Status of virtual processor 0 as of: 06/05/2013 12:05:25 on-line since 06/05/2013 11:45:32. The i386 processor operates at 2300 MHz, and has an i387 compatible floating point processor. Status of virtual processor 1 as of: 06/05/2013 12:05:25 on-line since 06/05/2013 11:45:34. The i386 processor operates at 2300 MHz, and has an i387 compatible floating point processor.
Comme vous pouvez constater, la zone locale s'est attribué les deux processeurs. Afin de limiter la zone locale à un seul processeur il convient de modifier la configuration de celle-ci :
# zonecfg -z myzone zonecfg:myzone> add dedicated-cpu zonecfg:myzone:dedicated-cpu> set ncpus=1 zonecfg:myzone:dedicated-cpu> end zonecfg:myzone> exit # zoneadm -z myzone reboot # zlogin myzone psrinfo -v Status of virtual processor 0 as of: 06/05/2013 12:09:33 on-line since 06/05/2013 11:45:32. The i386 processor operates at 2300 MHz, and has an i387 compatible floating point processor. #
Le CPU dédié est maintenant invisible aux zones locales. Vous pouvez aussi faire une allocation variable telle 1-3, au quel cas, la machine sera lancée avec un minimum d'un processeur et un maximum de 3 processeurs en fonction de la disponibilité.
Pour retirer un processeur dédié, procédez ainsi :
# zonecfg -z myzone "remove dedicated-cpu" # zoneadm -z myzone reboot
Vous pouvez aussi partager le CPU en utilisant le Fair Share Scheduler. Premièrement il convient de définir le FSS comme ordonnanceur par défaut pour la zone globale :
# dispadmin -d FSS # dispadmin -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) SDC (System Duty-Cycle Class) FX (Fixed Priority) IA (Interactive) FSS (Fair Share)
Ensuite définir la même chose pour la zone locale :
# zonecfg -z myzone "set scheduling-class=FSS"
% Vous pouvez maintenant attribuer 75% des deux processeurs à la zone globale et 25% à la zone locale :
# zonecfg -z myzone "set scheduling-class=FSS" # zonecfg -z global zonecfg:global> set cpu-shares=75 zonecfg:global> exit # zonecfg -z myzone zonecfg:myzone> set cpu-shares=25 zonecfg:myzone> exit # zoneadm -z myzone reboot #
IL existe trois types de plafonnement de mémoire dans une zone :
Plafonnement | Description |
---|---|
Physical | Quantité totale de mémoire physique disponible pour la zone. |
Locked | Quantité de mémoire qui peut allouée à une application gourmande par une zone. |
Swap | Quantité d'espace swap utilisable par une zone. |
Pour plafonner la mémoire physique d'une zone, il convient de configurer la propriété capped-memory :
# zonecfg -z myzone zonecfg:myzone> add capped-memory zonecfg:myzone:capped-memory> set physical=50m zonecfg:myzone:capped-memory> end zonecfg:myzone> exit # zonecfg -z myzone info capped-memory capped-memory: physical: 50M #
Certaines tâches ne peuvent être faites à partir d'une zone locale. Pour visualiser les privilèges disponibles dans la zone locale myzone, utilisez la commande suivante :
# zlogin myzone ppriv -l contract_event contract_observer cpc_cpu dtrace_kernel dtrace_proc dtrace_user file_chown file_chown_self file_dac_execute file_dac_read file_dac_search file_dac_write file_downgrade_sl file_link_any file_owner file_setid file_upgrade_sl graphics_access graphics_map ipc_dac_read ipc_dac_write ipc_owner net_bindmlp net_icmpaccess net_mac_aware net_privaddr net_rawaccess proc_audit proc_chroot proc_clock_highres proc_exec proc_fork proc_info proc_lock_memory proc_owner proc_priocntl proc_session proc_setid proc_taskid proc_zone sys_acct sys_admin sys_audit sys_config sys_devices sys_ipc_config sys_linkdir sys_mount sys_ip_config sys_net_config sys_nfs sys_res_config sys_resource sys_suser_compat sys_time sys_trans_label win_colormap win_config win_dac_read win_dac_write win_devices win_dga win_downgrade_sl win_fontpath win_mac_read win_mac_write win_selection win_upgrade_sl net_access
Pour modifier le nom d'une zone celle-ci doit être arrêtée :
# zoneadm -z myzone halt
Changez ensuite le nom de la zone à myzone1 :
# zonecfg -z myzone "set zonename=myzone1" # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - myzone1 installed /zones/myzone native shared
Pour modifier la Dataset associée avec une zone, utilisez la commande suivante :
# zoneadm -z myzone1 move /zones/myzone1 # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - myzone1 installed /zones/myzone1 native shared
Sauvegarder une zone implique la sauvegarde de la configuration de la zone ainsi que les données d'application à l'intérieur de la zone. Vous pouvez utiliser tout type de logiciel de sauvegarde pour les données puis exporter et ré-importer après la restauration de la zone. La configuration de la zone est sauvegardée ainsi :
# zonecfg -z myzone1 export -f myzone1.config # cat myzone1.config create -b set zonepath=/zones/myzone1 set autoboot=true set scheduling-class=FSS set ip-type=shared add inherit-pkg-dir set dir=/lib end add inherit-pkg-dir set dir=/platform end add inherit-pkg-dir set dir=/sbin end add inherit-pkg-dir set dir=/usr end add capped-memory set physical=50M end add rctl set name=zone.cpu-shares add value (priv=privileged,limit=25,action=none) end
Désinstallez et supprimez myzone1 :
# zoneadm -z myzone1 uninstall Voulez-vous vraiment uninstall la zone myzone1 (y/[n])? y Un système de fichier ZFS a été détruit pour cette zone. # zonecfg -z myzone1 delete Voulez-vous vraiment supprimer la zone myzone1 (y/[n])? y
Restaurez maintenant myzone1 :
# zonecfg -z myzone1 -f myzone1.config # zoneadm -z myzone1 install Un système de fichiers ZFS a été créé pour cette zone. Preparing to install zone <myzone1>. Creating list of files to copy from the global zone. Copying <2893> files to the zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <1181> packages on the zone. Initialized <1181> packages on zone. Zone <myzone1> is initialized. Le fichier </zones/myzone1/root/var/sadm/system/logs/install_log> contient un journal de l'installation de la zone.
Afin que la zone ne vous pose pas de questions lors de la première connexion, supprimez le fichier /zones/myzone1/root/etc/.UNCONFIGURED :
# rm /zones/myzone1/root/etc/.UNCONFIGURED
Vérifiez le statut de votre zone :
# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared - myzone1 installed /zones/myzone1 native shared
Vérifiez la configuration de la zone :
# zonecfg -z myzone1 zonecfg:myzone1> info zonename: myzone1 zonepath: /zones/myzone1 brand: native autoboot: true bootargs: pool: limitpriv: scheduling-class: FSS ip-type: shared hostid: [cpu-shares: 25] inherit-pkg-dir: dir: /lib inherit-pkg-dir: dir: /platform inherit-pkg-dir: dir: /sbin inherit-pkg-dir: dir: /usr capped-memory: physical: 50M rctl: name: zone.cpu-shares value: (priv=privileged,limit=25,action=none) zonecfg:myzone1> exit #
Démarrez votre zone :
# zoneadm -z myzone1 verify # zoneadm -z myzone1 boot
Vérifiez que vous pouvez vous connecter en tant que root :
# zlogin -S myzone1 [Connecté à la zone 'myzone1' pts/4] # hostname myzone1 # ls bin export lib opt sbin usr dev home mnt platform system var etc kernel net proc tmp # exit [Connexion à la zone 'myzone1' pts/4 fermée] #
Dans cette section vous allez créer un modèle de zone que vous pouvez utiliser pour créer d'autres zones. Commencez par créer une zone qui s'appelle cleanzone :
# zonecfg -z cleanzone cleanzone: Aucune zone de cette sorte configurée Utilisez 'create' pour commencer à configurer une nouvelle zone. zonecfg:cleanzone> create zonecfg:cleanzone> set zonepath=/zones/cleanzone zonecfg:cleanzone> set autoboot=true zonecfg:cleanzone> verify zonecfg:cleanzone> commit zonecfg:cleanzone> exit #
Installez la zone :
# zoneadm -z cleanzone install Un système de fichiers ZFS a été créé pour cette zone. Preparing to install zone <cleanzone>. Creating list of files to copy from the global zone. Copying <2893> files to the zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <1181> packages on the zone. Initialized <1181> packages on zone. Zone <cleanzone> is initialized. Le fichier </zones/cleanzone/root/var/sadm/system/logs/install_log> contient un journal de l'installation de la zone.
Démarrez la zone pour importer le fichier manifest :
root@solaris:~# zoneadm -z cleanzone boot
Connectez-vous en tant que root et appuyez sur la touche ↵ Entrée. Quittez la zone immédiatement en appuyant sur les touches ~. :
# zlogin -C cleanzone [Connecté à la console de la zone 'cleanzone'] [Entrée] Select a Language 0. English 1. French Please make a choice (0 - 1), or press h or ? for help: ~. [Connexion à la console de la zone 'cleanzone'impo fermée] #
Vous allez maintenant cloner la zone cleanzone. Pour être cloner, la zone doit être arrêtée :
# zoneadm -z cleanzone halt # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared 5 myzone1 running /zones/myzone1 native shared - cleanzone installed /zones/cleanzone native shared
Créez maintenant une clone de cleanzone:
# zonecfg -z myzone2 "create -t cleanzone" # zonecfg -z myzone2 "set zonepath=/zones/myzone2" # zoneadm -z myzone2 clone cleanzone Clonage de l'instantané mypool/zones/cleanzone@SUNWzone1 À la place d'une copie, un clône ZFS a été créé pour cette zone. grep: can't open /a/etc/dumpadm.conf # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared 5 myzone1 running /zones/myzone1 native shared - cleanzone installed /zones/cleanzone native shared - myzone2 installed /zones/myzone2 native shared # zoneadm -z myzone2 boot # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared 5 myzone1 running /zones/myzone1 native shared 8 myzone2 running /zones/myzone2 native shared - cleanzone installed /zones/cleanzone native shared # zlogin -S myzone2 [Connecté à la zone 'myzone2' pts/4] # ~. [Connexion à la zone 'myzone2' pts/4 fermée] #
<html> <center> Copyright © 2011-2018 I2TCH LIMITED.<br><br> </center> </html>