Usamos cookies propias y de terceros para ayudarte en tu navegación. Si continuas navegando consideramos que aceptas el uso de cookies. OK

martes, 5 de agosto de 2014

Virtualización en Solaris (Solaris Zones) Parte II

En la primera entrega vimos las características de las zonas en unix. Ahora vamos a ver como se configuran y los comandos relacionados.
Uno de los comandos más importante es zonecgf
El comando zonecfg se utiliza para configurar cada zona. Se pueden realizar las siguientes operaciones:
  • Crear o borrar la configuración de zona.
  • Establecer las propiedades de los recursos agregados a una configuración.
  • Consultar o verificar una configuración.
  • Recuperar una configuración anterior.
  • Salir de la sesión de zonecfg.

Parámetros de los recursos de zonecfg
La utilidad zonecfg incluye los siguientes tipos de recursos:
  • zonename: define el nombre de la zona y sirve de identificador de lazona para la utilidad de configuración.
  • zonepath: establece el recurso de rutas de acceso a la zona y constituye la ruta al sistema de archivos raíz de la zona.
  • autoboot: determina si la zona se reiniciará cuando se reinicie la zona global.
  • fs: asigna los parámetros de los recursos correspondientes a los sistemas de archivos. El uso del parámetro special permite a la zona local montar recursos del sistema de archivos global en diferentes directorios.

Parámetros del recurso fs:



dir
Punto de montaje de la zona no global.
special
Archivo de dispositivo de bloques que especifica la ubicación del sistema de archivos.
raw
Archivo de dispositivo que debe utilizarse para el comando fsck.
type
Tipo de sistema de archivos.
options
Admite parámetros similares a los utilizados con el comando mount.


  • inherit-pkg-dir: proporciona acceso a los paquetes de software del sistema global. La zona no global recibe el contenido de los paquetes de software situados en el directorio inherit-pkg-dir en modo de sólo lectura. Los recursos contenidos de forma predeterminada en inherit-pkg-dir son: /lib, /platform, /sbiny /usr.
  • net: proporciona a las zonas no globales interfaces lógicas de las interfaces de la zona global. Las interfaces de red se activan cuando la zona pasa del estado “instalada” al estado “preparada”.
  • device: hace referencia a dispositivos para los comandos select, add o remove. Cada zona puede tener dispositivos que deberían configurarse cuando pasa del estado “instalada” al estado “preparada”.
  • attr: permite al administrador global asignar parámetros de atributos genéricos, como el tipo de nombre y el valor. El tipo debe ser int (entero) uint (entero sin signo), Boolean (booleano) o string (cadena).

Proceso de configuración de zonas

El texto siguiente contiene un ejemplo de configuración de una zona llamada work-zone:
1 global# zonecfg -z work-zone
2 zonecfg:work-zone> create
3 zonecfg:work-zone> set zonepath=/export/work-zone
4 zonecfg:work-zone> set autoboot=true
5 zonecfg:work-zone> add fs
6 zonecfg:work-zone:fs> set dir=/mnt
7 zonecfg:work-zone:fs> set special=/dev/dsk/c0t0d0s7
8 zonecfg:work-zone:fs> set raw=/dev/rdsk/c0t0d0s7
9 zonecfg:work-zone:fs> set type=ufs
10 zonecfg:work-zone:fs> add options [logging]
11 zonecfg:work-zone:fs> end
12 zonecfg:work-zone> add inherit-pkg-dir
13 zonecfg:work-zone:inherit-pkg-dir> set dir=/usr/sfw
14 zonecfg:work-zone:inherit-pkg-dir> end
15 zonecfg:work-zone> add net
16 zonecfg:work-zone:net> set physical=ce0
17 zonecfg:work-zone:net> set address=192.168.0.1
18 zonecfg:work-zone:net> end
19 zonecfg:work-zone> add device
20 zonecfg:work-zone:device> set match=/dev/sound/*
21 zonecfg:work-zone:device> end
22 zonecfg:work-zone> add attr
23 zonecfg:work-zone:attr> set name=comentario
24 zonecfg:work-zone:attr> set type=string
25 zonecfg:work-zone:attr> set value="Zona de trabajo"
26 zonecfg:work-zone:attr> end
27 zonecfg:work-zone> verify
28 zonecfg:work-zone> commit
29 zonecfg:work-zone> exit

Línea 1: esta línea inicia la utilidad zonecfg en modo interactivo. La zona se denomina work-zone.
Línea 2: inicia la configuración en la memoria.
Línea 3: el recurso de ruta de acceso de la zona, en este caso /export/work-zone, es la ruta de acceso al directorio raíz de la zona. Cada zona tiene una ruta de acceso a su directorio raíz que es relativa al directorio raíz de la zona global. Esta ruta debe existir en el momento de la instalación. El directorio de la zona global debe tener visibilidad restringida. Debe ser propiedad de root con el modo 700. En este ejemplo, el directorio de la zona global es /export.
Línea 4: indica que la zona debería arrancar automáticamente al arrancar el sistema.
Línea 5: inicia la configuración de un sistema de archivos. El ámbito del comando cambia al de los sistemas de archivos.
Línea 6: establece el punto de montaje del sistema de archivos, en este ejemplo /mnt.
Línea 7: indica que el archivo de dispositivos de bloques especial /dev/dsk/c0t0d0s7 debe montarse como /mnt en work-zone.
Línea 8: establece /dev/rdsk/c0t0d0s7 como archivo de dispositivo sin formato (raw). El demonio zoneadmd ejecuta automáticamente el comando fsck en modo de comprobación no interactiva sobre este dispositivo antes de montar el sistema de archivos.
Línea 9: indica que el tipo de sistema de archivos es UFS.
Línea 10: indica la opción específica del sistema de archivos, habilitar el registro de las actualizaciones del sistema de archivos en este procedimiento.
Línea 11: finaliza la sección de configuración del sistema de archivos de este procedimiento.
Línea 12: inicia la configuración de un sistema de archivos de sólo lectura compartido que se ha montado en bucle desde la zona global.
Línea 13: indica que /usr/sfw debe montarse en bucle desde la zona global.
Línea 14: finaliza la sección de montaje en bucle de este procedimiento.
Línea 15: inicia la sección de configuración de red de este procedimiento.
Línea 16: indica que la interfaz de red física que debe usar esta zona es GigaSwift.
Línea 17: especifica la dirección IP de la interfaz de red, en este procedimiento es 192.168.0.1.
Línea 18: finaliza la sección de configuración de red de este procedimiento.
Línea 19: inicia la sección de configuración de dispositivos de este procedimiento.
Línea 20: proporciona visibilidad sobre la zona no global a los dispositivos que coinciden con el patrón /dev/sound/* de la zona global.
Línea 21: finaliza la sección de configuración de dispositivos de este procedimiento.
Línea 22: inicia la sección de configuración de atributos de este procedimiento.
Línea 23: establece el nombre del atributo, en este caso, comentario.
Línea 24: define el tipo de atributo como una cadena de caracteres.
Línea 25: asigna un valor a la cadena de caracteres, en este procedimiento, “Zona de trabajo”.
Línea 26: finaliza la sección de configuración de atributos de este procedimiento.
Línea 27: comprueba si la configuración actual es correcta. Verifica si todos los recursos tienen todas las propiedades necesarias especificadas.
Línea 28: confirma la configuración actual y la traslada de la memoria al medio de almacenamiento estable. Hasta que se confirma la configuración de la memoria, es posible anular los cambios con el comando revert.
Línea 29: cierra la sección de zonecfg. Puede utiliza la opción -F (forzar) con exit.

La zona ya está preparada para su instalación, arranque y uso.


Visualización de la configuración de las zonas

El comando zonecfg puede utilizarse para ver la configuración de la zona.
# zonecfg -z work-zone info
zonepath: /export/work-zone
autoboot: true
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/sfw
fs:
dir: /mnt
special: /dev/dsk/c0t0d0s7
raw: /dev/rdsk/c0t0d0s7
type: ufs
options: [logging]
net:
address: 192.168.0.1
physical: ce0
device
match: /dev/sound/*
attr:
name: comentario
type: string
value: "Zona de trabajo"
#

Cuando se traslada la configuración de la zona al medio de almacenamiento estable, el archivo se guarda en el directorio /etc/zones con formato XML.


Por ejemplo:
# more /etc/zones/work-zone.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN"
"file:///usr/share/lib/xml/dtd/zo
necfg.dtd.1">
<zone name="work-zone" zonepath="/export/work-zone" autoboot="true">



Uso del comando zoneadm

El comando zoneadm es la principal herramienta de instalación y administración de las zonas no globales. Las operaciones que utilicen este comando deben ejecutarse desde la zona global. Zoneadm permite realizar las siguientes tareas:
● Verificar la configuración de una zona.
● Instalar una zona.
● Arrancar una zona.
● Reiniciar una zona.
● Mostrar información sobre una zona en ejecución.
● Trasladar una zona.
● Desinstalar una zona.
● Suprimir una zona con el comando zonecfg


Verificación de una zona configurada

Es posible verificar una zona antes de instalarla. Si omite este procedimiento, la verificación se efectúa automáticamente al instalarla zona.

Para verificar la configuración de una zona, se utiliza el comando
zoneadm -z nombre_zona verify. Por ejemplo:

global# zoneadm -z work-zone verify
Warning: /export/work-zone does not exist, so it cannot be verified. When
zoneadm install is run, install will try to create /export/work-zone, and
verify will be tried again, but the verify may fail if: the parent
directory of /export/work-zone is group- or other-writable or
/export/work-zone overlaps with any other installed zones.
En este ejemplo, aparece un mensaje para advertir al administrador de que la ruta indicada en zonepath no existe. Esto ilustra el tipo de mensajes que envía el comando zoneadm.
Si no aparece ningún mensaje de error, puede instalar la zona


Instalación de una zona configurada

El comando zoneadm -z nombre_zona install se utiliza para realizar las tareas de instalación de las zonas no globales. Es preciso ser administrador global para instalar una zona. Por ejemplo:

global# zoneadm -z work-zone install

El comando zoneadm list -iv se utiliza para ver la lista de zonas instaladas y su estado:
global# zoneadm list -iv
ID NAME STATE PATH
0 global running /
- work-zone installed /export/work-zone

En este ejemplo, la zona work-zone ha alcanzado el estado de “instalada”.
Se le asignará el ID de zona cuando arranque.


Arranque de una zona

Cuando se arranca una zona, ésta entra en estado de ejecución. Si define la propiedad del recurso autoboot como true al configurar una zona, ésta arranca automáticamente al arrancar la zona global. El valor
predeterminado es false.
Las zonas pueden iniciarse de forma manual desde el estado de instaladas
.
Para arrancar una zona se utiliza el comando zoneadm -z nombre_zona
boot:
global# zoneadm -z work-zone boot
global# zoneadm list -v
ID NAME STATE PATH
0 global running /
1 work-zone running /export/work-zone

En este ejemplo, la zona work-zone ha alcanzado el estado de ejecución.
Durante el proceso de arranque, se le ha asignado el ID 1

Detención de una zona

El comando zoneadm halt se utiliza para suprimir el entorno de aplicaciones y la plataforma virtual de una zona. Una vez hecho, la zona regresa al estado de instalada. Todos los procesos se cancelan, los dispositivos
se desconfiguran, se desactivan las interfaces de red, se desmontan los sistemas de archivos y se destruyen las estructuras de datos del núcleo.

global# zoneadm -z work-zone halt
global# zoneadm list -v
ID NAME STATE PATH
0 global running /
- work-zone installed /export/work-zone
El comando halt no ejecuta ninguna secuencia de comandos de cierre dentro de la zona. El usuario root de la zona puede cerrar la sesión mientras está conectado a la zona y ejecutar en ella secuencias de cierre.


Reinicio de una zona

El comando zoneadm reboot se utiliza para reiniciar una zona. La zona se detiene y vuelve a arrancar.

global# zoneadm -z work-zone reboot
global# zoneadm list -v
ID NAME STATE PATH
0 global running /
2 work-zone running /export/work-zone
En este ejemplo, el ID de zona asignado antes de reiniciar es 1.
Después de volver arrancar, el ID de zona ha cambiado a 2.


Inicio de sesión y operaciones en la zona

El comando zlogin se utiliza para acceder a la zona instalada desde la zona global. Recuerde que, en la configuración predeterminada, los usuarios root no están autorizados a iniciar la sesión en las zonas. Para
acceder a una zona como si estuviese en su consola, utilice la opción -C.
# zlogin -C work-zone
[Connected to zone 'work-zone' console]
La primera vez que la zona arranca después de su instalación, se le pide que especifique un tipo de terminal, el nombre de host, la zona horaria y la contraseña de root.


Traslado de una zona

La función move zone permite trasladar una zona no global de un punto de un sistema a otro punto del mismo sistema. Se hace de tal manera que funciona dentro de un mismo sistema de archivos y entre sistemas de
archivos, siempre de acuerdo con las reglas de zonepath. Es decir, no puede ejecutarse con un sistema de archivos NFS montado.
Para trasladar una zona no global, se utiliza el comando zoneadm.
Por ejemplo:
# zoneadm -z work-zone move /rutanueva
En este ejemplo, /rutanueva indica la nueva ruta especificada con
zonepath para la zona.
Migración de una zona
Una zona no global pueden trasladarse de un sistema a otro utilizando los comandos zonecfg y zoneadm. El procedimiento desconecta la zona (detenida) de su ubicación actual y la conecta a otra ubicación.
La zona global del sistema de destino debe ejecutar lo siguiente:
● La misma versión que el host original
● Las mismas versiones de los paquetes y parches del sistema operativo que el host original
El proceso de desconexión de la zona genera la información necesaria para volver a conectar la zona a un sistema diferente. El proceso de conexión de la zona verifica si la nueva máquina tiene la configuración correcta para alojar la zona.
La migración de una zona de un sistema a otro implica los pasos siguientes:

1. Desconectar la zona: esto la deja en el estado configurada dentro del sistema de origen. Internamente, el sistema genera un archivo de manifiesto con la información necesaria para certificar que la zona podrá conectarse sin problemas al nuevo host.
Para desconectar una zona, primero deténgala y luego realice la desconexión:

host1# zoneadm -z work-zone halt
host1# zoneadm -z work-zone detach
Nota – La operación de desconexión genera metadatos que describen la versión de los paquetes y parches instalados en el host. Esta información se guarda en un archivo XML de zonepath, junto con los directorios
rooty dev. Esto facilita el traslado de zonepath al otro sistema.

2. Migrar los datos: es preciso trasladar a un nuevo sistema host los datos que representan a la zona. El fragmento siguiente contiene un ejemplo de migración de esos datos de host1 a host2.
En host1:
host1# cd /export/zones
host1# tar cf work-zone.tar work-zone
host1# sftp host2
Connecting to host2...
Password:
sftp> cd /export/zones
sftp> put work-zone.tar
Uploading work-zone.tar to /export/zones/work-zone.tar
sftp> quit

En host2:
host2# cd /export/zones
host2# tar xf my-zone.tar

3. Configurar la zona: debe crear la configuración de la zona en el nuevo host utilizando el comando zonecfg. Por ejemplo:
host2# zonecfg -z work-zone
work-zone: No such zone configured

Utilice el comando create para empezar a configurar una zona nueva.
zonecfg:work-zone> create -a /export/zones/work-zone

     /**** Hay que asegurarse que todos los ajustes necesarios se han hecho, ej: configuración de interfaz de red.

zonecfg:work-zone> commit
zonecfg:work-zone> exit

4. Conectar la zona: esta operación verifica si el host puede albergar la zona antes de efectuar la conexión. La zona queda en estado instalada.
La sintaxis para conectar una zona es:
host2# zoneadm -z work-zone attach



Supresión de una zona

Antes de suprimir una zona, no olvide hacer la copia de seguridad de todos lo archivos que quiera conservar. El primer paso de la supresión es detener Solaris 10 y liberar la memoria del sistema.
En el siguiente ejemplo, la zona se suprime del sistema global:
Atención – Esta operación no conlleva el cierre controlado o regular de la zona. Es posible que se pierdan datos de los procesos ejecutados en ella.

# zoneadm list -cp
0:global:running:/
3:work-zone:running:/export/work-zone
# zoneadm -z work-zone halt
# zoneadm list -cp
0:global:running:/
-:work-zone:installed:/zones/work-zone
En este punto, la zona no utiliza ningún recurso del sistema excepto el espacio del sistema de archivos. Desinstale la zona para anular el uso de los archivos.

# zoneadm -z work-zone uninstall
Are you sure you want to uninstall zone work-zone (y/[n])? y
# zoneadm list -cp
0:global:running:/
-:work-zone:configured:/export/work-zone

El último paso es borrar la configuración de la zona del sistema global con el subcomando delete.
# zonecfg -z work-zone delete
Are you sure you want to delete zone work-zone (y/[n])? y
# zoneadm list –cp
0:global:running:/


Modificar una zona: cuando se quiere modificar un recurso, primero se selecciona el recurso y luego se lo modifica.

Ej: se modifica la direccion IP:

# zonecfg -z zona1                             Ingresas a la zona.
zonecfg:zona1> info            Muestra informacion de los recursos de la zona.
zonename: zona1
zonepath: /zona1
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
net:
        address: 172.20.4.183        Aca está el recurso que queremos modificar.
        physical: e1000g0
        defrouter no especificado
zonecfg:zona1> selec           
select attr              select dedicated-cpu     select net
select capped-cpu        select device            select rctl
select capped-memory     select fs
select dataset           select inherit-pkg-dir
zonecfg:zona1> select net address=172.20.4.183    Seleccionamos el recurso
zonecfg:zona1:net> set address=172.20.4.185    Seteamos el Nuevo valor.
zonecfg:zona1:net> end
zonecfg:zona1> commit                Confirmamos los cambios
zonecfg:zona1> exit

///Hay que tener en cuenta que si usamos commando vmstat en la zona par aver la memoria, estamos viendo la del sistema fisico por mas que tengamos configurado limites. Lo mejor es instalar el software top, este se puede ejecutar en cada zona y ver la memoria con los limites.///



Ej: Asignar limite de memoria a la zona.

# zonecfg -z zona1                Entras a la zona
zonecfg:zona1> info                Muestra informacion a la zona
zonename: zona1
zonepath: /zona1
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
inherit-pkg-dir:
        dir: /usr/sfw
net:
        address: 172.20.4.185
        physical: e1000g0
        defrouter no especificado
zonecfg:zona1>                Despliego los commando presionando la tecla TAB.
add      commit   delete   export   info     revert   set
clear    create   exit     help     remove   select   verify
zonecfg:zona1> add ca
add capped-cpu     add capped-memory    Agrego el recurso de limite de memoria
zonecfg:zona1> add capped-memory
zonecfg:zona1:capped-memory>
cancel          clear swap      help            set physical=
clear locked    end             info            set swap=
clear physical  exit            set locked=
zonecfg:zona1:capped-memory> set physical=50M      Configuro el limite de memoria fisica.
zonecfg:zona1:capped-memory> set swap=100M        Configuro el limite de la swap.
zonecfg:zona1:capped-memory> end
zonecfg:zona1> commit                    Confirmo los cambios.
zonecfg:zona1> info                        Muestro la informacion
zonename: zona1
zonepath: /zona1
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
inherit-pkg-dir:
        dir: /usr/sfw
net:
        address: 172.20.4.185
        physical: e1000g0
        defrouter no especificado
capped-memory:
        physical: 50M
        [swap: 100M]
rctl:
        name: zone.max-swap
        value: (priv=privileged,limit=104857600,action=deny)


Ej: Asignar limite de cpu a la zona.

# zonecfg -z zona1                Entras a la zona
zonecfg:zona1> info                Muestra informacion a la zona
zonename: zona1
zonepath: /zona1
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
inherit-pkg-dir:
        dir: /lib
inherit-pkg-dir:
        dir: /platform
inherit-pkg-dir:
        dir: /sbin
inherit-pkg-dir:
        dir: /usr
inherit-pkg-dir:
        dir: /usr/sfw
net:
        address: 172.20.4.185
        physical: e1000g0
        defrouter no especificado
zonecfg:zona1>                Despliego los commando presionando la tecla TAB.
add      commit   delete   export   info     revert   set
clear    create   exit     help     remove   select   verify
zonecfg:zona1> add ca
add capped-cpu     add capped-memory    Agrego el recurso de limite al cpu
zonecfg:zona1> add capped-cpu
zonecfg:zona1:capped-cpu>
cancel                help            set ncpus=     end             info           
zonecfg:zona1:capped-memory> set ncpus=0.5      Configuro el limite de cpu al 50%.
zonecfg:zona1:capped-memory> end
zonecfg:zona1> commit


No hay comentarios:

Publicar un comentario