AWS обяви преминаване от Xen към KVM. И така, какво е KVM?

Обвързано в съобщение на AWS за нов тип екземпляр от висок клас EC2 (C5) е силно предположение, че гигантският изчислителен гигант на Amazon е започнал да измества своите стотици хиляди физически сървъри от хипервизора с отворен код Xen, който ги изпълнява до сега, към алтернативата с отворен код, KVM.

Независимо дали сте вложили своята кариера и / или ипотека в къщи дълбоко в бъдещето на Xen или никога не сте знаели, че тя съществува, може да ви е интересно да научите повече за KVM. И така, ето едно общо въведение, адаптирано от моята книга „Научете се за виртуализация на Linux и висока наличност“: подгответе се за изпит за сертифициране LPIC-3 304.

Нуждаете се от някакъв по-основен фон на Linux сървъри или AWS? Моите Linux в действие и Научете Amazon Web Services за месец обяди книгите от Manning може да помогнат, заедно с моите курсове за администриране на Linux сървъри в Pluralsight. Има и хибриден курс, наречен Linux in Motion, който се състои от повече от два часа видео и около 40% от текста на Linux в действие.

KVM

Подобно на Xen, KVM (базирана на ядрото виртуална машина) е технология на хипервизор с отворен код за виртуализиране на изчислителна инфраструктура, работеща на хардуер, съвместим с x86. Също като Xen, KVM има както активна потребителска общност, така и значителни корпоративни внедрявания.

KVM хост всъщност работи на ядрото на Linux заедно с два модула на ядрото KVM (модулът kvm.ko и kvm-intel.ko или kvm-amd.ko). Чрез тясната си интеграция на ядрото - включително I / O свързаността с блока на ядрото и мрежовите драйвери, предоставени от Virtio - KVM може да предложи на своите гости по-безпроблемен достъп до всички сложни хардуерни и мрежови профили, които могат да срещнат.

Разширенията за хардуерна виртуализация, вградени в съвременния дизайн на процесора и необходими за разгръщане на KVM, означават, че гостите на KVM веднага могат да получат безопасен достъп само до тези хардуерни ресурси, от които се нуждаят, без да се притеснявате за изтичане на по-голямата система.

Къде точно се вписва QEMU с всичко това? Освен че може да действа като хипервизор, силата на QEMU е и като емулатор. KVM, в ролята си на виртуализация на хипервизор, може да се възползва от възможностите за емулация на QEMU, за да допълни собствените си функции за хардуерно ускорение, представяйки на своите гости емулиран чипсет и PCI шина. Цялото, както се казва, може да бъде по-голямо от сумата на неговите части.

Голяма част от функционалността за управление на KVM често се предоставя от Libvirt. Следователно, понякога може да поискате да се обърнете към подробната информация за свързаните с KVM функции като мрежи, съхранение и оформления на файловата система, която се намира в петата глава на книгата Teach Yourself Linux за виртуализация и висока наличност („Libvirt и сродни инструменти“) .

Инсталация

Преди всичко друго ще трябва да се уверите, че физическата машина, която планирате да използвате като KVM хост, поддържа хардуерна виртуализация. Освен настройката на BIOS и съдържанието на / proc / cpuinfo (което обсъдихме в първа глава), можете също така бързо да проверите това от работеща Linux система, използвайки kvm-ok:

Също така е добра идея да сте сигурни с коя хардуерна архитектура - 64 или 32-битова - работите: $ uname -m

Но дори ако вашият хардуерен профил отговаря на задачата, ще трябва да включите ядрото на Linux в плановете си. Ако те все още не са там, трябва да добавите модулите на ядрото kvm и kvm-intel или kvm-amd. # Modprobe kvm-intel

Ако тези модули не успеят да се заредят (и във файловата система няма устройство / dev / kvm), тогава има голям шанс процесорът ви просто да не отговаря на работата, която бихте искали. Ако обаче всичко се получи, вие сте готови да инсталирате пакета qemu-kvm (и, ако е необходимо, libvirt, virt-install и bridge-utils).

Работа с инструменти за управление на KVM

Не е тайна, че платформите за виртуализация имат заслужена репутация, че са сложни. Но има две неща, които могат да направят започването с KVM малко по-предизвикателно от някои от останалите:

  • Налични са доста набори от инструменти за управление, всеки от които предлага подобна, но не идентична функционалност.
  • Те имат лошия навик да променят имената, използвани за ключовите двоични файлове, в зависимост от това коя дистрибуция и издание използвате.

Ще ви запозная с Libvirt Tools и vmbuilder в пета глава, но тук ще обсъдим набора от инструменти на KVM.

Изграждането на нови гости, използвайки така наречения начин „KVM“, е процес от две стъпки. Първо ще използвате qemu-img, за да създадете ново изображение - или да промените или конвертирате старо. След това ще използвате qemu-kvm, за да настроите виртуална машина, която ще стартира инсталацията.

Току-що казах ли „ще използвате qemu-kvm ...“? Колко съм глупав. qemu-kvm е обединен в qemu отдавна и е заменен от qemu-system-x86_64. Междувременно някои системи ви предлагат kvm като обвивка, която изпълнява qemu-system-x86_64 -enable-kvm - въпреки че не бива да бъркате обвивката kvm със стария двоичен файл на kvm, който използва малко по-различен синтаксис.

Така че нека видим как работят тези две стъпки. Създавате образ на диск с qemu-img (който между другото може да се използва много ефективно и за други хипервизори), където “my-disk” е името на изображението, което искате да създадете, максималният размер на изображението ще бъде 6 GB, а qcow2 е файловият формат. qcow, между другото, означава „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

Изборът на файлов формат ще зависи от вашите специфични нужди. Ако имате нужда от по-голяма съвместимост и гъвкавост - включително способността да генерирате сложни моментни снимки - тогава qcow2 вероятно ще бъде вашият най-добър избор.

Форматът на изображението на диска qcow позволява разпределянето на дисково пространство да расте само при необходимост, което означава, че използването на пространство винаги е възможно най-ефективно. Промените в изображението само за четене qcow могат да бъдат запазени в отделен файл, който се отнася вътрешно към оригиналното изображение. qcow2 добави възможност за създаване на множество снимки на снимки.

Вече сме готови за втора стъпка. Ето как ще изградим нашата 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

Често се появява нов SDL прозорец (макар и не задължително за всички дистрибуции), където можете да завършите процеса на инсталиране на операционната система. Възстановяването на контрола върху мишката от терминала Qemu изисква натискане на CTRL + ALT.

За да обясним: използвайки „kvm“ (въпреки че точната команда, която ще ви е необходима за вашата версия, може да се различава), ние ще наречем нашия нов гост „my-VM“, определете файла my-disk.img като hda („твърд диск a ”), посочете местоположението на операционната система ISO (в този случай сървър Ubuntu 16.04) и задайте 1024 MB като максимална памет, разпределена на VM.

По подразбиране KVM ще конфигурира вашия гост за мрежи на ниво потребител (сякаш параметрите -netdev user, id = user.0 -device e1000, netdev = user.0 са зададени). Това ще предостави на госта IP адрес чрез собствената DHCP услуга на KVM и достъп до вашия хост, Интернет и до базирани на LAN ресурси. Въпреки че конфигурацията по подразбиране е проста, тя може да бъде прекалено ограничителна за някои сценарии, тъй като често има някои ограничения на производителността и характеристиките.

Besides these, you can use command line flags to control various VM configuration parameters, including:

  • -smp 2 provides two processors (“smp” = symmetric multiprocessing).
  • The -net argument (example: -net nic,model=virtio,macaddr =52:54:00:05:11:11) establishes a network connection for your guest.
  • You can provision a network bridge using something like -net bridge,vlan=0,br=br0 — although this will require a matching -net definition on the host. The two are connected through a special “vlan” parameter.
  • -balloon virtio will allow me to expand or reduce a guest’s memory size without having to reboot it.
  • You can also use the -drive file= flag to define additional block storage devices. Adding a value for format= (qcow2, for instance).

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.