AWS anunció un movimiento de Xen hacia KVM. Entonces, ¿qué es KVM?

En un anuncio de AWS sobre un nuevo tipo de instancia de gama alta EC2 (el C5) hay una fuerte sugerencia de que el gigante de la computación en la nube de Amazon ha comenzado a cambiar sus cientos de miles de servidores físicos lejos del hipervisor Xen de código abierto que los ejecuta hasta ahora, a la alternativa de código abierto, KVM.

Ya sea que haya invertido mucho en su carrera y / o hipoteca de vivienda en el futuro de Xen o si nunca supo que existía, es posible que le interese aprender más sobre KVM. Así que aquí hay una introducción general adaptada de mi libro, Aprenda usted mismo la virtualización de Linux y la alta disponibilidad: prepárese para el examen de certificación LPIC-3 304.

¿Necesita conocimientos más básicos sobre servidores Linux o AWS? Mis libros Linux en acción y Aprenda los servicios web de Amazon en un mes de almuerzos de Manning podrían ayudar, junto con mis cursos de administración de servidores Linux en Pluralsight. También hay un curso híbrido llamado Linux en movimiento que consta de más de dos horas de video y alrededor del 40% del texto de Linux en acción.

KVM

Al igual que Xen, KVM (máquina virtual basada en kernel) es una tecnología de hipervisor de código abierto para virtualizar la infraestructura informática que se ejecuta en hardware compatible con x86. También como Xen, KVM tiene una comunidad de usuarios activa y despliegues empresariales importantes.

Un host KVM realmente se ejecuta en el kernel de Linux junto con dos módulos del kernel de KVM (el módulo kvm.ko y kvm-intel.ko o kvm-amd.ko). A través de su estrecha integración del kernel, incluida la conectividad de E / S con el bloque del kernel y los controladores de red proporcionados por Virtio, KVM puede ofrecer a sus invitados un acceso más fluido a todos los perfiles complejos de hardware y redes que puedan encontrar.

Las extensiones de virtualización de hardware integradas en los diseños de CPU modernos y necesarias para las implementaciones de KVM significan que, de inmediato, los invitados de KVM pueden acceder de forma segura solo a los recursos de hardware que necesitan sin la necesidad de preocuparse por las fugas al sistema más grande.

¿Dónde encaja exactamente QEMU con todo esto? Además de poder actuar como hipervisor, la fortaleza de QEMU es como emulador. KVM, en su función de virtualización de hipervisor, puede aprovechar los poderes de emulación de QEMU para complementar sus propias funciones de aceleración de hardware, presentando a sus invitados un chipset emulado y un bus PCI. El todo, como dicen, puede ser mayor que la suma de sus partes.

Libvirt a menudo proporciona una gran cantidad de funciones de gestión para KVM. Por lo tanto, es posible que en ocasiones desee consultar la información detallada sobre las funciones relacionadas con KVM, como redes, almacenamiento y diseños del sistema de archivos, que se encuentra en el quinto capítulo del libro Aprenda usted mismo la virtualización de Linux y la alta disponibilidad ("Libvirt y herramientas relacionadas"). .

Instalación

Antes que nada, deberá asegurarse de que la máquina física que planea usar como host KVM admita la virtualización de hardware. Además de la configuración del BIOS y el contenido de / proc / cpuinfo (que discutimos en el Capítulo Uno), también puede verificar esto rápidamente desde un sistema Linux en ejecución usando kvm-ok: $ kvm-ok

También es una buena idea asegurarse de con qué arquitectura de hardware (64 o 32 bits) está trabajando: $ uname -m

Pero incluso si su perfil de hardware está a la altura de la tarea, tendrá que dejar que el kernel de Linux participe en sus planes. Si aún no están allí, debe agregar el kvm y los módulos del kernel kvm-intel o kvm-amd. # Modprobe kvm-intel

Si esos módulos no se cargan (y no hay un dispositivo / dev / kvm en el sistema de archivos), entonces es muy probable que su CPU no esté a la altura del trabajo que le gustaría. Sin embargo, si todo funcionó, está listo para instalar el paquete qemu-kvm (y, si es necesario, libvirt, virt-install y bridge-utils también).

Trabajar con herramientas de administración de KVM

No es ningún secreto que las plataformas de virtualización tienen una merecida reputación por ser complicadas. Pero hay dos cosas que pueden hacer que comenzar con KVM sea un poco más desafiante que algunos de los otros:

  • Hay bastantes kits de herramientas de administración disponibles, cada uno de los cuales ofrece una funcionalidad similar, pero no idéntica.
  • Tienen la mala costumbre de cambiar los nombres utilizados para los binarios clave según la distribución y la versión que esté utilizando.

Le presentaré las herramientas Libvirt y vmbuilder en el capítulo cinco, pero aquí discutiremos el kit de herramientas KVM.

La construcción de nuevos huéspedes utilizando lo que llamaremos la forma "KVM" es un proceso de dos pasos. Primero, usará qemu-img para crear una nueva imagen, o modificar o convertir una antigua. Luego, usará qemu-kvm para configurar una máquina virtual que iniciará la instalación.

¿Acabo de decir "usarás qemu-kvm ..."? Tonto de mí. qemu-kvm se fusionó con qemu hace mucho tiempo y ha sido reemplazado por qemu-system-x86_64. Mientras tanto, algunos sistemas le ofrecen kvm como un contenedor que ejecuta qemu-system-x86_64 -enable-kvm, aunque no debe confundir el contenedor kvm con el antiguo binario kvm que usaba una sintaxis algo diferente.

Entonces, veamos cómo funcionan estos dos pasos. Creas una imagen de disco con qemu-img (que, por cierto, también se puede usar de manera muy efectiva para otros hipervisores), donde "my-disk" es el nombre de la imagen que te gustaría crear, el tamaño máximo de la imagen será de 6 GB, y qcow2 es el formato de archivo. qcow, por cierto, significa “QEMU Copy On Write”.

qemu-img create -f qcow2 /home/username/myimages/my-disk.img 6G \ Formatting ‘/home/username/myimages/my-disk.img’, \ fmt=qcow2 size=6442450944 \ encryption=off \ cluster_size=65536 \ lazy_refcounts=off \ refcount_bits=16

La elección de un formato de archivo dependerá de sus necesidades específicas. Si necesita una mayor compatibilidad y flexibilidad, incluida la capacidad de generar instantáneas sofisticadas, entonces qcow2 probablemente sea su mejor opción.

El formato de imagen de disco qcow permite que la asignación de espacio en disco crezca solo según sea necesario, lo que significa que el uso del espacio es siempre lo más eficiente posible. Los cambios en una imagen de solo lectura de qcow se pueden guardar en un archivo separado, que se refiere internamente a la imagen original. qcow2 agregó la capacidad de crear múltiples instantáneas de imágenes.

Ahora estamos listos para el paso dos. Así es como construiremos nuestra VM:

kvm -name my-VM \ -hda /home/username/myimages/my-disk.img \ -cdrom /home/username/Downloads/ubuntu-16.04-server-amd64.iso \ -boot d -m 1024

A menudo (aunque no necesariamente para todas las distribuciones) aparecerá una nueva ventana de SDL en la que podrá completar el proceso de instalación del sistema operativo. Para recuperar el control de su mouse desde el terminal Qemu, es necesario presionar CTRL + ALT.

Para explicar: usando "kvm" (aunque el comando preciso que necesitará para su versión puede diferir), llamaremos a nuestro nuevo invitado "my-VM", designaremos el archivo my-disk.img como hda ("disco duro a ”), señale la ubicación de la ISO del sistema operativo (servidor Ubuntu 16.04, en este caso) y establezca 1024 MB como la memoria máxima asignada a la VM.

De forma predeterminada, KVM configurará su invitado para la red a nivel de usuario (como si se especificaran los parámetros -netdev user, id = user.0 -device e1000, netdev = user.0). Esto le proporcionará al huésped una dirección IP a través del servicio DHCP de KVM y acceso a su anfitrión, Internet y recursos basados ​​en LAN. Si bien la configuración predeterminada es simple, puede ser demasiado restrictiva para algunos escenarios, ya que a menudo existen algunas limitaciones de rendimiento y funciones.

Además de estos, puede usar indicadores de línea de comando para controlar varios parámetros de configuración de la máquina virtual, que incluyen:

  • -smp 2 proporciona dos procesadores ("smp" = multiprocesamiento simétrico).
  • El argumento -net (ejemplo: -net nic, model = virtio, macaddr = 52: 54: 00: 05: 11: 11) establece una conexión de red para su invitado.
  • Puede aprovisionar un puente de red utilizando algo como -net bridge, vlan = 0, br = br0, aunque esto requerirá una definición de -net coincidente en el host. Los dos están conectados a través de un parámetro especial "vlan".
  • -balloon virtio me permitirá expandir o reducir el tamaño de la memoria de un invitado sin tener que reiniciarlo.
  • También puede usar la marca -drive file = para definir dispositivos de almacenamiento de bloques adicionales. Añadiendo un valor para formato = (qcow2, por ejemplo).

The -M flag will assign a specific machine type hardware emulation. pc. For example, will provide a standard PC profile. For a complete list of available machine types, you can run kvm -M ?:

kvm -M ? Supported machines are: ubuntu Ubuntu 15.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-wily) pc-i440fx-wily Ubuntu 15.04 PC (i440FX + PIIX, 1996) (default) ubuntu Ubuntu 15.04 PC (i440FX + PIIX, 1996) (alias of pc-i440fx-vivid) pc-i440fx-vivid Ubuntu 15.04 PC (i440FX + PIIX, 1996) (default) pc-i440fx-utopic Ubuntu 14.10 PC (i440FX + PIIX, 1996) pc-i440fx-trusty Ubuntu 14.04 PC (i440FX + PIIX, 1996) pc Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-2.5) pc-i440fx-2.5 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.4 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.3 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.2 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.1 Standard PC (i440FX + PIIX, 1996) pc-i440fx-2.0 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.7 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.6 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.5 Standard PC (i440FX + PIIX, 1996) pc-i440fx-1.4 Standard PC (i440FX + PIIX, 1996) pc-1.3 Standard PC (i440FX + PIIX, 1996) pc-1.2 Standard PC (i440FX + PIIX, 1996) pc-1.1 Standard PC (i440FX + PIIX, 1996) pc-1.0 Standard PC (i440FX + PIIX, 1996) pc-0.15 Standard PC (i440FX + PIIX, 1996) pc-0.14 Standard PC (i440FX + PIIX, 1996) pc-0.13 Standard PC (i440FX + PIIX, 1996) pc-0.12 Standard PC (i440FX + PIIX, 1996) pc-0.11 Standard PC (i440FX + PIIX, 1996) pc-0.10 Standard PC (i440FX + PIIX, 1996) q35 Standard PC (Q35 + ICH9, 2009) (alias of pc-q35–2.5) pc-q35–2.5 Standard PC (Q35 + ICH9, 2009) pc-q35–2.4 Standard PC (Q35 + ICH9, 2009) pc-q35–2.3 Standard PC (Q35 + ICH9, 2009) pc-q35–2.2 Standard PC (Q35 + ICH9, 2009) pc-q35–2.1 Standard PC (Q35 + ICH9, 2009) pc-q35–2.0 Standard PC (Q35 + ICH9, 2009) pc-q35–1.7 Standard PC (Q35 + ICH9, 2009) pc-q35–1.6 Standard PC (Q35 + ICH9, 2009) pc-q35–1.5 Standard PC (Q35 + ICH9, 2009) pc-q35–1.4 Standard PC (Q35 + ICH9, 2009) isapc ISA-only PC none empty machine xenfv Xen Fully-virtualized PC xenpv Xen Para-virtualized PC

KVM Monitor

While working with QEMU, you can open a monitor console and interact with your clients in ways that might be difficult or even impossible using a regular headless server. You can launch the KVM Monitor by pressing CTRL+ALT, and then SHIFT+2, and a new console will open on your desktop. SHIFT+1 will close the console. You can also access the console from the command line using something like:

kvm -monitor stdio

You will probably NOT be able to launch the monitor as root (i.e., via sudo). Naturally, your version may require “qemu-system-x86_64” rather than kvm. This approach allows you to add command line arguments (like that -monitor which specified a console target). Consult man qemu-system-x86_64 for details on the kinds of operations the monitor allows.

This example (borrowed from en.wikibooks.org/wiki/QEMU/Monitor) will list all the block devices currently available to your system, and then point one of them to an ISO file you want to use:

(qemu) info block ide0-hd0: type=hd removable=0 file=/path/to/winxp.img ide0-hd1: type=hd removable=0 file=/path/to/pagefile.raw ide1-hd1: type=hd removable=0 file=/path/to/testing_data.img ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/sr0 ro=1 drv=host_device floppy0: type=floppy removable=1 locked=0 [not inserted] sd0: type=floppy removable=1 locked=0 [not inserted] (qemu) change ide1-cd0 /home/images/my.iso

Networking

By default, a KVM guest will receive an IP address within the 10.0.2.0/24 subnet, and have outgoing access (including SSH access) both to its host, and to the wider network beyond. By that same default however, it won’t be able to host services for network clients. If you need to open up incoming network connectivity, you’ll probably want to create a network bridge on your host that’s similar to the one we used for Xen in the previous chapter. As before, you will install bridge-utils on the host and, assuming you’re running a Debian-based system and you want your host to receive its IP from a network DHCP server, edit the /etc/network/interfaces to look something like this (on CentOS machines, edit files in the /etc/sysconfig/network-scripts/ directory):

auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0

On CentOS, you’ll need to create an ifcfg-br0 file in the /etc/sysconfig/network-scripts/ directory to look something like this:

DEVICE=br0 TYPE=Bridge BOOTPROTO=static DNS1=192.168.0.1 GATEWAY=192.168.0.1 IPADDR=192.168.0.100 NETMASK=255.255.255.0 ONBOOT=yes SEARCH=”example.com”

…And then add a line reading BRIDGE=br0 line to your primary network interface file (which will often be: /etc/sysconfig/network-scripts/ifcfg-eth0).

You will then stop and restart your network services (or reboot).

Looking for a solid introduction to Linux or AWS administration? Check out my Linux in Action and Learn Amazon Web Services in a Month of Lunches books and the Linux in Motion text-video hybrid course from Manning. Prefer your tech learning in video? I’ve got Linux administration courses at Pluralsight just waiting to be watched.