Вы находитесь на странице: 1из 10

Taller 9: Virtualizacin tradicional (KVM) y ligera (docker)

#############################################################
Host Anfitrion: Host donde se instala la tecnologa de virtualizacin (comunmente hy
pervisor)
-------------Host Invitado (Guest): Mquina Virtual que se crea desde el Host Anfitrion
---------------------Tecnologas de Virtualizacin
#############################################################
Virtualizacin Completa
--------------------------------------------KVM
-----> Desarrollado por RedHat
Xen
-----> Desarrollado Citrix
VirtualBox -----> Desarrollado por Oracle
VMWare(ESX) -----> Desarrollado por VMWare
Vritualizacin Ligera
---------------------------------------------OpenVZ
-----> Virtualizacin a nivel de ncleo con uso de templates
Docker
-----> Virtualizacin a nivel de ncleo con uso de contenedores
Virtualizacin Completa: KVM
############################################################
KVM usa la funcionalidad de virtualizacin nativa de servidores
y el host anfitrion slo puede ser instalado en un S.O. de 64 bits.
Las mquinas virtuales sobre KVM puede ser 32 o 64 bits (Windows o
Linux).
Verificar que procesador tenemos y si esta habilitado la virtualizacion nativa e
n el bos
---------------------------------------------------------------------------------------vmx (intel)
svm (amd)
$> egrep --color "(svm|vmx)" /proc/cpuinfo
Actualizar el kernel
----------------------$> yum update kernel
En clase verificar el grub
---------------------------------------------------------------------------------$> vim /etc/grub2/grub.cfg
$> grub2-install /dev/sda
---------------------------------------------------------------------------------$> reboot
Reiniciar con el kernel actualizado
Instalar kvm y virt-manager
-----------------------------------------------------------------

$> yum -y install kvm virt-manager libvirt qemu-kvm qemu-kvm-tools


Cargar los mdulos de kvm
-------------------------------------------------$> modprobe kvm
$> modprobe kvm_intel (si el procesador es intel)
$> modprobe kvm_amd
(si el procesaror es amd)
Verificar si esta cargado los mdulos de kvm
$> lsmod| grep kvm
Tiene que listar kvm y (kvm_intel o kvm_amd)
Reiniciamos el servicio libvirtd (servicio que gestiona las mquinas virtuales)
$> systemctl restart libvirtd
$> systemctl enable libvirtd
Creacin de la mquina virtual
###############################################################
Ejecutamos virt-manager y creamos maquinas virtuales
$> virt-manager
Nota: si sale error ejecutar virt-manager como usuario alumno
Creamos una mquina virtual de CentOS 7
descargamos el iso de
http://adiestra.pe/centos7/CentOS-7.0-1406-x86_64-Minimal.iso
1.- Click derecho en localhost --> Conectar (se conecta al hipervisor)
2.- Click derecho en localhost --> Nuevo
3.Etapa 1 de 5
Nombre: Server
Medio de Instalacin Local
Adelante
4.Etapa 2 de 5
Utilizar Image ISO
Click en Explorar
Exploracion Local ---> ir a /home/alumno/Descargas y seleccionar ISO
Tipo de OS: Linux
Versin:
Red Hat Enterprise Linux 7
Adelante
5.Etapa 3 de 5
Memoria RAM: 2048
CPU:
2
Adelante
6.Etapa 4 de 5
Habilitar almacenamiento para esta Mquina Virtual
Crear una imagen en el disco duro de la computadora
8,0 GB
Alojar en este momento la totalidad del disco
Adelante
7.Etapa 5 de 5
Opciones Avanzadas:

Red Virtual 'default' NAT


Tipo de Virtualizacin: kvm
Arquitectura: x86_64
Finalizar
8- Install CentOS 7
Nombre: Server1
Medio de Instalacin Local
9.- Instalar CentOS y Reiniciar
* Notas
------------------------------------------------------------la configuracin de la VM se guarda en
/etc/libvirt/qemu/Server.xml
la imagen del disco virtual se guarda en
/var/lib/libvirt/images/Server.img
Para sacar el mouse de la maquina virtual; presionan
Ctrl + Alt
Datos de la mquina virtual
#################################################
Instalar la mquina virtual en clase
8GB para el / particion standar y xfs
1GB para el swap
LLamar a la mquina virtual
server.adiestra.pe
Configuracin de la Mquina Virtual
###################################################
Verificacion de las tarjetas
$> ip link show
Verificacion de las Ips
$> ip addr show
En el virt-manager ir al gestor (primera pantalla)
Click en Editar --> Detalles de la Conexion
Click en Redes Virtuales
Interfaz--->default : Ver la interfaz de conexion (Ej: virbr0)
Rangos de red
Ej: 192.168.122.0/24
Ejecutar en el Host Anfitrion
-------------------------------Para saber la ip del host anfitrion
$> ifconfig virbr0 ----> (virbr0 lo sabemos del punto anterior)
Ej: 192.168.122.1
Ejecutar en la Mquina Virtual
---------------------------------Ahora configuramos en la mquina virtual su IP con los siguientes parmetros
IP: 192.168.122.2/24
Puerta de Enlace: 192.168.122.1
DNS: 192.168.100.4

Ver las tarjetas de red detectadas y sus Ips (si la tuvieras)


$> ip addr show
Ver que tarjeta de red esta activa (con el cable conectado)
$> ip link show
ver la tiene en su estado "state UP"
Ej: supongamos que enp6s0 est activo, pasamos a configurar la tarjeta
$> vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR0=192.168.122.2
PREFIX0=24
GATEWAY0=192.168.122.1
DNS1=192.168.100.4
Reiniciar el servicio de red
$> systemctl restart NetworkManager
Verificar que no hubo errores
$> systemctl status NetworkManager
Compobar los parmetros de red y el estado
ver ips y mscaras
$> ip addr show
ver puertas de enlace
$> ip route show
ver configuracin del DNS
$> cat /etc/resolv.conf
ping a la puerta de enlace
$> ping 192.168.122.1
ping a google
$> ping www.google.com
ping a 8.8.8.8
$> ping 8.8.8.8
Dar nombre a la mquina virtual
$> hostnamectl set-hostname server.adiestra.pe
$> su $> hostnamectl
Instalar herramientas bsicas de red y vim
$> yum -y install net-tools wget elinks ftp telnet vim
Configuracin de la Interfaz Bridge en el host anfitrin
#######################################################################
Verifcar la interfaz activa, Ej: enp6s0
echo "DEVICE=enp6s0
ONBOOT=yes
BRIDGE=br0" > /etc/sysconfig/network-scripts/ifcfg-enp6s0

echo "DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR0=192.168.130.X
PREFIX0=24
GATEWAY0=192.168.130.1
DNS1=192.168.100.4
STP=on
DELAY=0" > /etc/sysconfig/network-scripts/ifcfg-br0
Reiniciar la Red
#############################################
Apagar interfaz activa actual
$> ifdown enp6s0
$> systemctl restart NetworkManager
Esperar
$> ping
$> ping
$> ping

un minuto
192.168.130.1
8.8.8.8
www.google.com

Comprobar las interfaces


#############################################
$> ifconfig
$> ifconfig br0
$> ifconfig enp6s0
Modificar la mquina virtual para que use la interfaz bridge
###################################################################
Apagar la VM
Luego Abrir la VM
Click en el cono I
NIC: Dispositivo Fuente: Dispositivo de equipo xxxx (Puente br0) --->
Aplicar
Iniciar la mquina virtual
Ejecutar en la mquina virtual
$> ip addr show
Cambiarle la IP a la mquina sumando + 100 a la IP de la mquina anfitrion
$> vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR0=192.168.130.X+100
PREFIX0=24
GATEWAY0=192.168.130.1
DNS1=192.168.100.4
Reiniciar el servicio de red
$> ifdown eth0
$> systemctl restart NetworkManager
$> ip addr show

$> ping 192.168.130.1 (puerta de enlace)


$> ping 8.8.8.8 (demora un poco)
Si no hace ping a 8.8.8.8
$> reboot
* VIRSH
###################################################################
Similar a virt-manager existe la herramienta virsh que funciona
por consola
Para acceder al prompt de virsh ejecutamos
$> virsh
Ver ayuda de vish
$> virsh help

$> virsh
virsh> help
Para listar todas las VMs (encendidas o apagadas)
virsh> list --all
Para iniciar una vm
virsh> start nombrevm
Para apagar de manera amigable una vm
virsh> shutdown nombrevm
Para apagar a la maldad una vm
virsh> destroy nombrevm
Para borrar el estado guardado de una vm (cuando se apaga el equipo
anfitrin indebidamente; la vm no se puede levantar por virt-manager)
virsh> managedsave-remove nombrevm
Para ver mas opciones de virsh
virsh> help
Para salir
virsh> quit
DOCKER
#########################################################################
Habilitar contabilidad de la memoria y el swap (No ejecutar en aula)
$> vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 crashkernel=auto vconsole.font=la
tarcyrheb-sun16 rhgb quiet cgroup_enable=memory swapaccount=1"
Actualizar grub
$> grub2-mkconfig -o /boot/grub2/grub.cfg
Reiniciar
$> reboot
Instalar Docker
#####################################################################
$> yum -y install docker
Iniciar servicio

$> systemctl start docker


Habilitar arranque automtico de docker
$> systemctl enable docker
Obtener informacin de la instalacin docker
$> docker info
Descarga de imgenes
#####################################################################
Buscar imgenes de contenedores disponibles de centos, incluido tags
$> docker search centos | less
Buscar imgenes de contenedores disponibles de ubuntu
$> docker search ubuntu | less
Buscar imgenes de contendores disponibles de zentyal
$> docker search zentyal
Descargar una imagen con su tag respectivo
Ej: CentoS7 minimal
$> docker pull maxholman/centos7:latest
Ver imgenes descargadas
$> docker images
Ver contenedores en ejecucin
$> docker ps
Ver todas las imgenes(contenedores) y sus tags
$> docker images
Ejecutar un contenedor (instancia en ejcucin de una imagen)
#################################################################
(si el contenedor no existe intentar descargar la imagen)
$> docker run -i -t maxholman/centos7 /bin/bash

$> docker run -i -t maxholman/centos7:latest /bin/bash


En otra consola ejecutar ps para ver los contenedores ejecutados y su ID
$> docker ps
Ejecutar dentro del contenedor
$> cat /etc/redhat-release
$> ip addr show
$> ip link show
$> ping 172.17.42.1
$> ping 8.8.8.8
$> touch hola
Salir de la sesin y destruir el contenedor
$> exit
$> docker run -i -t maxholman/centos7 /bin/bash
$> cat hola
$> exit
Al salir del container se borran los cambios
Ejecutar un contenedor y guardar los cambios

############################################################
$> docker run -i -t maxholman/centos7 /bin/bash
$> yum -y install net-tools vim elinks
En otra consola ejecutar ps para ver los contenedores ejecutados y su ID
$> docker ps
Guardar la imagen con sus cambios en un nuevo contenedor
$> docker commit 62342ea9b173 alumno/centos7
$> exit
Iniciar el contener guardado
$> docker run -i -t alumno/centos7 /bin/bash
Verificar los cambios guardados
$> ifconfig
$> route -n
En otra consola ejecutar ps para ver los contenedores ejecutados y su ID
$> docker ps
Ver informacin de un contenedor
#################################################
En otra consola ejecutar ps para ver los contenedores ejecutados y su ID
$> docker ps
$> docker inspect cc26dee81ff7
Detener un contenedor por su ID
######################################################################
$> docker stop cb8f352245a5
$> docker ps
Detener un contenedor a la fuerza
$> docker kill cb8f352245a5
$> docker ps
Ver el cache de ejecucin de los containers
$> docker ps -a
Borrar una imagen
######################################################################
Primero detener los contenedores de la imagen, luego:
Buscar el id de la imagen
$> docker images
Borrar la imagen (y sus contenedores) por su ID
$> docker rmi -f cb8f352245a5 (borrar la imagen maxholman)
$> docker images
Borrar el cach de los contenedores
############################################################
Si nos d error al querer borrar una imagen
$> docker ps -a | awk '{print $1}' | grep -v CONTAINER | xargs sudo docker rm
Luego borrar la imagen con el procedimiento anterior
Automatizacin de despliegue de imgenes con Dockerfiles
#####################################################################

Un procedimiento comn para desplegar las imgenes es hacer uso de


Dockerfiles que son archivos con un lenguaje de script que permite
automatizar el despliegue de servicios (instalacin, configuracin)
Para centos 7 existe el proyecto
https://github.com/CentOS/CentOS-Dockerfiles
que son una serie de Dockerfiles para desplegar mltiples servicios
Para descargar estos Dockerfile instalamos git en el mquina fsica
$> yum -y install git
Luego descargamos los Dockerfiles
$> git clone https://github.com/CentOS/CentOS-Dockerfiles
Veremos los archivos Dockerfiles en la carpeta
$> ls -l CentOS-Dockerfiles
Editar un archivo Dockerfile
---------------------------------------------------------------------Vamos a editar el Dockerfile de httpd y modificamos el FROM
$> vim Centos-Dockerfiles/httpd/centos7/Dockerfile
FROM alumno/centos7
Deployar una nueva imagen con el Dockerfile
----------------------------------------------------------------------$> docker build --rm -t alumno/httpd Centos-Dockerfiles/httpd/centos7
Visualizar las imgenes generadas
$> docker images
Ejecutar un container en background en un puerto especfico de la mquina real
------------------------------------------------------------------------------Con la imagen deployada alumno/httpd vamos a ejecutarlo como demonio en el puert
o 80 de la mquina local
$> docker run -d -p 80:80 -t alumno/httpd /run-httpd.sh
Se puede usar un puerto distinto en la mquina real
$> docker run -d -p 8080:80 -t alumno/httpd /run-httpd.sh
Acceder con el navegador
http://localhost
http://localhost:8080
Apagar los contenedores despus
$> docker ps
$> docker stop ID1
$> docker stop ID2
Gestin de Storage
################################################################################
##
Los cambios que se dan en el contenedor se destruyen cuando se detiene este;
sin embargo desde la mquina real se le puede asignar un directorio en el cual
el contenedor podr escribir los cambios y de esta manera mantener archivos persis
tentes
Ej: vamos a desplegar el servidor web con el directorio /var/www/html asignado d
esde
la mquina real

En la mquina real ejecutamos


Creando un directorio para la data de los containers
$> mkdir /data
$> mkdir /data/html
$> vim /data/html/index.html
<h1>Hola Mundo</h1>
Contextos de SELINUX
----------------------------------------------------------------------------------------Si SELINUX esta en modo enforce es necesario brindarle el contexto web al nuevo
directorio
de la mquina real para que pueda ser accedido en el contenedor
$> yum -y install policycoreutils policycoreutils-python
$> semanage fcontext -a -t httpd_sys_content_t "/data/html(/.*)?"
$> restorecon -FRvv /data/html
Ejecutando con el Storage asignado
-------------------------------------------------------------------------------------------------Vamos ahora a ejecutar el contenedor con el directorio de la mquina real /data/ht
ml apuntado al directorio
/var/www/html del contenedor
$> docker run -d -p 80:80 -v /data/html:/var/www/html -t alumno/httpd /run-httpd
.sh
Visualizar ahora en el navegador
http://localhost
Detener el contenedor
$> docker ps
$> docker stop IDContainer
Ejecutando un contenedor con lmite de memoria y CPU
---------------------------------------------------------------------------------------Ejemplo: Limitando la memoria a 1024M y el uso de 2 CPUs como mximo
$> docker run -d -p 80:80 -m="1024m" -c=2 -v /data/html:/var/www/html -t alumno/
httpd /run-httpd.sh
Prctica: Deployar MariaDB