zonas

From Genunix

Jump to: navigation, search

Image:zones.gif

Contents

Zonas en Solaris 10

La tecnología de contendedores permite la virtualización de Solaris 10 en zonas aisladas del resto del sistema. La denominación de contenedores es la suma de el SRM (Gestor de Recursos de Solaris) + Zonas.

Las zonas ejecutan los procesos de forma aislada al sistema anfitrión sin comunicación con otros procesos fuera de la zona compartiendo el kernel del sistema anfitrión.

Las zonas se dividen en:

  • Zona Global: es la primera instalación que se realiza de Solaris 10 físicamente en la máquina y en la que se basan el resto de zonas. Tiene el control de todo el sistema y el hardware de la máquina.
  • no global: es un contenedor aislado de la zona global donde se pueden ejecutar Solaris 10 y aplicaciones forma aislada a la zona global.

Crear una zona

La zonas no globales pueden compartir directorios con la zona global o estar aislada. Una zona no global puede compartir con la zona global los sistemas de ficheros:

  • /usr
  • /lib
  • /sbin
  • /platform

El uso de una zona no global compartida ocupa tan solo 100MB al tener compartidos directorios con la zona global.

Las zonas no compartidas o zonas grandes ocupan 4GB ya que no comparten sistema de ficheros. Al no compartir sistemas de ficheros con la zona global podemos aplicar parches a la zona distintos a los de la zona global. Podemos tener varias zonas con niveles de parche distintos según las necesidades de las aplicaciones. En la figura 5.2 se representa una zona no compartida.

Control de recursos

Cuando creamos una zona tenemos que asignarlas recursos como red, memoria, CPU etc..

Asignar CPU

El control de recursos sobre la CPU en zonas puede ser de tres tipos:

  • CPU fija: una zona puede tener asignada una o mas CPUs de forma fija. Esta forma puede ser útil cuando licenciamos aplicaciones por el numero de CPU. Esta opción tiene una desventaja si la zona no requiere mucho uso de CPU ya que perdemos capacidad de procesamiento estando la CPU solamente asignada una zona.
  • CPUs dinamicas: se asigna un mínimo y un máximo de CPU´s para una zona. El demonio poold se encarga de balancear el numero de CPUs disponibles según la necesidades de cada zona.

- CPUs compartidas: consiste en un pool de CPUs asignado a todas las zonas. El sistema repartirá las CPU según las necesidades de cada zona.

Memoria

El control de memoria para zonas no globales hasta la versión 11/06 de Solaris 10 no se podía realizar de forma directa se utiliza el resource control del sistema. Se ha incluido una nueva propiedad denominada zone.max-locked-memory que establece el limite de memoria para una zona.

Espacio en disco

La zonas puedes ser creadas en:

  • Discos independientes o particiones (slices): una zona puede ser creada en un directorio de cualquier sistema de ficheros, una partición o en un disco independiente.
  • Volúmenes independientes: puede instalarse las zonas en volúmenes de Solaris Volume Manager y beneficiarse de políticas como RAID1, RAIRD 5 etc..
  • ZFS: Puede instalarse una zona en uns sistema de ficheros ZFS o compartir un sistema de ficheros de la zona global.

RED

Cuando creamos una zona se le asigna una dirección IP e interfaz de red de la zona global.

Creación de una zona no compartida o Small-Zone

En el siguiente apartado vamos a seguir los pasos necesarios para crear una zona Solaris 10 no compartida ocupando tan solo 100MB . La zona a crear tiene un dirección IP asociada a la interfaz pcn1 y se instala en /babilonia/mizona.

Ejecutamos el comando zonecfg con la opción -z de la siguiente forma:

zonecfg -z [nombre de la zona]

Al ejecutar el comando aparece un mensaje indicando que la zona no esta configurada. Para configurar la zona tenemos que introducir los comandos de configuración el editor de zonezfg. Los datos a introducir son:

  • autoboot=true: este parámetro define si la zona es persintente a los reinitos del sistema. Si reiniciamos la máquina anfitriona la zona también arrancara.
  • zonepath: PATH donde se instalara la zona Solarias 10.
  • set address: asigna una dirección IP para la zona
  • set physical: asocia una interfaz de la zona no global para su uso en la zona.

El ejemplo siguiente muestra el proceso completo para la creación de la zona:

# zonecfg -z mizona

mizona: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.

zonecfg:mizona> create
zonecfg:mizona> set autoboot=true
zonecfg:mizona> set zonepath=/babilonia/mizona
zonecfg:mizona> add net
zonecfg:mizona:net> set address=10.73.111.25
zonecfg:mizona:net> set physical=pcn1
zonecfg:mizona:net> end
zonecfg:mizona> info

zonename: mizona
zonepath: /babilonia/mizona
autoboot: true
pool:
limitpriv:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 10.73.130.25
physical: pcn1

zonecfg:mizona> verify
zonecfg:mizona> commit
zonecfg:mizona> exit

Con los pasos anteriores hemos creado la zona. Al realizar el commit se crea un fichero XML en /etc/zones con los datos de la zona: Ejemplo de mizona.xml:

# more mizona.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">
<zone name="mizona" zonepath="/babilonia/mizona" autoboot="true">
 <inherited-pkg-dir directory="/lib"/>
 <inherited-pkg-dir directory="/platform"/>
 <inherited-pkg-dir directory="/sbin"/>
 <inherited-pkg-dir directory="/usr"/>
 <network address="10.73.130.25" physical="pcn1"/>
</zone>

Para comprobar que la máquina esta correctamente creada ejecutamos el comando:

zoneadm list -cv

# zoneadm list -cv
 ID NAME             STATUS         PATH
  0 global           running        /
  - mizona           configured     /babilonia/mizona
 

Ya esta creada la zona y tenemos que inicializarla para que se instalen los paquetes necesarios. Este paso puede tardar varios minutos por que implica la copia de todos los paquetes necesarios.

Antes de iniciar la instalación de paquetes para la zona debemos de comprobar los permisos de la zona par ello acudimos al comando zoneadm para verificar que la zona tiene los permisos necesarios para su creación. Para verificar ejecutamos:

zoneadm -z [nombre de la zona] verify

Al lanzar el comando nos muestra un mensaje avisando que los permisos sobre los ficheros de la zona no son los correctos:

bash-3.00# zoneadm  -z mizona verify
/babilonia/mizona no debe ser legible por grupo.
/babilonia/mizona no debe ser ejecutable por grupo.
/babilonia/mizona no debe ser legible por todos.
/babilonia/mizona no debe ser ejecutable por todos.
no se ha podido verificar rutazona /babilonia/mizona debido a los errores anteriores.
zoneadm: la zona mizona no se ha podido verificar

Solucionamos el problema aplicando el comando chmod con los permisos 700.

chmod 700 /babilonia/mizona/

Si ejecutamos nuevamente el comando zoneadm para verificar la zona no observaremos ningún error. Instalamos la máquina ejecutando la orden:

zoneadm -z [nombre de la zona] install

bash-3.00# zoneadm -z mizona install 
Preparing to install zone <mizona>.
Creating list of files to copy from the global zone.
Copying <2430> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1042> packages on the zone.
Initialized <1042> packages on zone.                                 
Zone <mizona> is initialized.

El archivo </babilonia/mizona/root/var/sadm/system/logs/install_log> contiene un registro de la instalación por zonas.

Una vez finalizada la copia de paquetes comprobamos que la maquina esta instalada correctamente ejecutando zoneadm list -cv:

bash-3.00# zoneadm list -cv
 ID NAME             STATUS         PATH                          
  0 global           running        /                             
  - mizona           installed      /babilonia/mizona

Arrancar la zona

La máquina ya esta configurada e instalada ahora tenemos que arrancar la zona con el comando zoneadm y el parámetro boot:

zoneadm -z [nombre de la zona] boot

bash-3.00#zoneadm -z mizona boot
bash-3.00# zoneadm list -cv      
 ID NAME             STATUS         PATH                          
  0 global           running        /                             
  4 mizona           running        /babilonia/mizona

Para verificar que la zona esta arrancada ejecutamos el comando zoneadm list -cv y veremos que su estado es running.

Zlogin entrar en la nueva zona

Tenemos la máquina virtual ejecutándose correctamente y queda realizar el ultimo paso supone entrar en la máquina y responder unas preguntas sobre la configuración que queremos para la zona. Las preguntas son las mismas que en una instalación normal de Solaris, realizará las siguientes preguntas:

  • Nombre de la máquina
  • Idioma del sistema
  • Idioma del teclado
  • Tipo de Terminal
  • Zona geográfica
  • Contraseña de root
  • Compatibilidad NTFS v4

Para entrar en la máquina ejecutamos la orden zlogin con el parámetro -C:

zlogin -C [nombre de la zona]

Como se aprecia en el siguiente ejemplo se inicia un pequeño instalador que pregunta nuestras preferencias para el sistema:


bash-3.00# zlogin -C mizona
[Conectado a la consola de la zona 'mizona']

Select a Language

 0. English
 1. Spanish
 2. it

Please make a choice (0 - 2), or press h or ? for help:

Sobre el Terminal:
¿Qué tipo de terminal esta usando?
1) Est√°ndar ANSI CRT
2) DEC VT52
3) DEC VT100
4) Heathkit 19
5) Lear Siegler ADM31
6) Consola PC
7) Herramienta de comandos Sun
8) Estación de Trabajo (Workstation) Sun
9) Televideo 910
10) Televideo 925
11) Wyse, modelo 50
12) Emulador X Terminal (xterms)
13) Emulador de terminal CDE (dtterm)
14) Otros
Introduzca el número seleccionado y presione Intro:

Cuando finalizamos la preguntas se configura e inicia el arranque del sistema operativo Solaris 10 como en cualquier máquina:

SunOS Release 5.10 Version Generic_118855-33 32-bit
Copyright 1983-2006 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Hostname: babilonia

babilonia console login: Feb 13 03:09:03 babilonia sendmail[5971]: My unqualified host name (localhost) unknown; sleeping for retry

babilonia console login:

Estamos dentro de la máquina virtual babilonia y podemos hacer login con el usuario introducido en las preguntas de la instalación de la zona. Ahora podemos instalar y configurar la máquina virtual como cualquier otra.

Ahora se puede hacer telnet o ssh a la dirección IP que tenemos asociada a nuestra máquina virtual e instar cualquier servicio normalmente.


Parar la Zona virtual

Para parar una máquina virtual podemos proceder de dos formas diferentes:

1. Al ser una máquina virtual responde a los mismos comandos de parada que cualquier instalación normal de Solaris por lo tanto podemos parar con comandos como init 0, shutdown o halt.

2. Desde la zona global podemos o reiniciar la máquina utilizando el comando zoneadm con los parámetros reboot y halt:

a. zoneadm -z [nombre de la zona] reboot b. zoneadm -z [nombre de la zona] halt

Crear una zona no compartida o BIG-ZONE

Tal como hemos visto al comienzo una zona no compartida no comparte los directorios /usr./lib,/sbin y /platform por lo tanto ocupa 4GB de espacio aportando la ventaja de tener una zona totalmente independiente donde se puede aplicara un nivel de parches diferente a la zona global.

Para crear una zona no compartida vamos utilizar un disco completo de 6GB con sistema de ficheros UFS montado en /bigzone. Antes de instalar la zona vemos que tan solo ocupamos el 1% del disco:

/dev/dsk/c1d0s0      5783070    5753 5719487     1%    /bigzone

Al finalizar la instalación el espacio ocupado por la zona es igual a una instalación completa de Solaris 10:

/dev/dsk/c1d0s0      5783070 2951463 2773777    52%    /bigzone

Una zona no compartida o BigZone se crea igual que una zona compartida con la salvedad de que indicamos que no se compartan los sistemas de ficheros /usr./lib,/sbin y /platform con los parámetros:

  • remove inherit-pkg-dir dir=/sbin
  • remove inherit-pkg-dir dir=/usr
  • remove inherit-pkg-dir dir=/platform
  • remove inherit-pkg-dir dir=/lib

Los pasos a realizar son los siguientes:

# zonecfg  -z mibigzone
mibigzone: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:mibigzone> create
zonecfg:mibigzone> remove inherit-pkg-dir dir=/sbin
zonecfg:mibigzone> remove inherit-pkg-dir dir=/usr
zonecfg:mibigzone> remove inherit-pkg-dir dir=/platform
zonecfg:mibigzone> remove inherit-pkg-dir dir=/lib
zonecfg:mibigzone> set autoboot=true
zonecfg:mibigzone> set zonepath=/bigzone
zonecfg:mibigzone> add net
zonecfg:mibigzone:net> set address=127.0.0.100
zonecfg:mibigzone:net> set physical=lo0
zonecfg:mibigzone:net> end
zonecfg:mibigzone> info
zonename: mibigzone
zonepath: /bigzone
autoboot: true
pool:
limitpriv:
net:
       address: 127.0.0.100
       physical: lo0
zonecfg:mibigzone> verify
zonecfg:mibigzone> commit
zonecfg:mibigzone> exit


Establecemos los permisos de fichero para la zona:

chmod 700 /bigzone

Verificamos la zona y procedemos a la instalación de los paquetes necesarios para la ejecución de la zona:

bash-3.00# zoneadm -z nocompartida verify
bash-3.00# zoneadm -z nocompartida install

Preparing to install zone <nocompartida>.
Creating list of files to copy from the global zone.
Copying <130622> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1042> packages on the zone.
Initialized <1042> packages on zone.
Zone <nocompartida> is initialized.
El archivo </bigzone/root/var/sadm/system/logs/install_log> contiene un registrde
la instalación por zonas.

Arrancamos la zona

# zoneadm list -cv
 ID NAME             STATUS         PATH                          
  0 global           running        /                             
  - nocompartida     installed      /bigzone                      
# zoneadm -z nocompartida boot
# zoneadm list -cv            
 ID NAME             STATUS         PATH                          
  0 global           running        /                             
  2 nocompartida     running        /bigzone

Y finalizamos el proceso de instalación estableciendo el nombre de máquina, contraseña de root, zona geográfica etc..:


bash-3.00# zlogin -C nocompartida
[Conectado a la consola de la zona 'nocompartida']
 
Select a Language

 0. English
 1. Spanish
 2. it

Please make a choice (0 - 2), or press h or ? for help:

Estados de una zona

Hemos visto como crear una zona, configurarlas y las operaciones de parada y arranque. Ahora veremos como detectar el estado de una máquina desde la zona global. Con el comando zoneadm list -cv obtenemos información sobre el estado de una zona:

# zoneadm list -cv
 ID NAME             STATUS         PATH                          
  0 global           running        /                             
  - nocompartida     installed      /bigzone                      

Los estados posibles son:

  • Configured: se encuentra en estado estado cuando finalizamos la configuración y realizamos un commit.
  • Incomplete: mostrará este estado muestran se están instalando los paquetes al ejecutar zoneadm con la opción install.
  • Installed: la zona tiene todos los paquetes necesarios para su funcionamiento.
  • Ready: la zona esta lista tiene creado el kernel, los controladores de red están cargados y los sistemas de ficheros montados.
  • Running: la zona esta arrancada.
  • Shutting Down: la zona esta en proceso de parada.


Monitorizar una zona

Una zona puede ser monitorizada desde la zona global utilizando el comando zlogin con la opción -S que permite la ejecución de un comando dentro la zona y enviar la salida del comando a la zona global.

Zlogin -S [nombre de la zona] "comando"

Ejemplos para monitorizar una zona:

Uptime:

# zlogin -S nocompartida "uptime"
10:43am  up 8 min(s),  0 users,  load average: 0.18, 0.87, 0.98
FileSystems:
# 
# zlogin -S nocompartida "df -k" 
Filesystem            kbytes    used   avail capacity  Mounted on
/                    5783070 2964445 2760795    52%    /
/dev                 5783070 2964445 2760795    52%    /dev
proc                       0       0       0     0%    /proc
ctfs                       0       0       0     0%    /system/contract
swap                  513036     260  512776     1%    /etc/svc/volatile
mnttab                     0       0       0     0%    /etc/mnttab
/usr/lib/libc/libc_hwcap1.so.1 5783070 2964445 2760795    52%    /lib/libc.so.1
fd                         0       0       0     0%    /dev/fd
swap                  512812      36  512776     1%    /tmp
swap                  512796      20  512776     1%    /var/run
Uname -a:
# zlogin -S nocompartida "uname -a"
SunOS babilonia 5.10 Generic_118855-33 i86pc i386 i86pc


Validarse en una zona

Para entrar a una zona podemos realizar un telnet o ssh a la dirección IP asociada a la zona o entrar por consola con la utilizad zlogin:

zlogin -l [usuario] [nombre de zona]

Ejemplo de conexión a una zona con un usuario:
# zlogin -l aulaunix nocompartida
[Conectado a la zona 'nocompartida' pts/5]
No directory! Logging in with home=/
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
$ id
uid=100(aulaunix) gid=1(other)
$

Desinstalar una zona

Para desinstalar una zona tenemos que detener la zona y ejecutar el comando zoneadm con la opción uninstall. Hay que usar esta opción con mucha precaución ya que elimina todos los ficheros:

# zoneadm -z nocompartida halt    
# zoneadm -z nocompartida uninstall -F
# df -k
/dev/dsk/c1d0s0      5783070    5894 5719346     1%    /bigzone


La desinstalación de la zona puede tardar varios minutos al igual que al crearla.

Personal tools