#4sysadmins

Inicio » GNU/Linux » Crear máquina virtual con Xen

Crear máquina virtual con Xen

Últimas Entradas

Follow #4sysadmins on WordPress.com

En la entrada “Virtualización GNU/Linux (VIII/VIII): Virtualizar con Xen” aprendimos a instalar Xen project para posteriormente poder crear máquinas virtuales para-virtualizadas con lo que conseguiríamos un mejor rendimiento en nuestros guest. Es justo lo que vamos aprender ahora. Una vez tenemos todo previsto y Xen project funcionando, es el momento de crear nuestra primer DomU.

Requisitos

  • Contamos con un servidor Debian 8 en el que corre un Xen, por lo tanto este es nuestro Domain-0
  • Tenemos asignada una cierta memoria RAM (512 MB en nuestro caso) a Domain-0 y desactivado el ballooning de manera que Domain-0 nunca pueda asignar mas memoria de la que realmente tenemos, así nunca experimentaremos problemas de rendimiento en Domain-0.
  • Hemos creado un puente de red (xenbr0) en Domain-0 al que conectar los dispositivos virtuales de cada DomU. Esto hace que los hosts virtuales tomen IP del mismo segmento de red que Domain-0, es decir serán tratados como hosts físicos.
  • Nuestro Domain-0 tiene creado un grupo de volúmenes (xen_grp) y varios volúmenes lógicos. Nos centraremos en /dev/xen_grp/lv_images montado sobre /images ya que será aquí donde almacenaremos las imágenes de los sistemas virtuales.

Creando máquina virtual en Xen

Para crear la máquina virtual básicamente necesitaremos crea un disco virtual para swap, descargar la imagen del sistema operativo preparado para ser para-virtualizado (en nuestro caso utilizaremos CentOS 6.7 gnome Desktop 32 bits), crear un puente de red para que tome conexión, y copiar y editar el archivo de configuración /etc/xen/xlexample.pvlinux.

Descargamos CentOS 6.7:

# cd /images
# wget ftp://ftp.stacklet.com/archive/x86/CentOS/6.7/centos.6-7.gnome.x86.20150810.img.tar.bz2

Descomprimimos la imagen:

# tar -jxvf centos.6-7.gnome.x86.20150810.img.tar.bz2

Crear un disco swap:

# dd if=/dev/zero of=/images/centos-swap.6-7.img bs=1024k seek=512 count=0

Crear el sistema swap en el disco creado en el paso anterior:

# mkswap /images/centos-swap.6-7.img

Creamos un directorio temporal donde montar la imagen:

# mkdir -p /images/tmp/Centos67

Montamos la imagen:

# mount -t ext4 -o loop /images/centos.6-7.gnome.x86.20150810.img /images/tmp/Centos67/

Modificamos la password del usuario root de la imagen:

# chroot /images/tmp/Centos67/ /usr/bin/passwd

Modificar el archivo /etc/fstab de la imagen:

# vi /images/tmp/Centos67/etc/fstab
/dev/xvda1       /             ext4     defaults,errors=remount-ro 1 1
/dev/xvda2      none            swap    sw
none             /dev/shm      tmpfs   defaults                    0 0

Damos un nombre a la nueva máquina:

# vi /images/tmp/Centos67/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=Centos67

Añadimos la máquina al archivo /etc/hosts de la imagen:

# vi /images/tmp/Centos67/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.246   Centos67

Configuramos la interfaz de red:

# vi /images/tmp/Centos67/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.246
NETMASK=255.255.255.0
BROADCAST=192.168.1.25
ONBOOT=yes
TYPE=Ethernet

Creamos el archivo para los DNS:

# vi /images/tmp/Centos67/etc/resolv.conf
nameserver 192.168.1.1

Editamos el archivo /etc/inittab de manera que podamos utilizar la terminal virtual hvc0 (Xen Virtual Console 0), para ello agregaremos la siguiente línea al final del archivo:

# vi /images/tmp/Centos67/etc/inittab
xvc0:2345:respawn:/sbin/mingetty xvc0

Nos aseguramos de que la TTY hvc0 aparezca en el archivo /etc/securetty del servidor principal Domain-0:

# cat /etc/securetty |grep hvc0
hvc0

Configuramos la zona horaria:

# cp /images/tmp/Centos67/usr/share/zoneinfo/Europe/Madrid /images/tmp/Centos67/etc/localtime

Instalamos el cliente NTP:

# chroot /images/tmp/Centos67/ yum install ntp

Comprobamos el nombre de los archivos kernel e initrd de la imagen CentOS67 pues nos harán falta para el próximo paso:

# ls -l /images/tmp/Centos67/boot/
-rw-r--r-- 1 root root 111790 jul 25 2015 config-2.6.32-573.1.1.el6.i686
drwxr-xr-x 3 root root 4096 ago 10 2015 efi
drwxr-xr-x 2 root root 4096 feb 25 00:22 grub
-rw------- 1 root root 14401638 ago 10 2015 initramfs-2.6.32-573.1.1.el6.i686.img
-rw-r--r-- 1 root root 202247 jul 25 2015 symvers-2.6.32-573.1.1.el6.i686.gz
-rw-r--r-- 1 root root 2034619 jul 25 2015 System.map-2.6.32-573.1.1.el6.i686
-rwxr-xr-x 1 root root 4081824 jul 25 2015 vmlinuz-2.6.32-573.1.1.el6.i686

Modificaremos el archivo /boot/grub/grub.conf de manera que sea utilizado por pygrub (gestor de arranque utilizado por Xen para iniciar las máquinas virtuales):

# vi /images/tmp/Centos67/boot/grub/grub.conf
default=0
timeout=10
title vmlinuz-2.6.32-573.1.1.el6.i686
 root (hd0,0)
 kernel /boot/vmlinuz-2.6.32-573.1.1.el6.i686 console=hvc0 xencons=tty0 root=/dev/xvda1 ro
 initrd /boot/initramfs-2.6.32-573.1.1.el6.i686.img

Asignar dirección MAC a la interfaz predeterminada (eth0):

Importante: El siguiente script (macgen.py) no existe por lo que primero deberemos de crearlo

# vi /usr/local/sbin/macgen.py
#! /usr/bin/python
#
# macgen.py script to generate a MAC address for Red Hat Virtualization guests
#
import random
mac = [ 0x00, 0x16, 0x3e,
random.randint(0x00, 0x7f),
random.randint(0x00, 0xff),
random.randint(0x00, 0xff) ]
print ':'.join(map(lambda x: "%02x" % x, mac))
# chmod +x /usr/local/sbin/macgen.py

Ahora ya es posible generar la MAC:

# /usr/local/sbin/macgen.py
00:16:3e:19:a3:0a

Creamos el archivo de configuración para nuestra nueva máquina CentOS67. Es posible hacer una copia del que viene por defecto (/etc/xen/xlexample.pvlinux) o bien crear uno nuevo:

# vi /etc/xen/CentOS67.cfg
name        = 'CentOS67'

bootloader  = '/usr/lib/xen-4.4/bin/pygrub'

vcpus       = '1'
memory      = '256'

root        = '/dev/xvda1 ro'

disk        = ['tap:aio:/images/centos.6-7.gnome.x86.20150810.img,xvda1,w',
               'tap:aio:/images/centos-swap.6-7.img,xvda2,w']

vif         = ['mac=00:16:3e:19:a3:0a']

on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'                                                                                                                                      
                                                                                                                                                             
extra       = ''

IMPORTANTE: En este archivo hay que prestar especial atención a que el cargador de arranque se encuentre en la ruta indicada, que el nombre de las imágenes (tanto de CentOS como de Swap) correspondan con la ruta y con sus dispositivos (xvda1 y xvda2, respectivamente) y que la mac sea la que hemos generado en el paso anterior

Podemos aprender mas parámetros del archivo de configuración en este link

Desmontamos la partición:

# umount /images/tmp/Centos67

Iniciamos la máquina CentOS67:

# xl create /etc/xen/CentOS67.cfg

Conectar con la máquina:

Para conectar con la máquina podemos abrir una terminal y acceder vía SSH y acceder como root.

Otra forma posible es abrir un cliente VNC y conectar por entorno gráfico

Nota: Si por cualquier motivo no hemos configurado VNC en el archivo de configuración de la máquina antes de crearla, siempre cabe la posibilidad de acceder por SSH instalar el servidor VNC, iniciar el servicio y listo, a partir de ese momento podremos igualmente acceder por entorno gráfico

Listar dominios:

# xl list

Destruir máquina:

# xl destroy <domU>

 

Anuncios

Deja un comentario, Gracias!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: