AWS mengumumkan perpindahan dari Xen menuju KVM. Jadi, apakah KVM itu?

Terikat dalam pengumuman AWS tentang jenis instans high-end EC2 baru (C5) adalah saran kuat bahwa raksasa komputasi awan Amazon telah mulai mengalihkan ratusan ribu server fisiknya dari hypervisor Xen open source yang menjalankannya hingga sekarang, ke alternatif open source, KVM.

Apakah Anda memiliki karier dan / atau hipotek rumah yang diinvestasikan secara mendalam untuk masa depan Xen atau apakah Anda tidak pernah menyadarinya, Anda mungkin tertarik untuk mempelajari lebih lanjut tentang KVM. Jadi, inilah pengantar umum yang diadaptasi dari buku saya, Teach Yourself Linux Virtualization and High Availability: mempersiapkan diri untuk ujian sertifikasi LPIC-3 304.

Butuh latar belakang yang lebih mendasar baik di server Linux atau AWS? Linux Saya Beraksi dan Pelajari Amazon Web Services dalam Satu Bulan Makan Siang buku dari Manning mungkin membantu, bersama dengan kursus administrasi server Linux saya di Pluralsight. Ada juga kursus hybrid yang disebut Linux in Motion yang terdiri dari lebih dari dua jam video dan sekitar 40% teks Linux sedang Beraksi.

KVM

Seperti Xen, KVM (Mesin Virtual berbasis Kernel) adalah teknologi hypervisor open source untuk memvirtualisasi infrastruktur komputasi yang berjalan pada perangkat keras yang kompatibel dengan x86. Juga seperti Xen, KVM memiliki komunitas pengguna aktif dan penerapan perusahaan yang signifikan.

Host KVM sebenarnya berjalan di kernel Linux bersama dengan dua modul kernel KVM (modul kvm.ko dan kvm-intel.ko atau kvm-amd.ko). Melalui integrasi kernel yang ketat - termasuk konektivitas I / O dengan blok kernel dan driver jaringan yang disediakan oleh Virtio - KVM dapat menawarkan akses yang lebih mulus ke semua perangkat keras kompleks dan profil jaringan yang mungkin mereka temui.

Ekstensi virtualisasi perangkat keras yang dibangun ke dalam desain CPU modern dan diperlukan untuk penerapan KVM berarti bahwa, langsung dari kotak, tamu KVM dapat dengan aman mengakses hanya sumber daya perangkat keras yang mereka butuhkan tanpa perlu khawatir tentang kebocoran ke sistem yang lebih besar.

Di mana tepatnya QEMU cocok dengan semua ini? Selain bisa berperan sebagai hypervisor, kekuatan QEMU adalah sebagai emulator. KVM, dalam peran virtualisasi hypervisornya, dapat memanfaatkan kekuatan emulasi QEMU untuk melengkapi fitur akselerasi perangkat kerasnya sendiri, menghadirkan para tamunya dengan chipset yang diemulasi dan bus PCI. Keseluruhan, seperti yang mereka katakan, bisa lebih besar daripada jumlah bagian-bagiannya.

Banyak fungsi manajemen untuk KVM seringkali sebenarnya disediakan oleh Libvirt. Oleh karena itu, terkadang Anda mungkin ingin melihat informasi mendetail tentang fitur terkait KVM seperti jaringan, penyimpanan, dan tata letak sistem file yang terdapat di bab kelima buku Virtualisasi Linux dan Ketersediaan Tinggi Ajarkan Diri Anda ("Libvirt dan Alat Terkait") .

Instalasi

Sebelumnya, Anda harus memastikan bahwa mesin fisik yang Anda rencanakan untuk digunakan sebagai host KVM mendukung virtualisasi perangkat keras. Selain pengaturan BIOS dan konten / proc / cpuinfo (yang telah kita bahas di Bab Satu), Anda juga dapat dengan cepat memeriksa ini dari sistem Linux yang sedang berjalan menggunakan kvm-ok: $ kvm-ok

Sebaiknya Anda juga memastikan arsitektur perangkat keras mana - 64 atau 32-bit - yang Anda gunakan: $ uname -m

Tetapi bahkan jika profil perangkat keras Anda sesuai dengan tugas tersebut, Anda harus membiarkan kernel Linux masuk pada rencana Anda. Jika belum ada, Anda harus menambahkan modul kernel kvm dan kvm-intel atau kvm-amd. # Modprobe kvm-intel

Jika modul-modul itu gagal dimuat (dan tidak ada perangkat / dev / kvm di sistem file), maka ada kemungkinan CPU Anda tidak sesuai dengan pekerjaan yang Anda inginkan. Namun, jika semua berhasil, Anda siap untuk menginstal paket qemu-kvm (dan, jika perlu, libvirt, virt-install, dan bridge-utils juga).

Bekerja dengan Alat Manajemen KVM

Bukan rahasia lagi bahwa platform virtualisasi memiliki reputasi yang layak karena rumit. Tetapi ada dua hal yang membuat memulai KVM sedikit lebih menantang daripada yang lain:

  • Ada beberapa toolkit manajemen yang tersedia, masing-masing menawarkan fungsionalitas yang serupa - tetapi tidak identik.
  • Mereka memiliki kebiasaan buruk dalam mengubah nama yang digunakan untuk biner kunci tergantung pada distribusi dan rilis yang Anda gunakan.

Saya akan memperkenalkan Anda pada Libvirt Tools dan vmbuilder di Bab Lima, tetapi di sini, kita akan membahas tool kit KVM.

Membangun tamu baru menggunakan apa yang kami sebut dengan cara "KVM" adalah proses dua langkah. Pertama, Anda akan menggunakan qemu-img untuk membuat gambar baru - atau memodifikasi atau mengonversi yang lama. Kemudian Anda akan menggunakan qemu-kvm untuk menyiapkan mesin virtual yang akan memulai penginstalan.

Apakah saya baru saja mengatakan "Anda akan menggunakan qemu-kvm…"? Saya konyol. qemu-kvm telah lama digabungkan menjadi qemu dan telah digantikan oleh qemu-system-x86_64. Sementara itu, beberapa sistem menawarkan Anda kvm sebagai pembungkus yang menjalankan qemu-system-x86_64 -enable-kvm - meskipun Anda tidak boleh bingung antara pembungkus kvm dengan biner kvm lama yang menggunakan sintaks yang agak berbeda.

Jadi mari kita lihat bagaimana kedua langkah ini bekerja. Anda membuat image disk dengan qemu-img (yang juga dapat digunakan dengan sangat efektif untuk hypervisor lain), di mana "my-disk" adalah nama gambar yang ingin Anda buat, ukuran maksimum gambar akan menjadi 6 GB, dan qcow2 adalah format file. qcow, omong-omong, adalah singkatan dari "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

Memilih format file akan bergantung pada kebutuhan spesifik Anda. Jika Anda membutuhkan kompatibilitas dan fleksibilitas yang lebih besar - termasuk kemampuan untuk menghasilkan snapshot yang canggih - maka qcow2 mungkin akan menjadi pilihan terbaik Anda.

The qcow disk image format permits disk space allocation to grow only as needed, meaning the use of space is always as efficient as possible. Changes to a qcow read-only image can be saved to a separate file, which refers internally to the original image. qcow2 added the ability to create multiple image snapshots.

We’re now ready for step two. Here’s how we’ll build our 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

A new SDL window will often (although not necessarily for all distributions) pop up where you can complete the operating system installation process. Regaining control of your mouse from the Qemu terminal requires pressing CTRL+ALT.

To explain: using “kvm” (although the precise command you’ll need for your version may differ), we’ll call our new guest “my-VM”, designate the my-disk.img file as hda (“hard drive a”), point to the location of the operating system ISO (Ubuntu 16.04 server, in this case), and set 1024 MB as the maximum memory alloted to the VM.

By default, KVM will configure your guest for user-level networking (as though the parameters -netdev user,id=user.0 -device e1000,netdev=user.0 were specified). This will provide the guest with an IP address through KVM’s own DHCP service and access to your host, the Internet, and to LAN-based recourses. While the default configuration is simple, it may be overly restrictive for some scenarios, as there are often some performance and feature limitations.

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.