miércoles, 17 de octubre de 2007

Contenedores BrandZ



Tras la publicación de la nueva Release 8/07 de Solaris 10 por parte de Sun Microsystems, caben destacar entre sus nuevas funcionalidades, la posibilidad de configurar los Contenedores a través de la propia configuracion de las zonas virtuales, al igual que la asignación dedicada de los interfaces de red reales de la zona global.

La funcionalidad de asignar un interface de la zona global (anfitrión) para una zona virtual, no es compatible actualmente con las de tipo BrandZ, pero si el sistema virtualizado es Solaris 10 se puede configurar facilmente en la seccion general, asi:

# zonecfg -z zonepruebas
zonelx: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:zonepruebas> create
zonecfg:zonepruebas> set zonepath=/opt/zones/zonepruebas
zonecfg:zonepruebas> set ip-type=exclusive
zonecfg:zonepruebas> add net
zonecfg:zonepruebas:net> set physical=pcn0
zonecfg:zonepruebas:net> end
zonecfg:zonepruebas> exit

Posteriormente configurariamos el interface de red pcn0 en el sistema virtualizado como si se tratase del anfitrión, e incluso podemos filtrar su tráfico con IPFilter.

# zlogin -C zonepruebas

# ifconfig pcn0 plumb

# ifconfig pcn0 inet 192.168.1.2 netmask 255.255.255.0 broadcast +

# route add default 10.73.130.1

# cat /etc/ipf/ipf.conf
### Block all inbound and outbound traffic by default
block in log on pcn0 all head 100
block out log on pcn0 all head 150

### Allow inbound SSH connections
pass in quick proto tcp from any to any port = 22 keep state group 100

### Allow my box to utilize all UDP, TCP and ICMP services
pass out quick proto tcp all flags S/SA keep state group 150
pass out quick proto udp all keep state group 150
pass out quick proto icmp all keep state group 150

# svcadm enable ipfilter

# ipf -f /etc/ipf.conf

En el siguiente ejemplo vamos a definir la configuración de una zona virtual (en la que instalaremos una imagen de CentOS 3.0) la cual vamos a acotar en cuanto a sus recursos de CPU y memoria durante su definición, asi:

# zonecfg -z zonelx
zonelx: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:zonelx> create -t SUNWlx
zonecfg:zonelx> set zonepath=/opt/zones/zonelx
zonecfg:zonelx> set autoboot=true
zonecfg:zonelx> add net
zonecfg:zonelx:net> set physical=pcn1
zonecfg:zonelx:net> set address=10.73.130.249/24
zonecfg:zonelx:net> end
zonecfg:zonelx> add dedicated-cpu
zonecfg:zonelx:dedicated-cpu> set ncpus=1-2
zonecfg:zonelx:dedicated-cpu> end
zonecfg:zonelx> add capped-memory
zonecfg:zonelx:capped-memory> set physical=256m
zonecfg:zonelx:capped-memory> set swap=128m
zonecfg:zonelx:capped-memory> set locked=50m
zonecfg:zonelx:capped-memory> end
zonecfg:zonelx> verify
zonecfg:zonelx> commit
zonecfg:zonelx> exit

La configuración de la memoria de tipo contenedor tambien la podemos realizar cuando el contenedor se esta ejecutando, a través del Resource Manager, asi:

# rcapadm -z zonelx -m 256m

Y lo mismo el area de swap:

# prctl -n zone.max-swap -v 128m -t privileged -r -e deny -i zone zonelx

Instalamos la imagen de CentOS 3.0...

# zoneadm -z zonelx install -d /export/home/un38134/centos_fs_image.tar.bz
Installing zone 'zonelx' at root directory '/opt/zones'
from archive '/export/home/un38134/centos_fs_image.tar.bz'

This process may take several minutes.
Setting up the initial lx brand environment.
System configuration modifications complete.

Installation of zone 'zonelx' completed successfully.

Details saved to log file:
"/opt/zones/root/var/log/zonelx.install.747.log"

# zoneadm list -iv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
1 zonelx running /opt/zones/zonelx lx shared
- zonepruebas installed /opt/zones/zonepruebas native shared

# zonecfg -z zonelx info
zonename: zonelx
zonepath: /opt/zones/zonelx
brand: lx
autoboot: false
bootargs: -m verbose
pool:
limitpriv:
scheduling-class:
ip-type: shared
net:
address: 10.73.130.249/24
physical: pcn0
capped-memory:
physical: 256M
[swap: 128M]
[locked: 50M]
rctl:
name: zone.max-swap
value: (priv=privileged,limit=134217728,action=deny)
rctl:
name: zone.max-locked-memory
value: (priv=privileged,limit=52428800,action=deny)

Arrancamos la zona.

# zoneadm -z zonelx boot

Y ya podemos acceder a nuestro contenedor con Linux.

# zlogin zonelx
[Conectado a la zona 'zonelx' pts/2]

Welcome to your shiny new Linux zone.

- The root password is 'root'. Please change it immediately.

- To enable networking goodness, see /etc/sysconfig/network.example.

- This message is in /etc/motd. Feel free to change it.

For anything more complicated, see:
http://opensolaris.org/os/community/brandz/

You have mail.

# uname -a
Linux zonelx 2.4.21 BrandZ fake linux i686 i686 i386 GNU/Linux

# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:2D:04:A0
inet addr:10.73.130.249 Bcast:10.73.130.255 Mask:255.255.255.0
UP BROADCAST RUNNING SLAVE MTU:1500 Metric:1

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING SLAVE MTU:8232 Metric:1
~.

A diferencia con el articulo anterior de este mismo blog, hemos trasformado la zona virtual de tipo BrandZ en un contenedor con unos pocos parametros definidos en su configuración.

No hay comentarios:

Publicar un comentario en la entrada