zonas
From Genunix
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.
