Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
kvm [2023/12/25 06:37] (текущий) – [Шаг 1 - Проверка сервера на поддержку технологии KVM] darkfire
Строка 1: Строка 1:
 +====== Настройка виртуализации при помощи KVM ======
  
 +{{htmlmetatags>
 +metatag-description=(Технология виртуализации KVM (Kernel-based Virtual Machine) позволяет использовать немодифицированные образы операционных систем.)
 +}}
 +
 +KVM (Kernel-based Virtual Machine) — это программное решение, обеспечивающее [[virtualizacija|виртуализацию]] в среде Linux с поддержкой аппаратной виртуализации. Домашняя страница проекта [[https://www.linux-kvm.org/page/Main_Page|Kernel Based Virtual Machine]].
 +
 +[[RHEL|RHEL/CentOS]] исключил из дистрибутива [[XEN]] и стал использовать KVM.
 +
 +
 +===== Шаг 1 - Проверка сервера на поддержку технологии KVM =====
 +
 +Для работы KVM необходима поддержка виртуализации вашим процессором. Это означает, что требуются расширения процессора Intel-­VT(Virtualization Technology) либо AMD SVM (Secure Virtual Machine). Чтобы убедиться, поддерживает ли процессор одно из них, выполните команду:
 +<code bash># egrep '(vmx|svm)' /proc/cpuinfo</code>Результат больше 0 подразумевает, что виртуализация поддерживается.
 +
 +
 +KVM позволяет виртуальным машинам использовать немодифицированные образы дисков QEMU, [[VMware]] и других, содержащие операционные системы. Каждая виртуальная машина имеет своё собственное виртуальное аппаратное обеспечение: сетевые карты, диск, видеокарту и т.д.
 +
 +Для проверки своего процессора можно использовать набор утилит cpu-checker, для установки введите в Debian, Ubuntu команду:
 +<file bash>
 +sudo apt install cpu-checker
 +</file>
 +И запустите утилиту kvm-ok
 +<file bash>
 +sudo kvm-ok
 +
 +INFO: Your CPU does not support KVM extensions
 +KVM acceleration can NOT be used
 +</file> Как вы видите, мой процессор не поддерживает виртуализацию KVM. Где же я нашел такой процессор в 2022 году, спросите вы? Все очень просто команду kvm-ok я запустил на виртуальном сервере ([[VPS]]), а не на выделенном сервере (dedicated) как требует технология виртуализации KVM. Ели вы уверены, что используете настоящий:-) физический сервер и видите подобную ошибку - проверьте настройки BIOS, возможно эта опция выключена там.
 +
 +===== Шаг 2 - Установка гипервизора =====
 +Подтвердив, что наша система может поддерживать виртуализацию KVM, установка гипервизора производится следующей командой:
 +<file bash>
 +sudo apt install -y qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager
 +</file>
 +После того, как установка будет завершена вам необходимо добавить своего пользователя в группу libvirt:
 +<file bash>
 +sudo gpasswd -a $USER libvirt
 +</file>
 +
 +===== Шаг 3 - Проверка демона libvirt-daemon =====
 +Проверка, что демон виртуализации – libvirt-daemon – работает:
 +<file bash>
 +sudo systemctl status libvirtd
 +</file>
 +Вы можете включить его автоматический запуск при загрузке, прописав:
 +<file bash>
 +sudo systemctl enable libvirtd
 +</file>
 +Проверка, загружены ли модули KVM:
 +<file bash>
 +lsmod | grep -i kvm
 +</file>
 +
 +===== Шаг 4 - Создание виртуальной машины =====
 +Узнаем параметр для сети. При установке KVM, было создано несколько сетевых бриджей, посмотрим их командой:
 +<file bash>
 +ip link
 +</file>
 +Затем перейдем в папку libvirt и скачаем, при помощи утилиты [[wget|wget]], образ операционной системы, например для Ubuntu 20 Server можно так:
 +<file bash>
 +cd /var/lib/libvirt/boot/
 +sudo wget -O /var/lib/libvirt/boot/ubuntu20.iso https://releases.ubuntu.com/20.04/ubuntu-20.04.3-live-server-amd64.iso
 +</file>
 +Перед установкой, нужно узнать корректное наименование операционной системы для KVM, для нужно установить дополнительный пакет libosinfo-bin и запустим её:
 +<file bash>
 +sudo apt install libosinfo-bin
 +osinfo-query os | grep Ubuntu
 +</file>
 +Пример команды для создания виртуальной машины с использованием образа Ubuntu 20 ISO:
 +<file bash>
 +sudo virt-install --name=ubuntu-vm --os-variant=ubuntu20.04 --vcpu=1 --ram=2048 --graphics vnc --cdrom=/var/lib/libvirt/boot/ubuntu20.iso  --network bridge:virbr0,model=virtio  --disk path=/var/lib/libvirt/images/ubuntu-vm.qcow2,size=10,bus=virtio,format=qcow2
 +</file>
 +Пояснение опций запуска установки виртуального сервера:
 +  * **–name** указывает имя виртуальной машины ubuntu-vm.
 +  * **–os-option** указывает семейство ОС или производную от VM.
 +  * **–vcpu** указывает на ядра процессора, в данном случае 1 ядро.
 +  * **–ram** указывает на объем ОЗУ, равный 2048 МБ.
 +  * Флаг**--cdrom** указывает на абсолютный путь ISO-образа или смонтированное устройство с диском.
 +  * **–network** указывает адаптер, который будет использоваться виртуальной машиной
 +  * **--disk path** указывает путь, где хранится образ виртуальной машины, его размер, тип шины и формат самого образа. 
 + 
 +Сразу после выполнения команды будет долгая установка системы, выбор дополнительных опций, создание пользователя системы, затем виртуальная машина сразу загрузится и будет доступна к авторизации и работе.
 +
 +===== Шаг 5 - Запуск, останов, администрирование виртуальной машины =====
 +  * Логи работы виртуальных машин под KVM хранятся здесь: /var/log/libvirt/qemu
 +  * Конфигурация виртуальных машин хранится в xml файлах в каталоге /etc/libvirt/qemu/<имя.xml>
 +
 +После установки посмотрим наличие нашей виртуальной машины командой
 +<file bash>
 +sudo virsh list
 +</file>
 +Также вы можете узнать параметры подключения по [[VNC|VNC]] к виртуальной машине с помощью команды:
 +<file bash>
 +sudo virsh vncdisplay
 +</file> 
 +Для запуска виртуальной машины можно использовать команду:
 +<file bash>
 +sudo virsh start имя_машины
 +</file>
 +Для остановки:
 +<file bash>
 +sudo virsh shutdown имя_машины
 +</file>
 +Для перевода в режим сна:
 +<file bash>
 +sudo virsh suspend имя_машины
 +</file>
 +Для перезагрузки:
 +<file bash>
 +sudo virsh reboot имя_машины
 +</file>
 +Сброс:
 +<file bash>
 +sudo virsh reset имя_машины
 +</file>
 +Для отключения виртуальной машины:
 +<file bash>
 +sudo virsh destroy имя_машины
 +</file>
 +Учитывайте, что после этой команды образ виртуальной машины в папке /var/lib/libvirt/images/ останется и будет занимать место, если вы уже отключили виртуальную машину, то данный образ в папке можно удалить вручную.
 +
 +====== Использование virsh ======
 +  * [[Virt-manager]] (Virtual Machine Manager) - приложение для управления виртуальными машинами
 +  * Подключение к удаленному хост- серверу:<file>
 +# virsh --connect qemu+ssh://darkfire@xxx.xxx.xxx.xxx/system
 +WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-otUBG2/pkcs11: Нет такого файла или каталога
 +darkfire@195.26.95.238's password: 
 +Добро пожаловать в virsh — интерактивный терминал виртуализации.
 +
 +Введите  «help» для получения справки по командам
 +       «quit» для выхода
 +
 +virsh #
 +</file>
 +  * Выведем список всех доступных виртуальных машин с помощью virsh:<file>
 +$ virsh 'list --all'
 +</file>
 +  * Автоматический запуск/останов виртуальных машин, при включении хостового сервера<file>
 +# virsh autostart TestServer
 +Domain TestServer marked as autostarted
 +
 +# virsh autostart --disable TestServer
 +Domain TestServer unmarked as autostarted
 +</file>
 +  * Как удалить virbr0 <file bash>
 +ip link
 +virsh net-destroy default
 +</file>
 +
 +Попытка перезапустить на PQ виртуальный сервер:
 +  - Перечитываем конфиг VPS<file>
 +virsh define /etc/libvirt/qemu/vm408166.xml
 +</file>
 +  - Запускаем <file>
 +virsh start vm408166
 +</file>
 +  - Проверяем <file>
 +# virsh list | grep vm408166
 + 254   vm408166                       работает
 +</file>
 +====== Backup KVM ======
 +  - При сохранении виртуальных машин KVM обязательно нужно сохранить XML файл с настройками. Обычно это файл находится /etc/libvirt/qemu, но проще и правильней выполнить команду virsh:<file>
 +# virsh dumpxml имя_машины > имя_машины.xml
 +</file>
 +  - Останавливаем нужную виртуальную машину<file>
 +virsh shutdown имя_машины
 +</file>Имена всех машин и их состояния можно вывести так<file>
 +virsh list --all
 +</file>
 +  - Сжимаем файл имя_машины.img при помощи [[lzop]].
 +  - Запускаем виртуальную машину<file>
 +virsh start имя_машины
 +</file>
 +  - Копируем файл имя_машины.img.lzo любым удобным образом на сервер бекапов.
 +====== libvirt и iptables ======
 +[[https://listman.redhat.com/archives/libvir-list/2010-June/msg00762.html|IPtables / firewall usage in libvirt]] - правила iptables определены в исходном коде libvirt 
 +
 +Чтобы расширить правила [[iptables|iptables]], подгружаемые libvirt, можно создать файл с нужными правилами и прописать путь к этом файлу в rc.local. Файлы запускаемые при помощи rc.local запускаются в последнюю очередь, после инициализации всех служб. Так как способ запуска при помощи rc.local считается устаревшим, проверьте чтобы этот способ запуска не был отключен в вашем дистрибутиве, например при помощи [[sysv-rc-conf]].
 +<file bash>
 +# nano /etc/rc.local
 +#!/bin/sh -e
 +
 +/etc/network/iptables_rules
 +exit 0
 +</file><file>
 +# nano /etc/network/iptables_rules
 +
 +#!/bin/sh
 +
 +IPT="/sbin/iptables"
 +IFACE_LOC="lo"
 +
 +
 +$IPT -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 +$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 +
 +$IPT -I INPUT 2 -i $IFACE_LOC -j ACCEPT
 +
 +#log
 +$IPT -A INPUT -m limit --limit 3/m --limit-burst 5  -j ULOG --ulog-prefix "IN_xxx: "
 +</file>
 +
 +<panel type="primary" title="Читайте также">
 +  * [[cheklist_nastrojka_vps_vds_vydelennogo_servera_linux]]
 +  * [[https://wiki.dieg.info/fdisk#kak_izmenit_razmer_diska_virtualnoj_mashiny_kvm_bez_poteri_informacii|Как изменить размер диска виртуальной машины KVM без потери информации]]
 +</panel>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!