GNU/Linux >> Tutoriales Linux >  >> Cent OS

Instalar y configurar KVM en el servidor CentOS 8

Esta guía paso a paso explica qué es KVM y cómo instalar y configurar KVM en el sistema operativo CentOS 8 Linux.

Esta guía se prueba oficialmente en la edición de servidor mínimo de CentOS 8. Sin embargo, también debería funcionar en RHEL 8 y sus clones como AlmaLinux 8 y Rocky Linux 8.

¿Qué es KVM?

KVM , abreviatura de K V basado en ernel M virtual achine, es un módulo de kernel de FreeBSD y Linux que permite que el kernel actúe como un hipervisor.

A partir de la versión 2.6.20 del kernel, KVM se fusiona con la línea principal del kernel de Linux.

Con KVM, puede configurar fácilmente un entorno de virtualización en una máquina Linux e implementar una amplia gama de sistemas operativos invitados, incluidos Linux, Windows, BSD, Mac OS y muchos.

Ahora veamos cómo instalar y configurar KVM en CentOS 8 Linux.

Requisitos

Antes de instalar KVM, primero asegúrese de que su sistema sea compatible con la virtualización de hardware. Hemos documentado algunas formas diferentes de identificar si un sistema Linux es compatible con la virtualización en la siguiente guía.

  • Cómo averiguar si una CPU es compatible con la tecnología de virtualización (VT)

Si su sistema es compatible con la virtualización de hardware, continúe con los siguientes pasos.

1. Instalar y configurar KVM en el servidor CentOS 8

A los efectos de esta guía, usaré el siguiente sistema:

servidor de virtualización KVM:

  • SO – Servidor mínimo CentOS 8 (sin GUI)
  • Dirección IP :192.168.225.53/24

Aunque se probó en CentOS 8, esta guía también debería funcionar bien en RHEL 8.

1.1. Instalar KVM en CentOS 8

Nota: Todos los comandos proporcionados a lo largo de este tutorial deben ejecutarse como root usuario. Si ha iniciado sesión como usuario normal, agregue sudo delante de todos los comandos que se dan a continuación.

Instale Kvm y todas las dependencias requeridas para configurar un entorno de virtualización en su servidor CentOS 8 usando el comando como root usuario:

# dnf install qemu-kvm libvirt virt-install

Aquí,

  • emu-kvm - Metapaquete QEMU para compatibilidad con KVM (es decir, virtualización completa de QEMU en hardware x86),
  • libvirt - programas para la biblioteca libvirt,
  • instalación virtual - programas para crear y clonar máquinas virtuales.

Una vez que KVM esté instalado, habilite e inicie libvertd servicio (si aún no se ha iniciado):

# systemctl enable libvirtd
# systemctl start libvirtd

También puede combinar ambos comandos y ejecutarlos como una sola línea como se muestra a continuación:

# systemctl enable --now libvirtd

Verifique el estado del servicio libvirtd con el comando:

# systemctl status libvirtd

Salida de muestra:

● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enable>
   Active: active (running) since Wed 2020-07-15 14:27:32 IST; 5s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 1097 (libvirtd)
    Tasks: 17 (limit: 32768)
   Memory: 57.0M
   CGroup: /system.slice/libvirtd.service
           └─1097 /usr/sbin/libvirtd

Jul 15 14:27:28 centos8.ostechnix.lan systemd[1]: Starting Virtualization daemon...
Jul 15 14:27:32 centos8.ostechnix.lan systemd[1]: Started Virtualization daemon.

¡El servicio libvertd está funcionando!

Verifique si los módulos KVM están cargados:

# lsmod | grep kvm

Salida de muestra:

kvm_intel             294912  0
kvm                   786432  1 kvm_intel
irqbypass              16384  1 kvm

¡Estupendo! Los módulos KVM están cargados. Vamos a crear un puente de red ahora.

1.2. Configure la red puente con KVM en CentOS

Una red en puente comparte la interfaz de red real de la computadora host con otras máquinas virtuales para conectarse a la red externa. Por lo tanto, cada VM puede vincularse directamente a cualquier IPv4 disponible o IPv6 direcciones, como una computadora física.

De forma predeterminada, KVM configura un puente virtual privado, de modo que todas las máquinas virtuales puedan comunicarse entre sí, dentro de la computadora host.

Proporciona su propia subred y DHCP para configurar la red del huésped y utiliza NAT para acceder a la red del host.

Eche un vistazo a la dirección IP de las interfaces virtuales predeterminadas de KVM usando ip comando:

# ip a

Salida de muestra:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.52/24 brd 192.168.225.255 scope global dynamic noprefixroute enp0s3
       valid_lft 42217sec preferred_lft 42217sec
    inet6 2409:4072:918:98cf:ad3b:b969:8ec8:f9c7/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::b404:4d52:8bee:18bf/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:5b:a4:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:5b:a4:cd brd ff:ff:ff:ff:ff:ff

Como puede ver, la red predeterminada de KVM virbr0 usa 192.168.122.1/24 Dirección IP. Todas las VM usarán una dirección IP en el 192.168.122.0/24 Se podrá acceder al rango de IP y al sistema operativo host en 192.168.122.1 .

Debería poder acceder al sistema operativo host (en 192.168.122.1 ) desde dentro del sistema operativo invitado y use scp para copiar archivos de un lado a otro.

Está bien si solo accede a las máquinas virtuales internas desde el propio host. Sin embargo, no puede acceder a las máquinas virtuales desde otros sistemas remotos en la red.

Porque usan un rango de IP diferente, es decir, 192.168.225.0/24 en mi caso. Para acceder a las máquinas virtuales desde otros hosts remotos, debemos configurar un puente público que se ejecute en la red del host y use cualquier servidor DHCP externo que esté en la red del host.

Para poner esto en términos simples, vamos a hacer que todas las máquinas virtuales usen la misma serie de IP que usa el sistema host.

Antes de configurar una red pública en puente, debemos deshabilitar Netfilter por razones de rendimiento y seguridad . Actualmente, Netfilter está habilitado en los puentes de forma predeterminada.

Para deshabilitar netfilter, cree un archivo llamado /etc/sysctl.d/bridge.conf :

# vi /etc/sysctl.d/bridge.conf

Agregue las siguientes líneas:

net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
net.bridge.bridge-nf-call-arptables=0

Guarde y cierre el archivo.

Luego crea otro archivo llamado /etc/udev/rules.d/99-bridge.rules :

# vi /etc/udev/rules.d/99-bridge.rules

Agregue la siguiente línea:

ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", RUN+="/sbin/sysctl -p /etc/sysctl.d/bridge.conf"

Esto establecerá las banderas necesarias para deshabilitar netfilter en puentes en el lugar apropiado en el inicio del sistema. Guarde y cierre el archivo. Reinicia tu sistema para que surtan efecto estos cambios.

A continuación, debemos deshabilitar la red predeterminada que KVM instaló por sí mismo.

Encuentre el nombre de las interfaces de red predeterminadas de KVM usando el comando "ip link":

# ip link

Salida de muestra:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:5b:a4:cd brd ff:ff:ff:ff:ff:ff
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:5b:a4:cd brd ff:ff:ff:ff:ff:ff

Como puede ver en el resultado anterior, las entradas virbr0 y virbr0-nic son las redes KVM.

Quitemos la red KVM predeterminada con el comando:

# virsh net-destroy default

Salida de muestra:

Network default destroyed

Anule la definición de la red predeterminada con el comando:

# virsh net-undefine default

Salida de muestra:

Network default has been undefined

Si los comandos anteriores no funcionan por algún motivo, puede usar estos comandos para deshabilitar y anular la definición de la red predeterminada de KVM:

# ip link delete virbr0 type bridge
# ip link delete virbr0-nic

Ahora ejecuta ip link nuevamente para verificar si el virbr0 y virbr0-nic las interfaces en realidad se eliminan:

# ip link

Salida de muestra:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff

Bueno, las redes predeterminadas de KVM se han ido.

Ahora, configuremos el puente público KVM para usarlo al crear una nueva VM.

Cree una nueva interfaz puente llamada br0 usando nmcli comando:

# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0

Establezca la dirección IP para la interfaz del puente:

# nmcli connection modify br0 ipv4.addresses 192.168.225.53/24 ipv4.method manual

Configure la puerta de enlace para la interfaz del puente:

# nmcli connection modify br0 ipv4.gateway 192.168.225.1

Establecer DNS para la interfaz del puente:

# nmcli connection modify br0 ipv4.dns 192.168.225.1

A continuación, debemos quitar una de sus tarjetas de interfaz de red y agregarla como esclava del puente.

Tenga en cuenta que si su servidor solo tiene una NIC y está accediendo al servidor a través de SSH, su conexión finalizará después de quitar la NIC. Le sugiero que realice los siguientes pasos en la consola de su servidor.

Por ejemplo, voy a agregar enp0s8 interfaz como esclavo de la interfaz del puente br0 .

Para eliminar la interfaz de red enp0s8 , ejecuta:

# nmcli connection del enp0s8

Reemplazar enp0s8 con su propia tarjeta de red.

Nota: No utilice tarjetas de interfaz de red inalámbrica para puentes. La mayoría de los entrelazados inalámbricos no admiten puentes. ¡Utilice siempre interfaces de red cableadas para una conectividad perfecta!

A continuación, agregue el enp0s8 al puente usando el comando:

# nmcli connection add type bridge-slave autoconnect yes con-name enp0s8 ifname enp0s8 master br0

Aquí, la interfaz de red del puente br0 está conectado a la interfaz de red del host enp0s8 . Reemplace los nombres de las interfaces de red anteriores que coincidan con su red.

Reinicie el administrador de red para que se apliquen los cambios:

# systemctl restart NetworkManager

Si es posible, es mejor reiniciar su sistema:

# reboot

Inicie sesión en su servidor y verifique si la dirección IP se ha asignado a la interfaz del puente:

$ ip a

Salida de muestra:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 08:00:27:b7:3a:84 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:41:91:4d brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:2a:be:53 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.53/24 brd 192.168.225.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 2409:4072:6084:198:df03:d9ed:62eb:df34/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::e8c8:e98b:7fef:5874/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Como puede ver en el resultado anterior, la interfaz de red en puente br0 tiene asignada la dirección IP 192.168.225.53 y el enp0s8 la entrada ahora tiene master br0 entrada. Significa que enp0s8 pertenece al puente.

También puedes usar bridge comando para mostrar el estado del puente:

# bridge link show br0
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100

Hemos creado con éxito una interfaz de puente y está activa. Tenemos que hacer una última cosa.

Deberíamos configurar KVM para usar esta interfaz de puente como interfaz predeterminada. Para hacerlo, crea un XML archivo llamado host-bridge.xml :

# vi host-bridge.xml

Agregue las siguientes líneas:

<network>
  <name>host-bridge</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

Ejecute los siguientes comandos para iniciar el puente recién creado y convertirlo en el puente predeterminado para las máquinas virtuales:

# virsh net-define host-bridge.xml
# virsh net-start host-bridge
# virsh net-autostart host-bridge

Verifique si el puente está activo y comenzó usando el comando:

# virsh net-list --all

Salida de muestra:

Name          State    Autostart   Persistent
------------------------------------------------
 host-bridge   active   yes         yes

¡Felicidades! Hemos instalado y configurado con éxito KVM en el servidor sin cabeza CentOS 8.

2. Cree y administre máquinas invitadas KVM

Podemos crear y administrar máquinas virtuales desde la línea de comandos o utilizando cualquier herramienta de administración de KVM como Cockpit y Virt-manager. Consulte las siguientes guías para obtener más detalles.

  • Cómo administrar máquinas virtuales KVM con el programa Virsh
  • Administre máquinas virtuales KVM mediante la consola web Cockpit
  • Cómo administrar máquinas virtuales KVM con Virt-Manager

3. Habilite el acceso a la consola Virsh para máquinas virtuales

Después de crear los invitados KVM, puedo acceder a ellos a través de SSH, cliente VNC, Virt-viewer, Virt-manager y la consola web Cockpit, etc. Pero no pude acceder a ellos usando virsh console dominio. Para acceder a los invitados de KVM usando la "consola virsh", consulte la siguiente guía:

  • Cómo habilitar el acceso a la consola Virsh para invitados KVM

Otras guías relacionadas con KVM en este blog

  • Instalar y configurar KVM en Ubuntu 20.04 servidor sin cabeza
  • Instalar y configurar KVM en OpenSUSE Tumbleweed
  • Cree una máquina virtual KVM usando la imagen Qcow2 en Linux
  • Cómo migrar máquinas virtuales de Virtualbox a máquinas virtuales KVM en Linux
  • Habilite la compatibilidad con UEFI para máquinas virtuales KVM en Linux
  • Cómo habilitar la virtualización anidada en KVM en Linux
  • Muestre las estadísticas de los sistemas de virtualización con Virt-top en Linux
  • Cómo encontrar la dirección IP de una máquina virtual KVM
  • Cómo cambiar el nombre de la máquina virtual invitada KVM
  • Acceda y modifique imágenes de disco de máquina virtual con Libguestfs
  • Cree rápidamente imágenes de máquinas virtuales con Virt-builder
  • Cómo rescatar máquinas virtuales con Virt-rescue
  • Cómo ampliar el tamaño del disco de la máquina virtual KVM en Linux
  • Configurar una carpeta compartida entre el host y el invitado de KVM
  • Cómo cambiar la ubicación del grupo de almacenamiento predeterminado de KVM Libvirt
  • [Resuelto] No se puede acceder al archivo de almacenamiento, Permiso denegado Error en KVM Libvirt
  • Cómo exportar e importar máquinas virtuales KVM en Linux

Conclusión

En esta guía, discutimos cómo instalar y configurar KVM en la edición del servidor CentOS 8.

También vimos cómo crear y administrar máquinas virtuales KVM desde la línea de comandos usando virsh herramienta y usando herramientas GUI llamadas Cockpit y Virt-manager.

Finalmente, vimos cómo habilitar el acceso a la consola virsh para máquinas virtuales KVM.

En esta etapa, debería tener un entorno de virtualización completamente funcional en su servidor CentOS 8.


Cent OS
  1. Instalar y configurar HAProxy en RHEL 8 / CentOS 8 Linux

  2. Cómo instalar y configurar VNC en CentOS 7

  3. Instalar y configurar el servidor FTP en CentOS 7 / RHEL 7 – (vsftpfd)

  4. Cómo instalar y configurar Gitlab en CentOS 8

  5. Cómo instalar y configurar Postgres 13 en Centos 8

Cómo instalar y configurar Zimbra Multi Server en CentOS 7

Cómo instalar y configurar el servidor VNC en CentOS 7 / RHEL 7

Instale el servidor PXE y configure el cliente PXE en CentOS 7

Instalar y configurar Check_MK Server en CentOS 7

Cómo instalar y configurar Memcached en CentOS 8

Cómo instalar y configurar el servidor DHCP en Centos 8