jueves, 7 de octubre de 2010

Introducción al uso de contenedores en Solaris 10 (zonas)

Solaris 10 permite la virtualización por medio de contenedores también llamados zonas. Cada uno de estos contenedores actúa como un servidor Solaris (ó Linux) autónomo, para lo cual, el sistema comparte recursos e inclusive puede reservarlos para el uso exclusivo de determinados contenedores, en este ejercicio vamos a ver una forma básica de cómo crear un equipo virtual y cómo trabajar con él.

Pará qué nos sirve una máquina virtual, se preguntaran algunos, un escenario podría ser que necesitemos correr varias instancias de una aplicación pequeña (un servidor web, por ejemplo) y no vale la pena tener varias máquinas pequeñas para esto. Otro que se me ocurre en para implementar un esquema DRP, en el cual, en caso de un desastre, se movería solo el contenedor a otro equipo.

Para una instalación muy básica necesitamos no menos de 700Mb de espacio en disco y una dirección IP libre y válida para la NIC que vamos a utilizar. Si solo tenemos una conexión a red esa NIC funciona perfectamente, el contenedor va a dar de alta una dirección virtual en ese caso.

En mi caso voy a utilizar el filesystem /export/home y la IP que voy a utilizar es la 192.168.188.34 para la NIC e1000g0.

La instalación se realiza en dos etapas, la primera es crear la configuración de la zona y la segunda es su instalación, iniciamos entonces la creación de la configuración de la siguiente forma:

# zonecfg -z zona1
zona1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zona1> create
zonecfg:zona1> set zonepath=/export/home/zonas/zona1
zonecfg:zona1> add net
zonecfg:zona1:net> set address=192.168.188.34
zonecfg:zona1:net> set physical=e1000g0
zonecfg:zona1:net> set defrouter=192.168.188.2
zonecfg:zona1:net> end
zonecfg:zona1> commit
zonecfg:zona1> exit

Al comando zonecfg se le indica el nombre de la zona con el parámetro –z, el nombre que elegí fue zona1, entramos al modo interactivo y lo primero que nos indica es que la zona es “nueva” y debemos darle el comando create. Después de esto con set zonepath=/export/home/zonas/zona1 le indico directorio en el que va a estar físicamente los datos de la zona, podría decirse que este directorio va a tener la función de disco duro virtual. A continuación le indicamos que dé de alta una interfaz de red virtual con add net; con set address=192.168.188.34 le indicamos la dirección IP que va a utilizar; con set physical=e1000g0 la NIC real que va a utilizar, si ya existen una dirección IP configurada, va a dar de alta la de la zona como virtual; con set defrouter=192.168,188.2 le indico la IP del gateway; salimos de la configuración de red con end y con commit le decimos que guarde la configuración, finalmente salimos con exit.

Ahora instalamos la zona:

# zoneadm -z zona1 install
Preparing to install zone <zona1>.
Creating list of files to copy from the global zone.
Copying <8783> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1244> packages on the zone.
Initialized <1244> packages on zone.
Zone <zona1> is initialized.
The file </export/home/zonas/zona1/root/var/sadm/system/logs/install_log> contains a log of the zone installation.

Este comando tarda en procesar algunos minutos. Ya concluido, estamos listos para “bootear” a nuestro contenedor, primero vamos a “loguearnos” en la consola del contenedor:

# zlogin -C zona1
[Connected to zone 'zona1' console]

Desde otra sesión iniciamos el “booteo” del contenedor:

# zoneadm -z zona1 boot

Vamos a observar como inicia el proceso de inicio de sistema en la consola:

[NOTICE: Zone booting up]

SunOS Release 5.10 Version Generic_142901-12 64-bit
Copyright 1983-2010 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Hostname: zona1
Loading smf(5) service descriptions:  31/153

Select a Language

  0. English
  1. es
  2. fr

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

Como es la primera vez que “bootea” requiere lo configuremos como si se tratara de un servidor recién instalado, entre otras cosas, nos va a pedir un nombre, la configuración regional, el dns y concluido esto, va a reiniciar en forma nomal:

System identification is completed.

rebooting system due to change(s) in /etc/default/init

[NOTICE: Zone rebooting]

SunOS Release 5.10 Version Generic_142901-12 64-bit
Copyright 1983-2010 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.
Hostname: zona1
Reading ZFS config: done.

zona1 console login:

Puedo salir de la consola escribiendo ~.

Listo, ya tenemos un contenedor corriendo, podemos entrar a él con zlogin o directamente por medio de su IP con ssh o con telnet (inclusive con XDMCP).

Este es el contenedor más básico que podemos crear, es posible indicarle filesystems, asociarlos con pools zfs, utilizar recursos dedicados al contenedor, etc. Inclusive en el caso de Solaris 10 en SPARC, se pueden utilizar contenedores Solaris 8 y 9, en Solaris 10 en x86 se pueden crear contenedores Linux (SUSE, RedHat y CentOS).

No hay comentarios.: