Virtualizaci贸n Zonas David Gal谩n Ortiz. www.opensolarisblog.org dgalan@opensolarisblog.org
< Spain OpenSolaris Users Groups >
<OrangeBooks>
USE
IMPROVE
EVANGELIZE
Spain OpenSolaris Users Group
LICENCIA.................................................................................................................3 REFERENCIAS .............................................................................................................3 CONTENEDORES....................................................................................................4 ZONAS EN SOLARIS 10.................................................................................................4 CREAR UNA ZONA........................................................................................................5 Asignar CPU......................................................................................................6 Memoria.............................................................................................................7 Espacio en disco................................................................................................7 RED....................................................................................................................8 Creaci贸n de una zona no compartida o Small-Zone.........................................8 Arrancar la zona..............................................................................................12 Zlogin entrar en la nueva zona........................................................................12 Parar la Zona virtual......................................................................................14 Crear una zona no compartida o BIG-ZONE..................................................15 ESTADOS DE UNA ZONA..............................................................................................17 MONITORIZAR UNA ZONA............................................................................................18 VALIDARSE EN UNA ZONA...........................................................................................19 DESINSTALAR UNA ZONA.............................................................................................20
2
Spain OpenSolaris Users Group
Licencia Esta obra está bajo una licencia Reconocimiento-NoComercialSinObraDerivada-2.5 España de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-nd/2.5/es o envíe una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Usted es libre de: -
Copiar, distribuir y comunicar públicamente la obra.
Bajo las condiciones siguientes:
-
Reconocimiento. Debe reconocer los créditos de la obra de la manera especificada por el autor o el licenciador.
-
No comercial. No puede utilizar esta obra para fines comerciales.
-
Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta.
-
Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra.
Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor.
Referencias Todos los nombres propios de programas, sistemas operativos, equipos hardware, etc., que aparecen en este libro son marcas registradas de sus respectivas compañías u organizaciones.
3
Spain OpenSolaris Users Group
Contenedores 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. Las zonas solo pueden ejecutar entornos virtuales con el operativo Solaris 10 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.
-
Zona no global: es un contenedor aislado de la zona global donde se pueden ejecutar Solaris 10 y aplicaciones forma aislada a la zona global. 4
Spain OpenSolaris Users Group
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 tal como se puede ver en la figura 5.1.
Zona Global 0
Zona local Compartida
/dev/rdsk/c0d0s0
lofs(ro)
/usr
/usr
/lib
/lib
/sbin
/sbin
/platform
/platform
/var
/var
/etc
/etc 4GB
100MB
Figura 5.1 Zona compartida
5
Spain OpenSolaris Users Group
Zona Global 0
BIG ZONE
/dev/dsk/c0d0
/dev/dsk/c1d0
/usr
/usr
/lib
/lib
/sbin
/sbin
/platform
/platform
/var
/var
/etc
/etc 4GB
3GB
Figura 5.2 Zona no compartida 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
tipos:
El control de recursos sobre la CPU en zonas puede ser de tres
6
Spain OpenSolaris Users Group
-
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.
7
Spain OpenSolaris Users Group
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. forma:
Ejecutamos el comando zonecfg con la opción –z de la siguiente
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=trae: 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 8
Spain OpenSolaris Users Group
î&#x201E;Ź
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: 9
Spain OpenSolaris Users Group
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"> <!-DO NOT EDIT THIS FILE. Use zonecfg(1M) instead. --> <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 10
Spain OpenSolaris Users Group
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: 11
Spain OpenSolaris Users Group
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 12
Spain OpenSolaris Users Group
–C:
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
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
Spain OpenSolaris Users Group
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: 14
Spain OpenSolaris Users Group
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. disco:
Antes de instalar la zona vemos que tan solo ocupamos el 1% del
/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: 15
Spain OpenSolaris Users Group
# 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. 16
Spain OpenSolaris Users Group
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 17
Spain OpenSolaris Users Group
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: 18
Spain OpenSolaris Users Group
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% fd 0 0 0 0% /dev/fd swap 512812 36 512776 1% /tmp swap 512796 20 512776 1% /var/run
/lib/libc.so.1
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: 19
Spain OpenSolaris Users Group
# 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.
20