Поиск по сайту:

Установите и настройте KVM в Ubuntu 20.04 LTS

В этом пошаговом руководстве объясняется, что такое KVM, как установить и настроить KVM на сервере Ubuntu 20.04, а также как создавать гостевые машины KVM и управлять ими с помощью программы Virsh.

Что такое КВМ?

KVM, сокращение от Kвиртуальнаявиртуальная машинана базе ядра, представляет собой модуль ядра FreeBSD и Linux, который позволяет ядро действует как гипервизор. Начиная с версии ядра 2.6.20, KVM объединен с основной веткой ядра Linux.

Используя KVM, вы можете легко настроить среду виртуализации на машине с Linux и разместить на ней широкий спектр гостевых операционных систем, включая Linux, Windows, BSD, Mac OS и многие другие.

В этом руководстве мы рассмотрим, как установить и настроить KVM на безголовом сервере Ubuntu 20.04. А также мы увидим, как создавать гостевые машины KVM и управлять ими с помощью утилиты командной строки Virsh.

Предварительные условия

Перед установкой KVM сначала убедитесь, что процессор вашей системы поддерживает аппаратную виртуализацию. В следующем руководстве мы задокументировали несколько различных способов определить, поддерживает ли система Linux виртуализацию.

  • Как узнать, поддерживает ли процессор технологию виртуализации (VT)

Если ваша система поддерживает аппаратную виртуализацию, продолжите следующие шаги.

1. Установите и настройте KVM в Ubuntu 20.04 LTS.

Для целей данного руководства я буду использовать следующие системы.

Сервер виртуализации KVM:

  • ОС – минимальный сервер Ubuntu 20.04 LTS (без графического интерфейса)
  • IP-адрес: 192.168.225.52/24

Удаленный клиент:

  • ОС – Ubuntu 20.04 GNOME Desktop

Сначала давайте установим KVM на сервер Ubuntu.

1.1. Установите KVM в Ubuntu 20.04 LTS

Установите Kvm и все необходимые зависимости для настройки среды виртуализации на вашем сервере Ubuntu 20.04 LTS, используя команду:

sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system virtinst bridge-utils

Здесь,

  • qemu – универсальный эмулятор машины и виртуализатор.
  • qemu-kvm — метапакет QEMU для поддержки KVM (т. е. полная виртуализация QEMU на оборудовании x86),
  • libvirt-clients — программы для библиотеки libvirt,
  • libvirt-daemon-system — файлы конфигурации демона Libvirt,
  • virtinst — программы для создания и клонирования виртуальных машин,
  • bridge-utils — утилиты для настройки Ethernet-моста Linux.

После установки KVM запустите службу libvertd (если она еще не запущена):

sudo systemctl enable libvirtd
sudo systemctl start libvirtd

Проверьте статус службы libvirtd с помощью команды:

systemctl status libvirtd

Пример вывода:

● libvirtd.service - Virtualization daemon
     Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-07-04 08:13:41 UTC; 7min ago
TriggeredBy: ● libvirtd-ro.socket
             ● libvirtd-admin.socket
             ● libvirtd.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 4492 (libvirtd)
      Tasks: 19 (limit: 32768)
     Memory: 12.9M
     CGroup: /system.slice/libvirtd.service
             ├─4492 /usr/sbin/libvirtd
             ├─4641 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --l>
             └─4642 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --l>

Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: compile time options: IPv6 GNU-getopt DBus i18n>
Jul 04 08:13:42 ubuntuserver dnsmasq-dhcp[4641]: DHCP, IP range 192.168.122.2 -- 192.168.12>
Jul 04 08:13:42 ubuntuserver dnsmasq-dhcp[4641]: DHCP, sockets bound exclusively to interfa>
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: reading /etc/resolv.conf
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: using nameserver 127.0.0.53#53
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: read /etc/hosts - 7 addresses
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: read /var/lib/libvirt/dnsmasq/default.addnhosts>
Jul 04 08:13:42 ubuntuserver dnsmasq-dhcp[4641]: read /var/lib/libvirt/dnsmasq/default.host>
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: reading /etc/resolv.conf
Jul 04 08:13:42 ubuntuserver dnsmasq[4641]: using nameserver 127.0.0.53#53

Итак, служба libvertd включена и запущена! Давайте теперь сделаем остальную часть конфигурации.

1.2. Настройка сети Bridge с KVM в Ubuntu

Мостовая сеть использует реальный сетевой интерфейс хост-компьютера совместно с другими виртуальными машинами для подключения к внешней сети. Поэтому каждая виртуальная машина может напрямую привязываться к любому доступному адресу IPv4 или IPv6, как физический компьютер.

По умолчанию KVM настраивает частный виртуальный мост, чтобы все виртуальные машины могли взаимодействовать друг с другом внутри главного компьютера. Он предоставляет собственную подсеть и DHCP для настройки гостевой сети и использует NAT для доступа к сети хоста.

Посмотрите IP-адрес виртуальных интерфейсов KVM по умолчанию с помощью команды «ip»:

ip a

Пример вывода:

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:8a:52:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.52/24 brd 192.168.225.255 scope global dynamic enp0s3
       valid_lft 39559sec preferred_lft 39559sec
    inet6 2409:4072:6c0f:431d:a00:27ff:fe8a:5294/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe8a:5294/64 scope link 
       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:10:7c:c1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.60/24 brd 192.168.225.255 scope global dynamic enp0s8
       valid_lft 39559sec preferred_lft 39559sec
    inet6 2409:4072:6c0f:431d:a00:27ff:fe10:7cc1/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe10:7cc1/64 scope link 
       valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5d:61:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.51/24 brd 192.168.225.255 scope global dynamic enp0s9
       valid_lft 39559sec preferred_lft 39559sec
    inet6 2409:4072:6c0f:431d:a00:27ff:fe5d:6128/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5d:6128/64 scope link 
       valid_lft forever preferred_lft forever
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:f1:98:9e 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:f1:98:9e brd ff:ff:ff:ff:ff:ff

IP-адрес виртуального интерфейса KVM по умолчанию

Как видите, сеть KVM по умолчанию virbr0 использует IP-адрес 192.168.122.1/24. Все виртуальные машины будут использовать IP-адрес в диапазоне IP 192.168.122.0/24, а операционная система хоста будет доступна по адресу 192.168.122.1. У вас должна быть возможность подключиться по ssh к хостовой ОС (по адресу 192.168.122.1) изнутри гостевой ОС и использовать scp для копирования файлов туда и обратно.

Это нормально, если вы получаете доступ к виртуальным машинам внутри самого хоста. Однако мы не можем получить доступ к виртуальным машинам из других удаленных систем в сети.

Потому что они используют другой диапазон IP-адресов, например 192.168.225.0/24 в моем случае. Чтобы получить доступ к виртуальным машинам с других удаленных хостов, мы должны настроить общедоступный мост, который работает в хост-сети и использует любой внешний DHCP-сервер, находящийся в хост-сети.

Проще говоря, мы собираемся заставить все виртуальные машины использовать ту же серию IP-адресов, что и хост-система.

Перед настройкой общедоступной мостовой сети нам следует отключить Netfilter по соображениям производительности и безопасности. Netfilter в настоящее время включен на мостах по умолчанию.

Чтобы отключить сетевой фильтр, создайте файл с именем /etc/sysctl.d/bridge.conf:

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

Добавьте следующие строки:

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

Сохраните и закройте файл.

Затем создайте еще один файл с именем /etc/udev/rules.d/99-bridge.rules:

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

Добавьте следующую строку:

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

Это позволит установить необходимые флаги для отключения сетевого фильтра на мостах в соответствующем месте при запуске системы. Сохраните и закройте файл. Перезагрузите систему, чтобы изменения вступили в силу.

Далее нам следует отключить сеть по умолчанию, которую KVM установил для себя.

Найдите имена сетевых интерфейсов KVM по умолчанию с помощью команды «ip link»:

ip link

Пример вывода:

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:8a:52:94 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:10:7c:c1 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:5d:61:28 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:1f:a2:e7 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:1f:a2:e7 brd ff:ff:ff:ff:ff:ff

Просмотр сетевых интерфейсов KVM по умолчанию

Как вы видите в приведенном выше выводе, записи «virbr0» и «virbr0-nic» — это сети KVM.

Давайте удалим сеть KVM по умолчанию с помощью команды:

virsh net-destroy default

Пример вывода:

Network default destroyed

Отмените определение сети по умолчанию с помощью команды:

virsh net-undefine default

Пример вывода:

Network default has been undefined

удалить сетевые интерфейсы KVM по умолчанию

Если приведенные выше команды по какой-либо причине не работают, вы можете использовать эти команды, чтобы отключить и отменить определение сети KVM по умолчанию:

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

Теперь снова запустите «ip link», чтобы проверить, действительно ли удалены интерфейсы virbr0 и virbr0-nic:

$ ip link
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:8a:52:94 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:10:7c:c1 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:5d:61:28 brd ff:ff:ff:ff:ff:ff

Видеть? Сети KVM по умолчанию исчезли.

Теперь давайте настроим общедоступный мост KVM, который будет использоваться при создании новой виртуальной машины.

Примечание:

Не используйте карты беспроводного сетевого интерфейса для мостов. Большинство беспроводных интерлейсов не поддерживают мостовое соединение. Всегда используйте проводные сетевые интерфейсы для бесперебойного подключения!

Чтобы создать сетевой мост на хосте, отредактируйте файл /etc/netplan/00-installer-config.yaml и добавьте сведения о мосте.

Вот содержимое файла 00-installer-config.yaml по умолчанию на моем сервере Ubuntu 20.04 LTS.

$ cat /etc/netplan/00-installer-config.yaml
This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
    enp0s8:
      dhcp4: true
    enp0s9:
      dhcp4: true
  version: 2

Как видите, на моем сервере Ubuntu есть три проводных сетевых интерфейса, а именно enp0s3, enp0s8 и enp0s9.

Прежде чем редактировать этот файл, создайте резервную копию существующего файла /etc/netplan/00-installer-config.yaml:

sudo cp /etc/netplan/00-installer-config.yaml{,.backup}

Затем отредактируйте файл конфигурации по умолчанию, используя ваш любимый редактор:

sudo vi /etc/netplan/00-installer-config.yaml

Добавьте/измените его, как показано ниже:

This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: false
      dhcp6: false
    enp0s8:
      dhcp4: false
      dhcp6: false
    enp0s9:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [ enp0s3 ]
      addresses: [192.168.225.52/24]
      gateway4: 192.168.225.1
      mtu: 1500
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no
  version: 2

создать сетевой мост в Ubuntu

Здесь сетевой интерфейс моста «br0» подключен к сетевому интерфейсу хоста «enp0s3». IP-адрес br0 — 192.168.225.52. Шлюз — 192.168.225.1. Я использую DNS-серверы Google (8.8.8.8 и 8.8.4.4) для подключения к Интернету. Убедитесь, что отступы пробелов точно такие же, как указано выше. Если отступы строк неправильные, мостовой сетевой интерфейс не активируется. Замените приведенные выше значения на те, которые соответствуют вашей сети.

После изменения файла конфигурации сети сохраните и закройте его. Примените изменения, выполнив следующую команду:

sudo netplan --debug  apply

Теперь проверьте, присвоен ли IP-адрес интерфейсу моста:

ip a

Пример вывода:

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 master br0 state UP group default qlen 1000
    link/ether 08:00:27:8a:52:94 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:10:7c:c1 brd ff:ff:ff:ff:ff:ff
    inet6 2409:4072:48b:ab02:a00:27ff:fe10:7cc1/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe10:7cc1/64 scope link 
       valid_lft forever preferred_lft forever
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:5d:61:28 brd ff:ff:ff:ff:ff:ff
    inet6 2409:4072:48b:ab02:a00:27ff:fe5d:6128/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5d:6128/64 scope link 
       valid_lft forever preferred_lft forever
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:8a:52:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.225.52/24 brd 192.168.225.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe8a:5294/64 scope link 
       valid_lft forever preferred_lft foreve

проверьте IP-адрес сети моста KVM

Как вы видите в приведенном выше выводе, мостовому сетевому интерфейсу br0 присвоен IP-адрес 192.168.225.52, а запись enp0s3 теперь имеет запись «master br0». Это означает, что enp0s3 принадлежит мосту.

Вы также можете использовать команду "brctl", чтобы показать состояние моста:

brctl show br0

Пример вывода:

bridge name    bridge id       STP enabled interfaces
br0     8000.0800278a5294   yes     enp0s3

Теперь нам нужно настроить KVM для использования этого моста. Для этого создайте XML-файл с именем host-bridge.xml:

vi host-bridge.xml

Добавьте следующие строки:

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

Выполните следующие команды, чтобы запустить вновь созданный мост и сделать его мостом по умолчанию для виртуальных машин:

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

запустить хост-мост KVM

Чтобы проверить, активен ли мост и запущен ли он, выполните:

virsh net-list --all

Пример вывода:

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

проверить состояние хост-моста KVM

Поздравляем! Мы успешно настроили KVM-мост, и теперь он активен.

Связанное чтение:

  • Установка и настройка KVM на сервере CentOS 8
  • Установка и настройка KVM в OpenSUSE Tumbleweed

2. Создавайте виртуальные машины KVM и управляйте ими с помощью Virsh.

Для управления виртуальными машинами мы используем утилиту командной строки virsh. Программа virsh используется для создания, просмотра списка, приостановки, перезапуска, завершения работы и удаления виртуальных машин из командной строки.

По умолчанию файлы виртуальной машины и другие связанные файлы хранятся в папке /var/lib/libvirt/ . Путь по умолчанию для хранения ISO-образов — /var/lib/libvirt/boot/. Конечно, мы можем изменить эти местоположения при установке новой виртуальной машины.

2.1. Список всех виртуальных машин

Сначала давайте проверим, существуют ли виртуальные машины.

Чтобы просмотреть список всех доступных виртуальных машин, запустите:

sudo virsh list --all

Пример вывода:

Получение списка виртуальных машин с помощью virsh

Как видите, существующих виртуальных машин нет.

2.2. Создание виртуальных машин KVM

Давайте создадим виртуальную машину Ubuntu 18.04 с 2 ГБ ОЗУ, 1 ядром ЦП и жестким диском 10 ГБ. Для этого запустите:

sudo virt-install --name Ubuntu-18.04 --ram=2048 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/ubuntu-18.04-vm1,size=10 --cdrom /home/ostechnix/ubuntu18.iso --network bridge=br0 --graphics vnc

Давайте разберем приведенную выше команду и посмотрим, что делает каждая опция.

  • --name Ubuntu-18.04: имя виртуальной машины.
  • --ram=2048 : выделяет виртуальной машине 2 ГБ ОЗУ.
  • --vcpus=1 : указывает количество ядер ЦП в виртуальной машине.
  • --cpu хост : оптимизирует свойства ЦП для виртуальной машины, предоставляя гостю конфигурацию ЦП хоста.
  • --hvm : запросите полную виртуализацию оборудования.
  • --disk path=/var/lib/libvirt/images/ubuntu-18.04-vm1,size=10 : место для сохранения жесткого диска виртуальной машины и его размера. В данном случае я выделил размер жесткого диска 10 ГБ.
  • --cdrom /home/ostechnix/ubuntu18.iso : место, где находится фактический ISO-образ установщика Ubuntu.
  • --network Bridge=br0 : указать виртуальной машине использовать сеть-мост. Если вы не настроили мостовую сеть, игнорируйте этот параметр.
  • --graphics vnc : разрешает доступ VNC к виртуальной машине с удаленного клиента.

Пример вывода приведенной выше команды будет:

WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING No console to launch for the guest, defaulting to --wait -1

Starting install...
Allocating 'ubuntu-18.04-vm1'                                                                                                                      |  10 GB  00:00:06     
Domain installation still in progress.
Waiting for installation to complete.

Это сообщение будет отображаться до тех пор, пока вы не подключитесь к виртуальной машине из удаленной системы через любое приложение VNC и не завершите установку ОС.

Поскольку наша хост-система KVM (сервер Ubuntu) не имеет графического интерфейса, мы не можем продолжить установку гостевой ОС. Итак, я собираюсь использовать запасную машину с графическим интерфейсом для завершения установки гостевой ОС с помощью клиента VNC.

На этом мы закончили с сервером Ubuntu. Следующие шаги необходимо выполнить в клиентской системе.

2.3. Доступ к виртуальным машинам из удаленных систем через клиент VNC

Перейдите к удаленным системам с графической средой рабочего стола и установите любое клиентское приложение VNC, если оно еще не установлено. У меня есть рабочий стол Ubuntu с установленным клиентом удаленного рабочего стола Remmina.

SSH в хост-систему KVM:

ssh ostechnix@192.168.225.52

Здесь,

  • ostechnix — имя пользователя на хосте KVM (сервер Ubuntu 20.04).
  • 192.168.225.52 — IP-адрес хоста KVM.

Найдите порт VNC, используемый работающей виртуальной машиной, с помощью команды:

sudo virsh dumpxml Ubuntu-18.04 | grep vnc

Замените «Ubuntu-18.04» на имя вашей виртуальной машины.

Пример вывода:

<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>

Номер порта VNC — 5900.

Введите следующую команду переадресации портов SSH со своего терминала:

ssh ostechnix@192.168.225.52 -L 5900:127.0.0.1:5900

Запустите клиентское приложение VNC и выберите протокол «VNC», затем введите localhost:5900 в адресной строке и, наконец, нажмите ENTER:

Подключайтесь к удаленным виртуальным машинам с помощью клиента удаленного рабочего стола Remmina.

Приложение VNC теперь покажет вам окно предполагаемой установки ОС.

Доступ к виртуальным машинам из удаленных систем через клиент VNC

Просто продолжайте установку гостевой ОС. После завершения установки закройте окно приложения VNC.

2.4. Получение списка работающих виртуальных машин

Запустите команду «virt list», чтобы увидеть список запущенных виртуальных машин:

sudo virsh list

Пример вывода:

 Id   Name           State
------------------------------
 2    Ubuntu-18.04   running

Как видите, виртуальная машина Ubuntu 18.04 в настоящее время работает, и ее идентификатор равен 2.

2.5. Запустить виртуальные машины

Чтобы запустить виртуальную машину, запустите:

sudo virsh start Ubuntu-18.04

Вы также можете использовать идентификатор виртуальной машины для ее запуска:

sudo virsh start 2

2.6. Перезагрузите виртуальные машины

Чтобы перезапустить работающую виртуальную машину, выполните:

sudo virsh reboot Ubuntu-18.04

Или,

sudo reboot 2

2.7. Приостановить виртуальные машины

Чтобы приостановить работающую виртуальную машину, выполните:

sudo suspend Ubuntu-18.04

Или,

sudo suspend 2

2.8. Возобновить виртуальные машины

Чтобы возобновить приостановленную виртуальную машину, выполните:

sudo virsh resume Ubuntu-18.04

Или,

sudo resume 2

2.9. Выключение виртуальных машин

Чтобы выключить работающую виртуальную машину, выполните:

sudo virsh shutdown Ubuntu-18.04

Или,

sudo shutdown 2

2.10. Удаление виртуальных машин

Чтобы полностью удалить виртуальную машину, выполните:

sudo virsh undefine Ubuntu-18.04
sudo virsh destroy Ubuntu-18.04

Вирш имеет множество команд и опций. Чтобы узнать их все, обратитесь к разделу помощи virsh:

virsh --help

3. Управляйте гостями KVM графически

Запомнить все команды virsh практически невозможно. Если вы начинающий администратор Linux, вам может быть сложно выполнять все операции управления Kvm из командной строки. Не беспокойся! Существует несколько веб-инструментов для графического управления гостевыми машинами KVM. В следующих руководствах подробно объясняется, как управлять гостями Kvm с помощью Cockpit и Virt-manager.

  • Управление виртуальными машинами KVM с помощью веб-консоли Cockpit
  • Как управлять виртуальными машинами KVM с помощью Virt-Manager

4. Включите доступ к консоли Virsh для виртуальных машин.

После создания гостей KVM я могу получить к ним доступ через SSH, клиент VNC, Virt-viewer, Virt-manager, веб-консоль Cockpit и т. д. Но я не смог получить к ним доступ с помощью команды «virsh console». Чтобы получить доступ к гостям KVM с помощью «консоли virsh», обратитесь к следующему руководству:

  • Как включить доступ к консоли Virsh для гостей KVM
Другие руководства, связанные с KVM
  • Создание виртуальной машины KVM с использованием образа Qcow2 в Linux
  • Как перенести виртуальные машины Virtualbox в виртуальные машины KVM в Linux
  • Включить поддержку UEFI для виртуальных машин KVM в Linux
  • Как включить вложенную виртуализацию в KVM в Linux
  • Отображение статистики систем виртуализации с помощью Virt-top в Linux
  • Как узнать IP-адрес виртуальной машины KVM
  • Как переименовать гостевую виртуальную машину KVM
  • Доступ к образам дисков виртуальных машин и их изменение с помощью Libguestfs
  • Быстро создавайте образы виртуальных машин с помощью Virt-builder
  • Как спасти виртуальные машины с помощью Virt-Rescue
  • Как увеличить размер диска виртуальной машины KVM в Linux
  • Настройка общей папки между хостом и гостем KVM
  • Как изменить расположение пула хранения данных KVM Libvirt по умолчанию
  • [Решено] Невозможно получить доступ к файлу хранилища, в разрешении отказано. Ошибка в KVM Libvirt
  • Как экспортировать и импортировать виртуальные машины KVM в Linux

Заключение

В этом руководстве мы обсудили, как установить и настроить KVM в серверной версии Ubuntu 20.04 LTS.

Мы также рассмотрели, как создавать виртуальные машины KVM и управлять ими из командной строки с помощью инструмента virsh и инструментов с графическим интерфейсом Cockpit и Virt-manager.

Наконец, мы увидели, как включить доступ к консоли virsh для виртуальных машин KVM. На этом этапе у вас должна быть полностью работающая среда виртуализации на вашем сервере Ubuntu 20.04.

Ресурс:

  • Веб-сайт KVM

Статьи по данной тематике