Zonas o Containers

Page last edited hace 2208 días 8 horas
De Solaris-ES
Saltar a: navegación, buscar

Zonas[editar]

Según Wikipedia:
   Una Zona o Container, permite la creación de muchos ambientes privados de ejecución y una sola instancia de solaris. 
   Cada ambiente tiene su propia identidad, independiente del hardware subyacente aunque se comporta como si se estuviera
   ejecutando en su propio sistema, permitiendo así que la consolidación sea un proceso sencillo, confiable y seguro. 
   Y dado que los recursos del sistema están virtualizados, los administradores pueden incrementar la utilización del
   hardware, al tiempo que satisfacen los altos picos de demanda.

Tipos de Zonas[editar]

Tenemos la zona Global y la zona no-Global. La zona Global para que se entienda mejor es un solaris tipico, cuando creamos
zonas dentro de este Solaris, estas zonas se llaman no-Globales y el Solaris en si es la zona Global. 

Existen dos tipos de Zonas no-Globales Whole Root y Sparse.

Whole Root[editar]

Las zonas de tipo whole tienen sus propios /lib, /platform, /sbin, /usr, de manera que no pueden heredarse estos directorios
de la zona global. Dado esto, estas zonas tienen mayor independencia de la zona global pero por contrapartida ocupan un poco mas
de espacio e incrementan el tiempo de instalación.
Para convertir una zona Sparse en Whole-root eliminaremos los directorios /lib, /platform, /sbin, /usr.
remove inherit-pkg-dir dir=/lib
remove inherit-pkg-dir dir=/platform
remove inherit-pkg-dir dir=/sbin
remove inherit-pkg-dir dir=/usr 

Sparse[editar]

Las zonas de tipo sparse, hereden todos los directorios de la zona global, lo cual hace que sean mas pequeñas que las anteriores.
Los directorios heredados Inherit-pkg-dir: /lib, /platform, /sbin, /usr son de solo lectura.

Comandos mas utilizados[editar]

# zlogin opcion zone-name
# zoneadm -z zone-name boot
# zoneadm -z zone-name halt
# zoneadm -z zone-name install
# zoneadm -z zone-name ready
# zoneadm -z zone-name reboot
# zoneadm -z zone-name uninstall
# zoneadm -z zone-name verify
# zonecfg -z zone-name: Modo interactivo; Puede ser utilizado para remover propiedades del tipo: fs, device, rctl, net, attr.
# zonecfg -z zone-name commit
# zonecfg -z zone-name create
# zonecfg -z zone-name delete
# zonecfg -z zone-name verify
# rcapstat -z
# svcs zones
# ps -eZ
# prstat -Z

Directorios con las configuraciones[editar]

/etc/zones/index         -> Informacion de las zonas definidas en el sistema.
/etc/zones/global.xml    -> Definicion de la zona global.
/etc/zones/zone-name.xml -> Definicion de la zona zone-name.

Posibles estados que puede tomar una Zonas[editar]

La información de estado de las zonas puede verse con el comando "zoneadm list -iv" ejecutado desde la zona global. 
Las zonas No-globales pueden tener los siquientes estados:
 configured   : Configuration complete and in stable storage.
 incomplete   : Installation or uninstallation underway
 installed    : Configuration instantiated on system. Zone has no associated virtual platform.
 ready        : Virtual platform established, zsched started, IPs plumbed, filesystems mounted, zone ID assigned. 
                No zone processes started yet.
 running      : This state entered when zone init process starts.
 shutting down: Zone being halted.
 down         : Transitional state during zone shutdown.

Tipos de recustos y sus propiedades[editar]

dedicated-cpu[editar]

ncpus, importance
Solaris 10 8/07: Specify the number of CPUs and, optionally, the relative importance of the pool. 
                 The following example specifies a CPU range for use by the zone my-zone. importance is also set.
zonecfg:my-zone> add dedicated-cpu
zonecfg:my-zone:dedicated-cpu> set ncpus=1-3
zonecfg:my-zone:dedicated-cpu> set importance=2
zonecfg:my-zone:dedicated-cpu> end
Nota: Active el servicio poold.

capped-cpu[editar]

ncpus
Specify the number of CPUs. The following example specifies a CPU cap of 3.5 CPUs for the zone my-zone
El recurso acepta un número decimal. Cuando se especifica ncpus, un valor de 1 significa el 100 por ciento de una CPU. 
Un valor de 1,25 significa el 125 por ciento, ya que el 100 por ciento corresponde a toda una CPU del sistema.
zonecfg:my-zone> add capped-cpu
zonecfg:my-zone:capped-cpu> set ncpus=3.5
zonecfg:my-zone:capped-cpu> end
Nota: Los recursos capped-cpu y dedicated-cpu son incompatibles.
dedicated-cpu Vs. capped-cpu[editar]
# zonecfg -z zt info dedicated-cpu
dedicated-cpu:
ncpus: 1

# zlogin zt "psrinfo"
0 on-line   since 05/05/2010 01:06:09
# zonecfg -z zt info capped-cpu
capped-cpu:
[ncpus: 1.00]

# zlogin zt "psrinfo"
0 on-line   since 05/05/2010 01:06:09
1 on-line   since 05/05/2010 01:06:20
2 on-line   since 05/05/2010 01:06:20
3 on-line   since 05/05/2010 01:06:22
4 on-line   since 05/05/2010 01:06:24
5 on-line   since 05/05/2010 01:06:26
6 on-line   since 05/05/2010 01:06:28
7 on-line   since 05/05/2010 01:06:30
  • Por ejemplo si queremos asignar 3 CPUs dedicadas a la zona1, lo podemos hacer con el Zone Manager.
# zonemgr -a modify -n zona1 -p 'dcpu|3' -F
zonemgr

capped-memory[editar]

physical, swap, locked
Specify the memory limits for the zone my-zone. Each limit is optional, but at least one must be set.
zonecfg:my-zone> add capped-memory
zonecfg:my-zone:capped-memory> set physical=50m
zonecfg:my-zone:capped-memory> set swap=100m
zonecfg:my-zone:capped-memory> set locked=30m
zonecfg:my-zone:capped-memory> end

fs[editar]

dir, special, raw, type, options
The fs resource parameters supply the values that determine how and where to mount file systems. 
The fs parameters are defined as follows:
dir    : Specifies the mount point for the file system
special: Specifies the block special device name or directory from the global zone to mount
raw    : Specifies the raw device on which to run fsck before mounting the file system
type   : Specifies the file system type
options: Specifies mount options similar to those found with the mount command
The lines in the following example specify that /dev/dsk/c0t0d0s2 in the global zone is to be mounted as /mnt in a zone being 
configured. 
The raw property specifies an optional device on which the fsck command is to be run before an attempt is made to mount the file 
system. 
The file system type to use is UFS. The options nodevices and logging are added.
zonecfg:my-zone> add fs
zonecfg:my-zone:fs> set dir=/mnt
zonecfg:my-zone:fs> set special=/dev/dsk/c0t0d0s2
zonecfg:my-zone:fs> set raw=/dev/rdsk/c0t0d0s2
zonecfg:my-zone:fs> set type=ufs
zonecfg:my-zone:fs> add options [nodevices,logging]
zonecfg:my-zone:fs> end

dataset[editar]

name
The lines in the following example specify that the dataset sales is to be visible and mounted in the non-global zone and no longer 
visible in the global zone.
zonecfg:my-zone> add dataset
zonecfg:my-zone> set name=tank/sales
zonecfg:my-zone> end

inherit-pkg-dir[editar]

dir
The lines in the following example specify that /opt/sfw is to be loopback mounted from the global zone.

zonecfg:my-zone> add inherit-pkg-dir
zonecfg:my-zone:inherit-pkg-dir> set dir=/opt/sfw
zonecfg:my-zone:inherit-pkg-dir> end 

net[editar]

address, physical, defrouter
Nota: For a shared-IP zone, both the IP address and the device are specified. Optionally, the default router can be set.
      The defrouter property can be used to set a default route when the non-global zone is on a subnet that is not configured 
      in the global zone.
      Any zone that has the defrouter property set must be on a subnet that is not configured in the global zone.
      When shared IP zones exist on different subnets, do not configure a data-link in the global zone.
      For an exclusive-IP zone, only the physical interface is specified. The physical property can be a VNIC.
zonecfg:my-zone> add net
zonecfg:my-zone:net> set physical=hme0
zonecfg:my-zone:net> set address=192.168.0.1
zonecfg:my-zone:net> end 
zonecfg:my-zone> set ip-type=exclusive
zonecfg:my-zone> add net
zonecfg:my-zone:net> set physical=bge32001
zonecfg:my-zone:net> end

device[editar]

match
In the following example, a /dev/pts device is included in a zone
zonecfg:my-zone> add device
zonecfg:my-zone:device> set match=/dev/pts*
zonecfg:my-zone:device> end

rctl[editar]

name, value
Solaris 10 8/07: New resource controls for this release are zone.max-locked-memory, zone.max-msg-ids, zone.max-sem-ids, 
                 zone.max-shm-ids, zone.max-shm-memory, and zone.max-swap.
The following zone-wide resource controls are available:
   zone.cpu-shares        (preferred: cpu-shares)
   zone.max-locked-memory
   zone.max-lwps          (preferred: max-lwps)
   zone.max-msg-ids       (preferred: max-msg-ids)
   zone.max-sem-ids       (preferred: max-sem-ids)
   zone.max-shm-ids       (preferred: max-shm-ids)
   zone.max-shm-memory    (preferred: max-shm-memory)
   zone.max-swap
zonecfg:my-zone> add rctl
zonecfg:my-zone:rctl> set name=zone.cpu-shares
zonecfg:my-zone:rctl> add value (priv=privileged,limit=10,action=none)
zonecfg:my-zone:rctl> end
zonecfg:my-zone> add rctl
zonecfg:my-zone:rctl> set name=zone.max-lwps
zonecfg:my-zone:rctl> add value (priv=privileged,limit=100,action=deny)
zonecfg:my-zone:rctl> end

attr[editar]

name, type, value
In the following example, a comment about a zone is added.
zonecfg:my-zone> add attr
zonecfg:my-zone:attr> set name=comment
zonecfg:my-zone:attr> set type=string
zonecfg:my-zone:attr> set value="Production zone"
zonecfg:my-zone:attr> end

Informacion necesaria para poder comenzar con el ejemplo[editar]

Zone Path       : /zonas/zona1
Zpool           :
Interfaz de Red : igb0
IP              : 192.168.1.22
Gateway         : 192.168.1.1
Shares          : 33
Memoria         :  7g
Swap            : 10g

Configurar, Instalar y Arrancar una Zona[editar]

  • Primero definimos el tipo de scheduler a utilizar FSS
# dispadmin -d FSS
# priocntl -s -c FSS -i all ????
  • Creamos la/s carpetas donde se guardaran las zonas.
# mkdir -p /zonas/zona1
# chmod 700 /zonas/zona1
# cd /zonas
  • Comenzamos con la creacion de la zona.
# zonecfg -z zona1
zona1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zona1> create -b
  • Defina la ruta de zona
zonecfg:zona1> set zonepath=/zonas/zona1
  • Establezca el valor de inicio automático.
zonecfg:zona1> set autoboot=true
  • Defina la clase de planificación como FSS
zonecfg:zona1> set scheduling-class=FSS
  • (Opcional) Configure el hostid
zonecfg:zona1> set hostid=80f0c086
  • Definimos la IF Fisica, IP y DefaultRouter
zonecfg:zona1> add net
zonecfg:zona1:net> set physical=igb0
zonecfg:zona1:net> set address=192.168.1.22
zonecfg:zona1:net> set defrouter=192.168.1.1
zonecfg:zona1:net> end
  • Como explicamos antes podemos definir 2 tipos de CPU, Dedicada (dedicated-cpu) o Compartida (cpu-shares) y (capped-cpu)
capped-cpu
zonecfg:zona1> add capped-cpu
zonecfg:zona1:capped-cpu> set ncpus=1
zonecfg:zona1:capped-cpu> end

'cpu-shares
zonecfg:zona1> set cpu-shares=33
  • Definimos la memoria fisica y el swap de la zona
zonecfg:zona1> add capped-memory
zonecfg:zona1:capped-memory> set physical=7g
zonecfg:zona1:capped-memory> set swap=10g
zonecfg:zona1:capped-memory> end
  • (Opcional) Definimos los recusos de la zona
zonecfg:zona1> add rctl
zonecfg:zona1:rctl> set name=zone.max-swap
zonecfg:zona1:rctl> add value (priv=privileged,limit=99990737418240,action=deny)
zonecfg:zona1:rctl> set name=zone.max-shm-memory
zonecfg:zona1:rctl> add value (priv=privileged,limit=4294967295,action=deny) -> [max-shm-memory: 4G]
zonecfg:zona1:rctl> set name=zone.max-shm-ids                                
zonecfg:zona1:rctl> add  value (priv=privileged,limit=4096,action=deny)      -> [max-shm-ids: 4096]
zonecfg:zona1:rctl> set name=zone.max-sem-ids                                
zonecfg:zona1:rctl> add value=(priv=privileged,limit=4096,action=deny)       -> [max-sem-ids: 4096]
zonecfg:zona1:rctl> set name=zone.max-msg-ids
zonecfg:zona1:rctl> add value (priv=privileged,limit=256,action=deny)        -> [max-msg-ids: 256]
zonecfg:zona1:rctl> end 
  • (Opcional) Definimos File Systems de tipo loopback que hacen referencia a la zona global
zonecfg:zona1> add fs
zonecfg:zona1:fs> set dir=/usr/local
zonecfg:zona1:fs> set special=/s10pool/s10szn09/usr_local
zonecfg:zona1:fs> set type=lofs
zonecfg:zona1:fs> end 
  • (Opcional) Definimos un File System ZFS llamado aplicacion en el pool zona1-zpool
zonecfg:zona1> add dataset
zonecfg:zona1:dataset> set name=zona1-zpool/aplicacion
zonecfg:zona1:dataset> end
  • (Opcional) Añada un sistema de archivos compartido que esté montado en bucle desde la zona global.
zonecfg:zona1> add inherit-pkg-dir
zonecfg:zona1:inherit-pkg-dir> set dir=/opt/sfw
zonecfg:zona1:inherit-pkg-dir> end

  • Verificamos la configuracion, realizamos el commit
zonecfg:zona1> verify
zonecfg:zona1> commit
zonecfg:zona1> export -f zona1.cfg
zonecfg:zona1> exit
# zoneadm -z zona1 install
Preparing to install zone <zona1>.
Creating list of files to copy from the global zone.
Copying <147436> files to the zone.

Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1138> packages on the zone.
Initialized <1138> packages on zone.
Zone <zona1> is initialized.
Installation of <2> packages was skipped.
The file </zonas/zona1/root/var/sadm/system/logs/install_log> contains a log of the zone installation.
# zoneadm -z zona1 boot
# zlogin -C zona1
[Connected to zone 'zona1' console]
[NOTICE: Zone booting up]
SunOS Release 5.10 Version Generic_144489-17 64-bit
Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.
Hostname: zona1
Loading smf(5) service descriptions: 159/159
  • Una vez instalada la zona y dentro de la misma se procederá a modificar el punto de pontaje de filesystem de la aplicacion
# zfs set mountpoint=/var/www zona1-zpool/aplicacion
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zona1-zpool 4.11G 258G 21K none
zona1-zpool/aplicacion 200M 258G 21K none

Ejemplo 1 - Crear una zona Sparse[editar]

global# mkdir /zones
global# cd /zones
global# mkdir appserver
global# chmod 700 appserver
global# zonecfg -z appserv
appserv: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:appserv> create
zonecfg:appserv> set zonepath=/zones/appserver
zonecfg:appserv> set autoboot=true
zonecfg:appserv> add net
zonecfg:appserv:net> set physical=eri0
zonecfg:appserv:net> set address=192.168.175.126
zonecfg:appserv:net> end
zonecfg:appserv> add fs
zonecfg:appserv:fs> set dir=/repo2
zonecfg:appserv:fs> set special=/dev/dsk/c2t40d1s6
zonecfg:appserv:fs> set raw=/dev/rdsk/c2t40d1s6
zonecfg:appserv:fs> set type=ufs
zonecfg:appserv:fs> set options noforcedirectio
zonecfg:appserv:fs> end
zonecfg:appserv> add inherit-pkg-dir
zonecfg:appserv:inherit-pkg-dir> set dir=/opt/csw
zonecfg:appserv:inherit-pkg-dir> end
zonecfg:appserv> info
zonepath: /zones/appserver
autoboot: true
pool:
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
inherit-pkg-dir:
        dir: /opt/csw
net:
        address: 192.168.175.126
        physical: eri0
zonecfg:appserv> verify
zonecfg:appserv> commit
zonecfg:appserv> exit
global# zoneadm -z appserv verify
global# zoneadm -z appserv install
global# zoneadm -z appserv boot
global# zlogin -C appserv

Ejemplo 2 - Crear una zona Whole-Root[editar]

global# mkdir /zones
global# cd /zones
global# mkdir appserver
global# chmod 700 appserver
global# zonecfg -z appserv
appserv: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:appserv> create
zonecfg:appserv> set zonepath=/zones/appserver
zonecfg:appserv> set autoboot=true
zonecfg:appserv> add net
zonecfg:appserv:net> set physical=eri0
zonecfg:appserv:net> set address=192.168.175.126
zonecfg:appserv:net> end
zonecfg:appserv> add inherit-pkg-dir
zonecfg:appserv:inherit-pkg-dir> set dir=/opt/csw
zonecfg:appserv:inherit-pkg-dir> end
zonecfg:appserv> remove inherit-pkg-dir dir=/usr
zonecfg:appserv> remove inherit-pkg-dir dir=/sbin
zonecfg:appserv> remove inherit-pkg-dir dir=/lib
zonecfg:appserv> remove inherit-pkg-dir dir=/platform
zonecfg:appserv> info
zonepath: /zones/appserver
autoboot: true
pool:
inherit-pkg-dir:
        dir: /opt/csw
net:
        address: 192.168.175.126
        physical: eri0
zonecfg:appserv> verify
zonecfg:appserv> commit
zonecfg:appserv> exit 
global# zoneadm -z appserv verify
global# zoneadm -z appserv install
global# zoneadm -z appserv boot
global# zlogin -C appserv

Ejemplo 3 - Crear una Zona Sparse con dedicated-cpus[editar]

global# zonecfg -z ZONE1
Use ‘create’ to being configuring a zone
zonecfg:ZONE1> create
zonecfg:ZONE1> set zonepath=/export/zones/ZONE1
zonecfg:ZONE1> set autoboot=true
zonecfg:ZONE1> add net
zonecfg:ZONE1:net> set address=ZONE1
zonecfg:ZONE1:net> set physical=nxge0
zonecfg:ZONE1:net> end
zonecfg:ZONE1> add dedicated-cpu
zonecfg:ZONE1:dedicated-cpu> set ncpus=4-8
zonecfg:ZONE1:dedicated-cpu> end
zonecfg:ZONE1> add capped-memory
zonecfg:ZONE1:capped-memory> set physical=4g
zonecfg:ZONE1:capped-memory> set swap=512m
zonecfg:ZONE1:capped-memory> set locked=512m
zonecfg:ZONE1:capped-memory> end
zonecfg:ZONE1> verify
zonecfg:ZONE1> commit
zonecfg:ZONE1> exit 
global# zoneadm -z ZONE1 verify
global# zoneadm -z ZONE1 install
global# zoneadm -z ZONE1 boot
global# zlogin -C ZONE1

Nota: La zona tendra un minimo de 4CPUs y un maximo de 8CPUs dependiendo de las necesidades de la misma.

Ejemplo 4 - Crear una Zona Whole-Root con dedicated-cpus[editar]

global# zonecfg -z ZONE2
Use ‘create’ to being configuring a zone
zonecfg:ZONE2> create
zonecfg:ZONE2> set zonepath=/export/zones/ZONE2
zonecfg:ZONE2> set autoboot=true
zonecfg:ZONE2> add net
zonecfg:ZONE2:net> set address=ZONE2
zonecfg:ZONE2:net> set physical=nxge0
zonecfg:ZONE2:net> end
zonecfg:ZONE2> add dedicated-cpu
zonecfg:ZONE2:dedicated-cpu> set ncpus=4-8
zonecfg:ZONE2:dedicated-cpu> end
zonecfg:ZONE2> add capped-memory
zonecfg:ZONE2:capped-memory> set physical=4g
zonecfg:ZONE2:capped-memory> set swap=512m
zonecfg:ZONE2:capped-memory> set locked=512m
zonecfg:ZONE2:capped-memory> end
zonecfg:ZONE2> remove inherit-pkg-dir dir=/usr
zonecfg:ZONE2> remove inherit-pkg-dir dir=/platform
zonecfg:ZONE2> remove inherit-pkg-dir dir=/lib
zonecfg:ZONE2> remove inherit-pkg-dir dir=/sbin
zonecfg:ZONE2> verify
zonecfg:ZONE2> commit
zonecfg:ZONE2> exit 
global# zoneadm -z ZONE2 verify
global# zoneadm -z ZONE2 install
global# zoneadm -z ZONE2 boot
global# zlogin -C ZONE2

Ejemplo 5 - Crear una Zona Sparce con cpu-shares[editar]

  • Crear el ZPOOL con un solo disco
global# zpool create -f -m none zona1-zpool c0t0d0s1
  • Crear el ZPOOL con mirror
global# zpool create -f -m none zona1-zpool mirror c0t0d0s1 c0t1d0s1
  • Creamos el directorio
global# mkdir -p /zonas/zona1
  • Asignamos el mountpoint y definimos permisos de SO
global# zfs create -o mountpoint=/zonas/zona1 zona1-zpool/zonepath
global# chmod 700 /zonas/zona1

  • Creamos el punto de montaje de la aplicacion
global# zfs create -o mountpoint=/var/www zona1-zpool/aplicacion
global# zfs create -o mountpoint=/var/www/logs zona1-zpool/aplicacion/logs_aplicacion
  • Deshabilita la cache primaria y secundaria de ZFS para que los logs no se guarden en la ARC
global# zfs set primarycache=none zona1-zpool/aplicacion/logs_aplicacion
global# zfs set secondarycache=none zona1-zpool/aplicacion/logs_aplicacion
  • Definir la propiedad zoned en ON para que el pool sea gestionado solamente desde la zona no-global.
global# zfs set zoned=on zona1-zpool/aplicacion/logs_aplicacion
global# zfs set zoned=on zona1-zpool/aplicacion
  • creacion de la zona
global# zonecfg -z zona1
Use ‘create’ to being configuring a zone
zonecfg:zona1> create -b
zonecfg:zona1> set zonepath=/zonas/zona1
zonecfg:zona1> set autoboot=true
zonecfg:zona1> set ip-type=shared
zonecfg:zona1> add net
zonecfg:zona1:net> set address=192.168.1.22
zonecfg:zona1:net> set physical=igb0
zonecfg:zona1:net> set defrouter=192.168.1.1
zonecfg:zona1> end
zonecfg:zona1> add rctl
zonecfg:zona1:rctl> set name=zone.cpu-shares
zonecfg:zona1:rctl> add value (priv=privileged,limit=33,action=none)
zonecfg:zona1> end
zonecfg:zona1> add dataset
zonecfg:zona1:dataset> set name=zona1-pool/aplicacion
zonecfg:zona1> end
zonecfg:zona1> add capped-memory
zonecfg:zona1:capped-memory> set physical=7g
zonecfg:zona1:capped-memory> set swap=7g
zonecfg:zona1> end
zonecfg:zona1> verify
zonecfg:zona1> commit
zonecfg:zona1> exit 
global# zoneadm -z zona1 verify
global# zoneadm -z zona1 install
global# zoneadm -z zona1 boot
global# zlogin -C zona1

Administracion y Troubleshooting[editar]

Guardar la configuracion de la Zona[editar]

# mkdir /backup
# zonecfg -z zona1 export > /backup/zona1_config

Utilizar la configuracion almacenada para re-crear la Zona[editar]

- Verificamos que el estado de la zona1 sea running
# zoneadm list -cv
ID NAME    STATUS   PATH
0  global  running  /
1  zona1   running  /zonas/zona1

- Utilizamos el comando zlogin para realizar un shutdown de la zona1.
# zlogin -S zone2 init 0

- Verificamos que el estado de la zona1 es installed
# zoneadm list -cv
ID NAME    STATUS     PATH
0  global  running    /
-  zona1   installed  /zonas/zona1

- Desinstalamos la zona1 con el comando zoneadm
# zoneadm -z zone2 uninstall
Are you sure you want to uninstall zone zone2 (y/[n])? y

- Verificamos que el estado de la zona1 es configured
# zoneadm list -cv
ID NAME    STATUS     PATH
0  global  running    /
-  zona1   configured /zonas/zona1

- Utilizamos el comando zonecfg para intentar borrar la zona1
# zonecfg -z zona1 delete
Are you sure you want to delete zone zone2 (y/[n])? y

- Verificamos que la zona1 ya no exista
# zoneadm list -cv
ID NAME    STATUS     PATH
0  global  running    /

- Re-creamos la zona1 con el comando zonecfg
# zonecfg -z zona1 -f /backup/zona1_config

- Verificamos que el estado de la zona1 es configured
# zoneadm list -cv
ID NAME    STATUS     PATH
0  global  running    /
-  zona1   configured /zonas/zona1

- Instalamos la zona1
# zoneadm -z zona1 install

- Verificamos que el estado de la zona1 es installed
# zoneadm list -cv
ID NAME    STATUS     PATH
0  global  running    /
-  zona1   installed  /zonas/zona1

- Realizamos un boot de la zona1 
# zoneadm -z zona1 boot

- Nos loguemos por consola
# zlogin -C zona1
# ~. <- [Para Salir de la consola]

Clonado de una Zona[editar]

- Verificamos la zona a clonar (zona1)
# zoneadm list -cv
ID NAME    STATUS   PATH
0  global  running  /
1  zona1   running  /zonas/zona1

- Exportamos la configuracion
# zonecfg -z zona1 export -f /tmp/zona2.cfg

- Editamos el archivo de configuracion y actualizamos algunos datos
# vi /tmp/zona2.cfg
create -b
set zonepath=/zonas/zona2
set autoboot=true
set ip-type=shared
add net
set address=192.168.152.23
set physical=igb0
end
add rctl
set name=zone.cpu-shares
add value (priv=privileged,limit=33,action=none)
end
add rctl
add dataset
set name=zona2-zpool/aplicacion
end
add capped-memory
set physical=7G
end
add rctl
set name=zone.max-swap
add value (priv=privileged,limit=99990737418240,action=deny)
end

- Clonamos la zona1
# zoneadm -z zona2 clone -m copy zona1

- Verificamos que el estado de la zona2 es configured
# zoneadm list -cv
ID NAME    STATUS     PATH
0  global  running    /
1  zona1   running    /zonas/zona1
2  zona2   configured /zonas/zona2

- Instalamos la zona2
# zoneadm -z zona2 install

- Verificamos que el estado de la zona2 es installed
# zoneadm list -cv
ID NAME    STATUS     PATH
0  global  running    /
1  zona1   running    /zonas/zona1
2  zona2   installed  /zonas/zona2

- Realizamos un boot de la zona2 
# zoneadm -z zona2 boot

- Nos loguemos por consola
# zlogin -C zona2
# ~. <- [Para Salir de la consola]
Clonar la zona (resumen)[editar]
  • Desde la zona Global
# zoneadm -z <zone-template> halt
# zonecfg -z <zone-template> export -f zone.cfg
# zonecfg -z <clone-name> -f zone.cfg
# zoneadm -z <clone-name> clone <zone-template>

Migrar la zona a un host diferente[editar]

  • Desde la zona Global
# zoneadm -z <zonename> halt
# zoneadm -z <zonename> detach
# tar -cf zonename.tar <zonepath>

  • Copiar el zonename.tar al nuevo host.
  • En el nuevo host ejecutar
# tar -xf zonename.tar
# zonecfg -z <zonename> 
zonename: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zonename>create -a <zonepath>
zonecfg:zonename>info

Realizar los cambios necesarios

zonecfg:zonename>exit
zoneadm -z <zonename> attach

Borrar una zona[editar]

# zoneadm -z <zonename> halt
# zoneadm -z <aonename> uninstall -F
# zonecfg -z <zonename> delete -F

Modificación Dinámica de recursos[editar]

Reparto de shares de CPU[editar]

  • Comprobar los shares que tiene asignados una zona en un momento determinado
# prctl -n zone.cpu-shares -i zone zona1
zone: 33: zona1
NAME         PRIVILEGE      VALUE    FLAG ACTION RECIPIENT
zone.cpu-shares
             privileged        33    -    none           -
             system         65.5K    max  none           -
  • Modificar temporalmente los shares asignados a una zona (en este caso asignado 20 shares a zona1)
# prctl -n zone.cpu-shares -r -v 20 -i zone zona1
  • Modificar los shares asignados a una zona.
Temporal   : # prctl -n zone.cpu-shares -r -v 33 -i zone zona1
Permanente : # zonecfg -z zona1 "set cpu-shares=33; end"

Gestión de memoria física[editar]

  • Comprobar la memoria física asignada a una zona
 zlogin zona1 prtconf -v | grep Memory
 prtconf: devinfo facility not available
 Memory size: 7168 Megabytes
  • Comprobar el límite y el consumo actual de la memoria de cada zona.
# rcapstat -z  
  • Modificar el límite de memoria física de manera temporal (asignamos 2Gbytes a zona1)
# rcapadm -z zona1 -m 2g
  • Modificar el límite de memoria física asignada a una zona.
Temporal   : # rcapadm -z zona1 -m 7gb
Permanente : # zonecfg -z zona1 "select capped-memory; set physical=7g; end"

Gestión de memoria swap[editar]

  • Comprobar la memoria swap asignada a una zona
# prctl -n zone.max-swap -i zone zona1
zone: 33: zona1
NAME         PRIVILEGE      VALUE    FLAG ACTION RECIPIENT
zone.max-swap
             privileged     10.0GB   -    deny           -
             system         16.0EB   max  deny           - 
  • Modificar el límite memoria swap asignada a la zona de manera temporal (asignamos 20 gbytes a zona1)
# prctl -n zone.max-swap -r -v 20gb -i zone zona1
  • Modificar el límite memoria swap asignada a la zona.
Temporal   : # prctl -n zone.max-swap -r -v 7gb -i zone zona1
Permanente : # zonecfg -z zona1 "select capped-memory; set swap=7g; end"

ZFS[editar]

Limitar la cache de ZFS (ARC)[editar]

Si se utiliza ZFS, se tiene que limitar en el "/etc/system", que limita la cache ARC del ZFS para que no consuma toda la memoria
como un valor de referencia se puede utilizar la mitad de la RAM del equipo

/etc/system:set zfs:zfs_arc_max = 0x300000000
Interesante analizar el script arc_summary.pl

Cache primario y Secundario de ZFS[editar]

As for ZFS, there aren't any per filesystem cache controls prior to Solaris 10 update 6. However, a future update will introduce 
the ability to disable primary and secondary caches by filesystem. Both options are configured through the “zfs set command”. 
The following two sections taken from the OpenSolaris 2008.11 zfs man page describe the primary and secondary caches, their 
possible values and the default values.
 primarycache=all | none | metadata
Controls what is cached in the primary cache (ARC). If this property is set to "all", then both user data and metadata is cached.
If this property is set to "none", then neither user data nor metadata is cached. If this property is set to "metadata", then 
only metadata is cached. The default value is "all".
 secondarycache=all | none | metadata
Controls what is cached in the secondary cache (L2ARC). If this property is set to "all", then both user data and metadata is cached.
If this property is set to "none", then neither user data nor metadata is cached. If this property is set to "metadata", then only 
metadata is cached. The default value is "all".

Note: again that these two options don't yet exist in Solaris 10 (as of Solaris 10 update 6).
Here are OpenSolaris 2008.11 commands for disabling both the primary and secondary caches of the dump zfs filesystem.
# zfs set primarycache=none rpool/dump
# zfs set secondarycache=none rpool/dump

Propiedad zoned de ZFS[editar]

zoned=on | off
Controla que dataset es administrado desde una zona no-global. 
Por defecto este valor esta en off
Si queremos utilizar un dataset global dentro de una zona (no-global), tenemos que definir el atriburo zoned, esto 
se puede realizar durante la creacion del dataset (zfs create -o zoned=on DATASET) o despues del proceso de creacion.
Cuando un dataset se delega a una zona no-global, este debe ser especialmente marcado para que ciertas propiedades no
se interpreten en el contexto de la zona global. Después que un dataset se ha delegado a una zona no-global queda bajo 
el control de la misma, con lo cual su contenido podria no ser de confianza y por este motivo no tendriamos que poder 
acceder al mismo desde la zona global. Esto lo logramos definiendo la propiedad "zoned=on".
Al igual que con cualquier sistema de archivos, puede haber binarios en modo setuid, enlaces simbólicos, o contenidos 
cuestionables que puedan afectar negativamente a la seguridad de la zona global. 
Otro punto importante es que si activamos esta propiedad en ON, la propiedad mountpoint no se podra interpretar en la 
zona global. 
En resumen, la propiedad zoned se utiliza para indicar que el dataset se ha delegado a una zona no-global y que esta 
sera quien lo gestione.

Pool de recursos[editar]

Habilitar y Deshabilitar los pooles de recursos[editar]

  • Active el servicio de agrupaciones de recursos.
# svcadm enable system/pools:default
  • Deshabilitar el servicio de agrupaciones de recursos.
# svcadm disable system/pools:default
  • Habilitar el servicio de agrupaciones de recursos dinámicos utilizando
# svcadm enable system/pools/dynamic:default
  • Deshabilitar el servicio de agrupaciones de recursos dinámicos.
# svcadm disable system/pools/dynamic:default 
  • Verificar los servicios
# svcs *pool*
  • Activar las agrupaciones de recursos utilizando pooladm
# pooladm -e
  • Desactivar las agrupaciones de recursos utilizando pooladm
# pooladm -d
  • Grabar la configuracion utilizando el comando pooladm
# pooladm -s
  • Visualizar la configuracion
# pooladm
Nota - Cuando se actualiza un sistema, si la estructura de las agrupaciones de recursos está activada y existe 
       el archivo /etc/pooladm.conf, se activa el servicio de agrupaciones y la configuración que contiene el 

archivo se aplica al sistema.

Crear un pool de recursos[editar]

  • Crear un set de procesadores con dos sola CPUa utilizando el comando poolcfg(1M)
# poolcfg -c 'create pset oraprod-pset (uint pset.min=1; uint pset.max=2)'
  • Crear un pool de recursos.
# poolcfg -c 'create pool oraprod-pool'
  • Enlazar el pool de recursos con el ser de procesadores.
# poolcfg -c 'associate pool oraprod-pool (pset oraprod-pset)'
  • Activar la configuracion.
# pooladm -c
  • Asignar el nuevo pool a la zona.
zonecfg:zona1> set pool=oraprod-pool