Terikat dalam pengumuman AWS mengenai jenis contoh kelas tinggi EC2 baru (C5) adalah cadangan kuat bahawa gergasi pengkomputeran awan Amazon telah mula mengalihkan beratus-ratus ribu pelayan fizikalnya dari hypervisor Xen sumber terbuka yang menjalankannya sehingga sekarang, kepada alternatif sumber terbuka, KVM.
Sama ada anda mempunyai karier dan / atau gadai janji rumah anda yang dilaburkan secara mendalam pada masa depan Xen atau sama ada anda tidak pernah tahu ia wujud, anda mungkin berminat untuk mengetahui lebih lanjut mengenai KVM. Jadi, inilah pengenalan umum yang diadaptasi dari buku saya, Teach Yourself Linux Virtualization and High Availability: bersiap sedia untuk menghadapi ujian pensijilan LPIC-3 304.
Memerlukan latar belakang yang lebih asas sama ada pelayan Linux atau AWS? Linux Saya dalam Tindakan dan Belajar Perkhidmatan Web Amazon dalam buku Lunches Bulan dari Manning mungkin membantu, bersama dengan kursus pentadbiran pelayan Linux saya di Pluralsight. Terdapat juga kursus hibrid yang disebut Linux in Motion yang terdiri daripada lebih dari dua jam video dan sekitar 40% teks Linux dalam Aksi.KVM
Seperti Xen, KVM (Mesin Maya berasaskan Kernel) adalah teknologi hypervisor sumber terbuka untuk memvisualisasikan infrastruktur pengkomputeran yang berjalan pada perkakasan serasi x86. Juga seperti Xen, KVM mempunyai komuniti pengguna aktif dan penyebaran perusahaan yang ketara.
Host KVM sebenarnya berjalan di kernel Linux bersama dengan dua modul kernel KVM (modul kvm.ko dan sama ada kvm-intel.ko atau kvm-amd.ko). Melalui integrasi kernelnya yang ketat - termasuk penyambungan I / O dengan blok kernel dan pemacu rangkaian yang disediakan oleh Virtio - KVM dapat memberikan para tamunya akses yang lebih lancar ke semua profil perkakasan dan rangkaian yang mungkin mereka hadapi.
Sambungan virtualisasi perkakasan yang dibina dalam reka bentuk CPU moden dan diperlukan untuk penyebaran KVM bermaksud bahawa, dari luar kotak, para tetamu KVM hanya dapat mengakses sumber perkakasan yang mereka perlukan dengan selamat tanpa perlu risau akan kebocoran ke sistem yang lebih besar.
Di manakah tepatnya QEMU sesuai dengan semua ini? Selain dapat bertindak sebagai hypervisor, kekuatan QEMU adalah sebagai emulator. KVM, dalam peranan virtualisasi hypervisornya, dapat memanfaatkan kekuatan emulasi QEMU untuk memuji ciri-ciri pecutan perkakasannya sendiri, menghadirkan para tamunya dengan chipset dan bus PCI yang ditiru. Keseluruhan, seperti yang mereka katakan, boleh lebih besar daripada jumlah bahagiannya.

Sebilangan besar fungsi pengurusan untuk KVM sebenarnya sebenarnya diberikan oleh Libvirt. Oleh itu, anda kadangkala ingin merujuk kepada maklumat terperinci mengenai ciri-ciri yang berkaitan dengan KVM seperti susun atur rangkaian, penyimpanan, dan sistem fail yang terdapat di bab kelima buku Mengajar Diri Linux Virtualisasi dan Ketersediaan Tinggi ("Libvirt and Related Tools") .
Pemasangan
Sebelum melakukan perkara lain, anda perlu memastikan bahawa mesin fizikal yang anda rancang untuk digunakan sebagai hos KVM menyokong virtualisasi perkakasan. Selain tetapan BIOS dan isi / proc / cpuinfo (yang telah kita bincangkan dalam Bab Satu), anda juga dapat dengan cepat memeriksa ini dari sistem Linux yang sedang berjalan menggunakan kvm-ok: $ kvm-ok
Adalah idea yang baik untuk memastikan seni bina perkakasan - 64 atau 32-bit - yang anda bekerjasama: $ uname -m
Tetapi walaupun profil perkakasan anda sesuai dengan tugas, anda harus membiarkan kernel Linux mengikut rancangan anda. Sekiranya mereka belum ada, anda harus menambahkan modul kernel kvm dan kvm-intel atau kvm-amd. # Modprobe kvm-intel
Sekiranya modul-modul tersebut gagal dimuat (dan tidak ada perangkat / dev / kvm dalam sistem fail), maka kemungkinan besar CPU anda tidak sesuai dengan pekerjaan yang anda inginkan. Namun, jika semuanya berjaya, anda sudah siap untuk memasang pakej qemu-kvm (dan, jika perlu, libvirt, virt-install, dan bridge-utils juga).
Bekerja dengan Alat Pengurusan KVM
Bukan rahsia lagi bahawa platform virtualisasi mempunyai reputasi yang pantas kerana rumit. Tetapi ada dua perkara yang dapat membuat permulaan KVM sedikit lebih mencabar daripada yang lain:
- Terdapat beberapa alat pengurusan yang tersedia, masing-masing menawarkan fungsi serupa - tetapi tidak serupa -.
- Mereka mempunyai kebiasaan buruk mengubah nama yang digunakan untuk binari kunci bergantung pada sebaran dan pelepasan yang anda gunakan.
Saya akan memperkenalkan anda kepada Libvirt Tools dan vmbuilder dalam Bab Lima, tetapi di sini, kita akan membincangkan kit alat KVM.
Membangun tetamu baru menggunakan apa yang akan kita sebut "KVM" adalah proses dua langkah. Pertama, anda akan menggunakan qemu-img untuk membuat gambar baru - atau mengubah atau menukar yang lama. Kemudian anda akan menggunakan qemu-kvm untuk menyediakan mesin maya yang akan memulakan pemasangan.
Apakah saya hanya mengatakan "anda akan menggunakan qemu-kvm ..."? Bodoh saya. qemu-kvm digabungkan menjadi qemu sejak dulu dan telah digantikan oleh qemu-system-x86_64. Sementara itu, beberapa sistem menawarkan kvm sebagai pembungkus yang melaksanakan qemu-system-x86_64 -enable-kvm - walaupun anda tidak boleh mengelirukan pembungkus kvm dengan binari kvm lama yang menggunakan sintaks yang agak berbeza.Oleh itu, mari kita lihat bagaimana kedua-dua langkah ini berfungsi. Anda membuat gambar cakera dengan qemu-img (yang, by the way, dapat digunakan dengan sangat efektif untuk hypervisor lain juga), di mana "my-disk" adalah nama gambar yang ingin anda buat, ukuran maksimum gambar akan berukuran 6 GB, dan qcow2 adalah format fail. qcow, by the way, bermaksud "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 fail bergantung pada keperluan khusus anda. Sekiranya anda memerlukan keserasian dan fleksibiliti yang lebih besar - termasuk kemampuan untuk menghasilkan gambar yang canggih - maka qcow2 mungkin akan menjadi pilihan terbaik anda.
Format gambar cakera qcow membenarkan peruntukan ruang cakera hanya bertambah seperti yang diperlukan, yang bermaksud penggunaan ruang sentiasa seefisien mungkin. Perubahan pada gambar hanya baca qcow dapat disimpan ke fail yang berasingan, yang merujuk secara dalaman pada gambar asal. qcow2 menambahkan keupayaan untuk membuat banyak gambar.
Kami kini bersedia untuk langkah kedua. Inilah cara kami membina VM kami:
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
Tetingkap SDL baru selalunya (walaupun tidak semestinya untuk semua pengedaran) muncul di mana anda dapat menyelesaikan proses pemasangan sistem operasi. Mendapatkan kembali kawalan tetikus anda dari terminal Qemu memerlukan menekan CTRL + ALT.
Untuk menjelaskan: menggunakan "kvm" (walaupun perintah tepat yang anda perlukan untuk versi anda mungkin berbeza), kami akan memanggil tetamu baru kami "my-VM", menetapkan fail my-disk.img sebagai hda ("cakera keras a ”), arahkan ke lokasi ISO sistem operasi (pelayan Ubuntu 16.04, dalam hal ini), dan tetapkan 1024 MB sebagai memori maksimum yang diberikan kepada VM.
Secara lalai, KVM akan mengkonfigurasi tamu anda untuk rangkaian peringkat pengguna (seolah-olah parameter -netdev user, id = user.0 -device e1000, netdev = user.0 ditentukan). Ini akan memberi tetamu alamat IP melalui perkhidmatan DHCP KVM sendiri dan akses ke hos anda, Internet, dan ke sumber yang berasaskan LAN. Walaupun konfigurasi lalai adalah sederhana, ia mungkin terlalu ketat untuk beberapa senario, kerana terdapat beberapa batasan prestasi dan ciri.
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.