viernes, 1 de agosto de 2008

Virtualización - OpenVZ tu gran amigo

Bueno... estando en la Campus, he asistido a una Conferencia-Taller de virtualización con OpenVZ.
la verdad es que me ha parecido una opción más que interesante, asi que me he puesto a testearlo un poco.

Introducción:

OpenVZ, es una tecnología de virtualización basada en el kernel de linux. Permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados (Aunque compartiendo el mismo kernel), conocidos como Servidores Privados Virtuales (SPV) o Entornos Virtuales (EV).

Esto tiene varias ventajas e inconvenientes, alguno de los cuales cito acontinuación.

Desventajas:

1.- Al compartir un kernel, un error en una de las maquinas virtuales, podria propagarse al resto, lo cual supondria una caida general del sistema.

2.- Si la version de openVZ es para Linux, solo nos permite crear SPV Linux, de distintas versiones, si es para Windows, solo versiones de Windows (Esto lo he oido pero no lo he verificado.)


Ventajas:

1.- OpenVZ es una version Free de Virtuozzo, desarrollado por SWsoft, se instala sobre una modificacion del kernel de Linux, la cual es bastante dificil que nos de algun error, ya que la fiabilidad del producto es bastante alta.

2.-OpenVZ proporciona mucho mejor rendimiento, escabilidad, densidad, administración de recursos dinámicos, y facilidad de administración que sus alternativas. (Xen.....)

Escenario:

Para realizar las pruebas, he montado un servidor CENTOS5 virtualizado con VmWare Server, sobre WindowsXP, en este CENTOS5, se ha instalado y configurado OpenVZ y se ha creado una maquina Virtual con "fedora-7-i386-minimal".

En este mini manual se partira de la instalacion de CENTOS5 ya creada, ya que el tema de VmWare se escapa de la finalidad del mismo.

Toda la informacion necesaria esta disponible en:

http://wiki.openvz.org/Main_Page

Instalación:

La instalación del software es casi automatica gracias a Yum, bastara con actualizar los repositorios disponibles.

Actualización de Repositirios:

[root@nodo1 ~]# cd /etc/yum.repos.d/

[root@nodo1 yum.repos.d]# wget http://download.openvz.org/openvz.repo

--18:40:47-- http://download.openvz.org/openvz.repo

Resolviendo download.openvz.org... 64.131.90.11

Connecting to download.openvz.org|64.131.90.11|:80... conectado.

Petición HTTP enviada, esperando respuesta... 200 OK

Longitud: 2179 (2,1K) [text/plain]

Saving to: `openvz.repo'

100%[=======================================>] 2.179 --.-K/s in 0s

18:40:47 (9,38 MB/s) - `openvz.repo' saved [2179/2179]

[root@nodo1 yum.repos.d]# rpm --import http://download.openvz.org/RPM-GPG-Key-O

Instalación:

[root@nodo1 yum.repos.d]# yum list|grep -i ovz
ovzkernel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
ovzkernel-PAE.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
ovzkernel-PAE-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
ovzkernel-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
ovzkernel-ent.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
ovzkernel-ent-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
ovzkernel-xen.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
ovzkernel-xen-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh
[root@nodo1 yum.repos.d]# yum install ovzkernel.i686
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* addons: ftp.cica.es
* extras: ftp.cica.es
* base: ftp.cica.es
* openvz-kernel-rhel5: mirror.yandex.ru
* openvz-utils: mirror.yandex.ru
* updates: ftp.cica.es
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package ovzkernel.i686 0:2.6.18-53.1.19.el5.028stab053.14 set to be install ed
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
ovzkernel i686 2.6.18-53.1.19.el5.028stab053.14 openvz-ker nel-rhel5 17 M

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 17 M
Is this ok [y/N]: y
Downloading Packages:
(1/1): ovzkernel-2.6.18-5 100% |=========================| 17 MB 00:36
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: ovzkernel ######################### [1/1]

Installed: ovzkernel.i686 0:2.6.18-53.1.19.el5.028stab053.14
Complete!


Configuración:

Modificamos el grub para asegurarnos que arrancamos con la versión de kernel que necesitamos.

[root@nodo1 yum.repos.d]# vi /etc/grub.conf


title OpenVZ (2.6.18-53.1.19.el5.028stab053.14)
root (hd0,0)
kernel /vmlinuz-2.6.18-53.1.19.el5.028stab053.14 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-53.1.19.el5.028stab053.14.img
title CentOS (2.6.18-92.1.6.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.1.6.el5 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-92.1.6.el5.img


[root@nodo1 yum.repos.d]# reboot

Si estas entradas no existen, hay que añadirlas en sysctl, si existiesen, hay que dejarlas como se indica aquí.

[root@nodo1 ~]# vi /etc/sysctl.conf # On Hardware Node we generally need # packet forwarding enabled and proxy arp disabled net.ipv4.ip_forward = 1 net.ipv4.conf.default.proxy_arp = 0 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 # Enables the magic-sysrq key kernel.sysrq = 1 # TCP Explict Congestion Notification #net.ipv4.tcp_ecn = 0 # we do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 [root@nodo1 ~]# reboot

Instalación de Paquetes adicionales:

Una vez instalado y configurado correctamente el kernel, podemos empezar a instalar las aplicaciones adicionales, necesarias para gestionar el openVZ.


[root@nodo1 ~]# yum list|grep -i vz * openvz-kernel-rhel5: mirror.yandex.ru * openvz-utils: mirror.yandex.ru ovzkernel.i686 2.6.18-53.1.19.el5.028 installed ovzkernel-PAE.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh ovzkernel-PAE-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh ovzkernel-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh ovzkernel-ent.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh ovzkernel-ent-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh ovzkernel-xen.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh ovzkernel-xen-devel.i686 2.6.18-53.1.19.el5.028 openvz-kernel-rh vzctl.i386 3.0.22-1 openvz-utils vzctl-lib.i386 3.0.22-1 openvz-utils vzpkg.noarch 2.7.0-18 openvz-utils vzquota.i386 3.0.11-1 openvz-utils vzrpm43.i386 4.3.3-7_nonptl.6 openvz-utils vzrpm43-python.i386 4.3.3-7_nonptl.6 openvz-utils vzrpm44.i386 4.4.1-22.5 openvz-utils vzrpm44-python.i386 4.4.1-22.5 openvz-utils vztmpl-centos-4.i386 2.0-2 openvz-utils vztmpl-fedora-7.i386 1.1-1 openvz-utils vztmpl-fedora-core-3.i386 2.0-2 openvz-utils vztmpl-fedora-core-4.i386 2.0-2 openvz-utils vztmpl-fedora-core-5.i386 2.0-2 openvz-utils vztmpl-fedora-core-6.i386 1.2-1 openvz-utils vzyum.noarch 2.4.0-11 openvz-utils

Instalamos todas las aplicaciones.

[root@nodo1 ~]# yum install vzctl.i386 vzctl-lib.i386 vzpkg.noarch vzquota.i386 vzrpm43.i386 vzrpm43-python.i386 vzrpm44.i386 vzrpm44-python.i386 vztmpl-centos-4.i386 vztmpl-fedora-7.i386 vztmpl-fedora-core-3.i386 vztmpl-fedora-core-4.i386 vztmpl-fedora-core-5.i386 vztmpl-fedora-core-6.i386 vzyum.noarch
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* addons: ftp.cica.es
* extras: ftp.cica.es
* base: ftp.cica.es

......

Transaction Summary
=============================================================================
Install 15 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 57 M
Is this ok [y/N]: y
Downloading Packages:

.......

Package vztmpl-fedora-core-6-1.2-1.i386.rpm is not signed


Este "error" es simplemente que el paquete no está firmado por lo cual le indique que simplemente no verificara las firmas ;)

[root@nodo1 ~]# vi /etc/yum.repos.d/openvz.repo

[openvz-utils]
name=OpenVZ utilities
#baseurl=http://download.openvz.org/current/
mirrorlist=http://download.openvz.org/mirrors-current
enabled=1
gpgcheck=0


Tras la modificación instalamos de nuevo esta vez ya sin errores. ;)

[root@nodo1 ~]# yum install vzctl.i386 vzctl-lib.i386 vzpkg.noarch vzquota.i386 vzrpm43.i386 vzrpm43-python.i386 vzrpm44.i386 vzrpm44-python.i386 vztmpl-centos-4.i386 vztmpl-fedora-7.i386 vztmpl-fedora-core-3.i386 vztmpl-fedora-core-4.i386 vztmpl-fedora-core-5.i386 vztmpl-fedora-core-6.i386 vzyum.noarch
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* addons: ftp.cica.es
* extras: ftp.cica.es
* base: ftp.cica.es

.......

Transaction Summary
=============================================================================
Install 15 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 57 M
Is this ok [y/N]: y

.......

Installed: vztmpl-centos-4.i386 0:2.0-2 vztmpl-fedora-7.i386 0:1.1-1 vztmpl-fedora-core-3.i386 0:2.0-2 vztmpl-fedora-core-4.i386 0:2.0-2 vztmpl-fedora-core-5.i386 0:2.0-2 vztmpl-fedora-core-6.i386 0:1.2-1
Dependency Installed: vzctl.i386 0:3.0.22-1 vzctl-lib.i386 0:3.0.22-1 vzpkg.noarch 0:2.7.0-18 vzquota.i386 0:3.0.11-1 vzrpm43.i386 0:4.3.3-7_nonptl.6 vzrpm43-python.i386 0:4.3.3-7_nonptl.6 vzrpm44.i386 0:4.4.1-22.5 vzrpm44-python.i386 0:4.4.1-22.5 vzyum.noarch 0:2.4.0-11
Complete!

Bien, llegado ha este punto ya tenemos instalado todo lo necesario. Así que ya solo queda empezar con las pruebas.

1.- Creamos la plantilla que vamos a utilizar:

[root@nodo1 ~]# vzpkgcache fedora-7-i386-minimal
...
Complete!
Packing cache file fedora-7-i386-minimal.tar.gz ...
Cache file fedora-7-i386-minimal.tar.gz [62M] created.

En nuestro caso una de las que vienen por defecto.

Este proceso es bastante largo,aunque solo será necesario realizarlo una vez, ya que a partir de este momento, la plantilla estará lista para desplegarse en el instante se necesite.

2.- Creamos entornos Virtuales, EV

Usando la plantilla que acabamos de crear, podemos ir creando tantos EV, como necesitemos.

[root@nodo1 ~]# vzctl create 101 --ostemplate fedora-7-i386-minimal --hostname NVZ1 Creating VE private area (fedora-7-i386-minimal) Performing postcreate actions VE private area was created [root@nodo1 ~]# vzlist VE not found [root@nodo1 ~]# vzctl start 101 Starting VE ... VE is mounted Setting CPU units: 1000 Configure meminfo: 65536 Set hostname: NVZ1 VE start in progress... [root@nodo1 ~]# vzlist VEID NPROC STATUS IP_ADDR HOSTNAME 101 3 running - NVZ1

3.-Acceder a EV.

Para acceder a los
EV creados, bastará con:

[root@nodo1 ~]# vzctl enter 101 entered into VE 101
[root@NVZ1 /]# ls

bin boot dev etc home lib media mnt opt proc root sbin selinux srv sys tmp usr var [root@NVZ1 /]#


4.- Configurando
IP y usuarios.

Para configurar una
IP que nos sirva para conectar a la maquina virtual, desde la maquina anfitriona realizamos lo siguiente:

[root@nodo1 ~]# vzctl set 101 --ipadd 192.168.150.129 --save
Adding IP address(es): 192.168.150.129
SIOCADDRT: Network is unreachable
Saved parameters for VE 101
[root@nodo1 ~]# vzlist
VEID NPROC STATUS IP_ADDR HOSTNAME
101 3 running 192.168.150.129 NVZ1

A la hora de configurar el
password de root de la maquina virtual, es tan simple como entrar en la maquina virtual desde la maquina anfitriona y cambiar el password.

[root@nodo1 ~]# vzctl enter 101
entered into VE 101
[root@NVZ1 /]# passwd root
Changing password for user root.
New UNIX password:
BAD PASSWORD: it does not contain enough DIFFERENT characters
Retype new UNIX password:
passwd: all authentication tokens updated successfully.


Llegados a este punto la maquina virtual ya está lista para recibir conexiones. :)

5.- Asignando recursos.
Principalmente deveriamos establecer dos valores.

A.-Procentaje maximo de CPU que podra usar la maquina virtual

Aqui vemos los valores que tenemos en nuestra maquina, los cuales no está relacionados con MHz ni nada parecido.
Con esto indicamos:

[root@nodo1 ~]# vzcpucheck

Current CPU utilization: 2000
Power of the node: 122225

cpuunits- Valor del que no debe bajar nuestra maquina, pase lo que pase, Minimo garantizado
cpulimit- Valor en % del que noo puede pasar nuestra maquina virtual.
[root@nodo1 /]# vzctl set 101 --cpuunits 30000 --cpulimit 50 --save


B.-Tamaño de disco.

Por defecto es de 1Gb, para cambiarlo basta con:

[root@nodo1 /]# vzctl stop 101
[root@nodo1 /]# vzctl set 101 --diskspace 20000000:22000000 --save
[root@nodo1 /]# vzctl start 101
Esto nos asigna 20Gb de disco, y un margen de 2Gb mas por si fuera necesario.

Bueno y con esto, creo que ya está todo por ahora, ya ire probando mas c
ositas ;)

No hay comentarios: