04/02/2021
Система виртуализации kvm, созданная и работающая на хостах Linux, с точки зрения управления сильно отличается от привычной для многих VMware vSphere. При работе с ней очень многие вещи приходится делать в консоли, особенно если это продуктовые сервера. Так и установка с нуля гостевых машин с нужной операционной системой требует определенных знаний и смекалки. При этом для виртуальных машин с разными типами ОС на них нужно знать свои нюансы, чтобы получить желаемый результат. Даже разные дистрибутивы Linux требуют дифиринцированный подход. Как запилить себе одну виртуалочку с CentOS Linux 7.9 и еще одну с Ubuntu Linux 20.04 на kvm хочется показать на реальных примерах.
Ранее у себя в блоге писал уже о системе виртуализации на базе kvm — Proxmox-VE. Это были статьи — «Импорт kvm виртуалок в Proxmox» и «Небольшие лайфхаки с Proxmox«. Да, Proxmox обладает отличным графическим веб интерфейсом, имея kvm под капотом. Но зачастую kvm применяется напрямую без лишней обвязки и требует знаний по работе с ним из командой строки Linux с использованием различных утилит управления и мониторинга. С учетом того, что актуальность использования kvm в современном IT мире довольно высокая, знание специфики работы с ним будет далеко не бесполезным для администраторов и программистов.
Установка CentOS
Для создания гостевых машин в среде kvm с нуля из командной строки будем использовать утилиту virt-install, а также osinfo-query. Если они еще не установлены в системе, делаем это, например в ОС Ubuntu, таким образом:
# apt install virt-install libosinfo-bin
Давайте посмотрим на варианты операционной системы CentOS, которые мы сможем установить на наш kvm с помощью команды osinfo-query.
# osinfo-query os | grep centos
centos-stream8 | CentOS Stream 8 | 8 | http://centos.org/centos-stream/8
centos5.0 | CentOS 5.0 | 5.0 | http://centos.org/centos/5.0
centos5.1 | CentOS 5.1 | 5.1 | http://centos.org/centos/5.1
centos5.10 | CentOS 5.10 | 5.10 | http://centos.org/centos/5.10
centos5.11 | CentOS 5.11 | 5.11 | http://centos.org/centos/5.11
centos5.2 | CentOS 5.2 | 5.2 | http://centos.org/centos/5.2
centos5.3 | CentOS 5.3 | 5.3 | http://centos.org/centos/5.3
centos5.4 | CentOS 5.4 | 5.4 | http://centos.org/centos/5.4
centos5.5 | CentOS 5.5 | 5.5 | http://centos.org/centos/5.5
centos5.6 | CentOS 5.6 | 5.6 | http://centos.org/centos/5.6
centos5.7 | CentOS 5.7 | 5.7 | http://centos.org/centos/5.7
centos5.8 | CentOS 5.8 | 5.8 | http://centos.org/centos/5.8
centos5.9 | CentOS 5.9 | 5.9 | http://centos.org/centos/5.9
centos6.0 | CentOS 6.0 | 6.0 | http://centos.org/centos/6.0
centos6.1 | CentOS 6.1 | 6.1 | http://centos.org/centos/6.1
centos6.10 | CentOS 6.10 | 6.10 | http://centos.org/centos/6.10
centos6.2 | CentOS 6.2 | 6.2 | http://centos.org/centos/6.2
centos6.3 | CentOS 6.3 | 6.3 | http://centos.org/centos/6.3
centos6.4 | CentOS 6.4 | 6.4 | http://centos.org/centos/6.4
centos6.5 | CentOS 6.5 | 6.5 | http://centos.org/centos/6.5
centos6.6 | CentOS 6.6 | 6.6 | http://centos.org/centos/6.6
centos6.7 | CentOS 6.7 | 6.7 | http://centos.org/centos/6.7
centos6.8 | CentOS 6.8 | 6.8 | http://centos.org/centos/6.8
centos6.9 | CentOS 6.9 | 6.9 | http://centos.org/centos/6.9
centos7.0 | CentOS 7 | 7 | http://centos.org/centos/7.0
centos8 | CentOS 8 | 8 | http://centos.org/centos/8
Так, мы хотим установить последнюю версию CentOS 7.x. Из доступных вариантов, как видно выше, мы имеем только centos7.0. Поэтому в команде virt-install параметр —os-variant будет установлен в значение centos7.0. Нужный дистрибутив операционной системы скачиваем с сайта https://www.centos.org/download/. В данном конкретном примере мы загружаем из Интернета образ CentOS-7-x86_64-Minimal-2009.iso. Его будет достаточно, чтобы получить виртуальную машину с работающей операционной системой. Теперь в консоли хоста kvm запустим команду virt-install с параметрами, указанными ниже в примере. Данная команда инициализирует создание виртуальной машины с 2 GB RAM, диском в 40 GB, сетевым интерфейсом в виртуальной сети default, а также возможностью подключения в шелл виртуалки через консоль.
# virt-install --virt-type kvm --name MyCentosVM --ram 2048 \
> --disk /var/lib/libvirt/images/mycentosvm.qcow2,size=40,format=qcow2 \
> --network network=default \
> --os-type=linux --os-variant=centos7.0 \
> --location=/install/CentOS-7-x86_64-Minimal-2009.iso \
> --graphics none \
> --console pty,target_type=serial \
> --extra-args 'console=ttyS0,115200n8 serial'
После того, как мы увидим запуск сервисов установки операционной системы, в консоли будет предложено указать необходимые параметры для персонализации ОС виртуальной машины.
Starting installer, one moment...
anaconda 21.48.22.159-1 for CentOS 7 started.
* installation log files are stored in /tmp during the installation
* shell is available on TTY2
* when reporting a bug add logs from /tmp as separate text/plain attachments
07:33:22 Not asking for VNC because we don't have a network
================================================================================
================================================================================
Installation
1) [x] Language settings 2) [!] Time settings
(English (United States)) (Timezone is not set.)
3) [!] Installation source 4) [!] Software selection
(Processing...) (Processing...)
5) [!] Installation Destination 6) [x] Kdump
(No disks selected) (Kdump is enabled)
7) [ ] Network configuration 8) [!] Root password
(Not connected) (Password is not set.)
9) [!] User creation
(No user will be created)
Please make your choice from above ['q' to quit | 'b' to begin installation |
'r' to refresh]:
[anaconda] 1:main* 2:shell 3:log 4:storage-lo> Switch tab: Alt+Tab | Help: F1
Когда все нужные параметры будут выставлены, можно будет запустить процесс автоматической инсталляции системы на виртуальную машину. Результатом работы команды virt-install станет создание гостевой машины с работающей операционной системой CentOS 7.x на борту.
Чтобы подключить к консоли вновь созданной виртуальной машины из командной строки хоста нам нужно выполнить следующую команду virsh console.
# virsh console MyCentosVM
Connected to domain MyCentosVM
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 5.10.10-1.el7.elrepo.x86_64 on an x86_64
mycentosvm login:
Введя логин и пароль, заданный при инсталляции ВМ, мы получим доступ в шелл операционной системы виртуалки. Для того, чтобы выйти из данной консоли, нужно нажать сочетание клавиш «Ctrl» и «]».
На данном этапе виртуальная машина с ОС CentOS 7.x создана и проинсталирована, а также может быть использована для дальнейшей настройки приложений на ней.
Установка Ubuntu
Процесс создания виртуальной машины на kvm с операционной системой Ubuntu в целом является аналогичным тому, который мы описали выше для ОС CentOS. Точно так же используется команды virt-install и osinfo-query. Однако сам процесс имеет небольшие отличия в силу специфики конкретного дистрибутива. О них будет написано далее.
Давайте так же определим доступные для установки на ВМ версии Ubunut Linux.
# osinfo-query os | grep ubuntu
ubuntu10.04 | Ubuntu 10.04 LTS | 10.04 | http://ubuntu.com/ubuntu/10.04
ubuntu10.10 | Ubuntu 10.10 | 10.10 | http://ubuntu.com/ubuntu/10.10
ubuntu11.04 | Ubuntu 11.04 | 11.04 | http://ubuntu.com/ubuntu/11.04
ubuntu11.10 | Ubuntu 11.10 | 11.10 | http://ubuntu.com/ubuntu/11.10
ubuntu12.04 | Ubuntu 12.04 LTS | 12.04 | http://ubuntu.com/ubuntu/12.04
ubuntu12.10 | Ubuntu 12.10 | 12.10 | http://ubuntu.com/ubuntu/12.10
ubuntu13.04 | Ubuntu 13.04 | 13.04 | http://ubuntu.com/ubuntu/13.04
ubuntu13.10 | Ubuntu 13.10 | 13.10 | http://ubuntu.com/ubuntu/13.10
ubuntu14.04 | Ubuntu 14.04 LTS | 14.04 | http://ubuntu.com/ubuntu/14.04
ubuntu14.10 | Ubuntu 14.10 | 14.10 | http://ubuntu.com/ubuntu/14.10
ubuntu15.04 | Ubuntu 15.04 | 15.04 | http://ubuntu.com/ubuntu/15.04
ubuntu15.10 | Ubuntu 15.10 | 15.10 | http://ubuntu.com/ubuntu/15.10
ubuntu16.04 | Ubuntu 16.04 | 16.04 | http://ubuntu.com/ubuntu/16.04
ubuntu16.10 | Ubuntu 16.10 | 16.10 | http://ubuntu.com/ubuntu/16.10
ubuntu17.04 | Ubuntu 17.04 | 17.04 | http://ubuntu.com/ubuntu/17.04
ubuntu17.10 | Ubuntu 17.10 | 17.10 | http://ubuntu.com/ubuntu/17.10
ubuntu18.04 | Ubuntu 18.04 LTS | 18.04 | http://ubuntu.com/ubuntu/18.04
ubuntu18.10 | Ubuntu 18.10 | 18.10 | http://ubuntu.com/ubuntu/18.10
ubuntu19.04 | Ubuntu 19.04 | 19.04 | http://ubuntu.com/ubuntu/19.04
ubuntu19.10 | Ubuntu 19.10 | 19.10 | http://ubuntu.com/ubuntu/19.10
ubuntu20.04 | Ubuntu 20.04 | 20.04 | http://ubuntu.com/ubuntu/20.04
ubuntu4.10 | Ubuntu 4.10 | 4.10 | http://ubuntu.com/ubuntu/4.10
ubuntu5.04 | Ubuntu 5.04 | 5.04 | http://ubuntu.com/ubuntu/5.04
ubuntu5.10 | Ubuntu 5.10 | 5.10 | http://ubuntu.com/ubuntu/5.10
ubuntu6.06 | Ubuntu 6.06 LTS | 6.06 | http://ubuntu.com/ubuntu/6.06
ubuntu6.10 | Ubuntu 6.10 | 6.10 | http://ubuntu.com/ubuntu/6.10
ubuntu7.04 | Ubuntu 7.04 | 7.04 | http://ubuntu.com/ubuntu/7.04
ubuntu7.10 | Ubuntu 7.10 | 7.10 | http://ubuntu.com/ubuntu/7.10
ubuntu8.04 | Ubuntu 8.04 LTS | 8.04 | http://ubuntu.com/ubuntu/8.04
ubuntu8.10 | Ubuntu 8.10 | 8.10 | http://ubuntu.com/ubuntu/8.10
ubuntu9.04 | Ubuntu 9.04 | 9.04 | http://ubuntu.com/ubuntu/9.04
ubuntu9.10 | Ubuntu 9.10 | 9.10 | http://ubuntu.com/ubuntu/9.10
В данном случае мы хотим использовать Ubuntu 20.04. Обычный инсталляционный live образ ISO, который используется в большинстве других случаев, для создания виртуалки в KVM мы использовать не сможем, так как получим сразу же ошибку о нехватке ряда файлов. Нужный нам образ называется legacy-server и может быть загружен по данной ссылке https://cdimage.ubuntu.com/ubuntu-legacy-server/releases/20.04/release/. После того, как скачаем нужный ISO образ, мы можем запустить команду virt-install.
# virt-install --virt-type kvm --name MyUbuntuVM --ram 2048 \
> --disk /var/lib/libvirt/images/myubuntuvm.qcow2,size=40,format=qcow2 \
> --network network=default \
> --os-type=linux --os-variant=ubuntu20.04 \
> --location=/install/ubuntu-20.04.1-legacy-server-amd64.iso \
> --graphics none \
> --console pty,target_type=serial \
> --extra-args 'console=ttyS0,115200n8 serial'
Процесс выполнения данной команды будет немного отличаться от того, который мы описали в разедел по установке CentOS, но в целом будет аналогичным любой установке ОС Ubuntu Linux на сервер. Из важного нюанса хотелось бы сказать, что попасть из командной строки хоста kvm в консоль вновь созданной виртуальной машины сразу после окончания работы команды virt install не получится. Для этого необходимо будет провести ряд манипуляций. При установке виртуальной машины нам нужно указать корректные сетевые настройки, чтобы на нее можно было зайти удаленно по SSH.
Выполнив удаленно подключение, редактируем конфигурационный файл — /etc/default/grub. В нем нужно найти строчку GRUB_CMDLINE_LINUX_DEFAULT и изменить ее значение на следующее.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0"
После того, как файл будет изменен, выполним следующую нижеуказанную команду.
# sudo update-grub
Когда команда будет выполнена, перезагрузим виртуалку, и в результате мы сможем обращаться напрямую в консоль с хоста kvm с помощью команды virsh console.
# virsh console MyUbuntuVM
Connected to domain MyUbuntuVM
Escape character is ^]
myubuntuvm login:
На этом вопрос с установкой с нуля в kvm виртуальной машины Ubuntu можно считать закрытым.
Резюме
Вопрос первоначального создания виртуальных машин в гипервизоре kvm частенько вызывает затруднения. Однако, если знать необходимые инструменты и специфику их работы, то данная операция не создаст проблем. При этом она может быть также комфортна, как и аналогичные действия в консоли vSphere. В этой статье постарался показать свой практический опыт в данном вопросе. Надюесь, что он окажется полезным моим читателям.