KVM kullanarak sanallaştırmadan korkmayı bırakıyoruz. Sanallaştırma Temelleri ve KVM'ye Giriş

  • 22.07.2019

Şahsen benim için KVM'yi (Kernel-based Virtual Machine) Intel VT-x ve AMD-V donanım sanallaştırma teknolojileri üzerinde böyle bir soyutlama düzeyi olarak düşünmek en kolayı. Bu teknolojilerden birini destekleyen işlemcili bir makine alıyoruz, bu makineye Linux kuruyoruz, Linux'ta KVM kuruyoruz, sonuç olarak sanal makineler oluşturma imkanı buluyoruz. Bulut barındırma hizmetleri, örneğin Amazon Web Hizmetleri, kabaca bu şekilde çalışır. KVM ile birlikte bazen Xen de kullanılır, ancak bu teknolojinin tartışılması bu yazının kapsamı dışındadır. Aynı Docker gibi kapsayıcı sanallaştırma teknolojilerinden farklı olarak KVM, herhangi bir işletim sistemini konuk sistem olarak çalıştırmanıza izin verir, ancak aynı zamanda b Ö Daha yüksek sanallaştırma yükü.

Not: Aşağıda açıklanan adımlar benim tarafımdan Ubuntu Linux 14.04 üzerinde test edilmiştir, ancak teorik olarak Ubuntu'nun diğer sürümleri ve diğer Linux dağıtımları için büyük ölçüde geçerli olacaktır. Her şey hem masaüstünde hem de SSH üzerinden erişilen sunucuda çalışmalıdır.

KVM'yi yükleme

İşlemcimiz tarafından Intel VT-x veya AMD-V'nin desteklenip desteklenmediğini kontrol edin:

grep -E "(vmx | svm)" / proc / cpuinfo

Bir şey ısınırsa, desteklenir ve devam edebilirsiniz.

KVM'yi yükleyin:

sudo apt-get güncellemesi
sudo apt-get install qemu-kvm libvirt-bin sanal köprü-utils

Nerede saklamak gelenekseldir:

  • / var / lib / libvirt / boot / - Konuk sistemleri kurmak için ISO görüntüleri;
  • / var / lib / libvirt / resimler / - konuk sistemlerin sabit sürücülerinin resimleri;
  • / var / log / libvirt / - tüm günlükler burada aranmalıdır;
  • / etc / libvirt / - yapılandırma dosyalarının bulunduğu dizin;

Artık KVM kurulu olduğuna göre ilk sanal makinemizi oluşturalım.

İlk sanal makinenin oluşturulması

Konuk sistem olarak FreeBSD'yi seçtim. Sistemin ISO görüntüsünün indirilmesi:

cd / var / lib / libvirt / önyükleme /
sudo wget http: // ftp.freebsd.org/ path / to / some-freebsd-disk.iso

Çoğu durumda, sanal makineler virsh yardımcı programı kullanılarak yönetilir:

sudo virsh --help

Sanal makineyi başlatmadan önce bazı ek bilgiler toplamamız gerekiyor.

Kullanılabilir ağların listesine bakıyoruz:

sudo virsh net listesi

Belirli bir ağ hakkındaki bilgileri görüntüleme (varsayılan olarak adlandırılır):

sudo virsh net-info varsayılanı

Konuk işletim sistemi için mevcut optimizasyonların listesini görelim:

sudo virt-install --os-varyant listesi

Şimdi, varsayılan ağa bağlı 1 CPU, 1 GB RAM ve 32 GB disk alanına sahip bir sanal makine oluşturuyoruz:

sudo sanal kurulum \
--virt tipi = kvm \
--name freebsd10 \
--ram 1024 \
--vcpus = 1 \
--os değişkeni = freebsd8 \
--hvm \
--cdrom = / var / lib / libvirt / önyükleme / FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
--network ağı = varsayılan, model = virtio \
--grafik vnc \
--disk yolu = / var / lib / libvirt / resimler / freebsd10.img, boyut = 32, veri yolu = virtio

Görebilirsin:

UYARI Grafik konsola bağlanılamıyor: sanal görüntüleyici değil
Kurulmuş. Lütfen "virt-viewer" paketini kurun.

Etki alanı yüklemesi devam ediyor. Konsola yeniden bağlanabilirsiniz
yükleme işlemini tamamlamak için.

Bu normaldir ve olmalıdır.

Ardından sanal makinenin özelliklerine XML formatında bakarız:

sudo virsh dumpxml freebsd10

İşte en eksiksiz bilgi. Örneğin, daha fazla ihtiyaç duyacağımız MAC adresi dahil. Şimdiye kadar VNC hakkında bilgi bulduk. Benim durumumda:

Favori istemcinizin yardımıyla (kişisel olarak Rammina kullanıyorum), gerekirse SSH port yönlendirmeyi kullanarak VNC'ye gidiyoruz. Doğrudan FreeBSD yükleyicisine giriyoruz. Sonra her şey her zamanki gibi - Sonraki, Sonraki, Sonraki, kurulu sistemi alıyoruz.

Temel komutlar

Şimdi KVM ile çalışmak için temel komutlara bir göz atalım.

Tüm sanal makinelerin bir listesini alma:

sudo virsh listesi -- tümü

Belirli bir sanal makine hakkında bilgi alma:

sudo virsh dominfo freebsd10

Sanal makineyi başlatın:

sudo virsh freebsd10'u başlat

Sanal makineyi durdur:

sudo virsh kapatma freebsd10

Sanal makineyi çivilemek zor (adına rağmen, bu Olumsuz silmek):

sudo virsh freebsd10'u yok ediyor

Sanal makineyi yeniden başlatın:

sudo virsh yeniden başlatma freebsd10

Bir sanal makineyi klonlayın:

sudo sanal klonu -o freebsd10 -n freebsd10-klonu \
--file / var / lib / libvirt / resimler / freebsd10-clone.img

Otomatik çalıştırmayı etkinleştir / devre dışı bırak:

sudo virsh otomatik başlatma freebsd10
sudo virsh autostart -- freebsd10'u devre dışı bırak

Virsh'i diyalog modunda başlatma (tüm komutlar diyalog modundadır - yukarıda açıklandığı gibi):

sudo virsh

Sanal makine özelliklerini XML'de düzenlemek, burada dahil olmak üzere, bellek miktarındaki sınırı vb. değiştirebilirsiniz.

sudo virsh düzenleme freebsd10

Önemli! Ne yazık ki, düzenlenen XML'deki yorumlar kaldırılıyor.

Sanal makine durdurulduğunda disk de yeniden boyutlandırılabilir:

sudo qemu-img yeniden boyutlandırma / var / lib / libvirt / resimler / freebsd10.img -2G
sudo qemu-img bilgisi / var / lib / libvirt / resimler / freebsd10.img

Önemli! Konuk işletim sisteminiz büyük olasılıkla diskin aniden büyümesini veya küçülmesini sevmeyecektir. En iyi durumda, diski yeniden bölümlendirme önerisiyle acil durum modunda açılır. Büyük olasılıkla, bunu yapmak istememelisiniz. Yeni bir sanal makine başlatmak ve tüm verileri ona taşımak çok daha kolay olabilir.

Yedekleme ve geri yükleme oldukça basittir. Disk görüntüsünün yanı sıra dumpxml çıktısını bir yere kaydetmek ve ardından geri yüklemek yeterlidir. YouTube'da bir video buldum Bu sürecin bir gösterimi ile her şey gerçekten basit.

Ağ ayarları

İlginç bir soru, önyüklemeden sonra sanal makinenin hangi IP adresini aldığının nasıl belirleneceğidir? KVM bunu zor bir şekilde yapar. Python'da şöyle bir komut dosyası yazdım:

#! / usr / bin / env python3

# virt-ip.py komut dosyası
# (c) 2016 Aleksander Alekseev
# http://site /

ithalat sistemi
yeniden içe aktar
işletim sistemini içe aktar
alt işlemi içe aktarma
xml .etree'den ElementTree'yi içe aktar

def eprint (str):
yazdır (str, dosya = sys .stderr)

eğer len (sys .argv)< 2 :
eprint ("KULLANIM:" + sys .argv [0] + " " )
eprint ("Örnek:" + sys .argv [0] + "freebsd10")
sistem .çıkış (1)

eğer os .geteuid()! = 0:
eprint ("HATA: kök olmalısınız")
eprint ("İpucu: run` sudo "+ sys .argv [0] +" ... `");
sistem .çıkış (1)

if alt işlemi .call ( "hangi arping 2> & 1> / dev / null", kabuk = Doğru)! = 0:
eprint ("HATA: arping bulunamadı")
e-baskı ( "İpucu: `sudo apt-get install arping` komutunu çalıştırın")
sistem .çıkış (1)

Etki alanı = sistem .argv [1]

.match ("^ * $", alan adı) yeniden değilse:
e-baskı ( "HATA: alan adında geçersiz karakterler")
sistem .çıkış (1)

Domout = alt işlem .check_output ("virsh dumpxml" + etki alanı + "|| doğru",
kabuk = Doğru)
domout = domout.decode ("utf-8") .strip ()

if domout == "":
# hata mesajı zaten dumpxml tarafından yazdırıldı
sistem .çıkış (1)

Doc = ElementTree.fromstring (domout)

# 1.tüm ağ arayüzlerini listele
# 2.paralel olarak her arayüzde 'arping' çalıştırın
# 3.grep yanıtları
cmd = "(ifconfig | cut -d" "-f 1 | grep -E". "|" + \
"xargs -P0 -I IFACE arping -i IFACE -c 1 () 2> & 1 |" + \
") || true" dan "grep" baytları

doc.iter () içindeki çocuk için:
if child.tag == "mac":
macaddr = child.attrib ["adres"]
macout = alt işlem .check_output (cmd .format (macaddr),
kabuk = Doğru)
yazdır (macout.decode ("utf-8"))

Komut dosyası, yapılandırması daha fazla tartışılacak olan hem varsayılan ağ hem de köprülü ağ ile çalışır. Ancak pratikte, KVM'yi konuk sistemlere her zaman aynı IP adreslerini atayacak şekilde yapılandırmak çok daha uygundur. Bunu yapmak için ağ ayarlarını düzenleyin:

sudo virsh net düzenleme varsayılanı

... bunun gibi bir şey:

>



>

Bu düzenlemeleri yaptıktan sonra


>

... ve şunun gibi bir şeyle değiştirin:




>

Konuk sistemini yeniden başlatıyoruz ve yönlendiriciden DHCP üzerinden bir IP alıp almadığını kontrol ediyoruz. Konuğun statik bir IP adresine sahip olmasını istiyorsanız, bu, misafirin kendi içinde her zamanki gibi yapılandırılır.

Virt-yönetici programı

Virt-manager programı da ilginizi çekebilir:

sudo apt-get install virt-manager
sudo usermod -a -G libvirtd KULLANICI ADI

Ana penceresi şöyle görünür:

Gördüğünüz gibi, virt-manager yalnızca yerel olarak çalışan sanal makineler için bir GUI değildir. Onun yardımıyla, diğer ana bilgisayarlarda çalışan sanal makineleri yönetebilir ve gerçek zamanlı olarak güzel grafiklere bakabilirsiniz. Kişisel olarak, belirli bir konuk sisteminin VNC'sinin hangi bağlantı noktasında çalıştığı yapılandırmalarda arama yapmanız gerekmediğini virt-manager'da özellikle uygun buluyorum. Listede sanal makineyi bulun, çift tıklayın ve monitöre erişin.

Ayrıca, aksi takdirde XML dosyalarının zahmetli bir şekilde düzenlenmesini ve bazı durumlarda ek komutları gerektirecek şeyleri yapmak için virt-manager'ı kullanmak çok uygundur. Örneğin, sanal makineleri yeniden adlandırma, CPU benzeşimini yapılandırma ve benzerleri. Bu arada, CPU benzeşiminin kullanılması, gürültülü komşuların etkisini ve sanal makinelerin ana bilgisayar sistemi üzerindeki etkisini önemli ölçüde azaltır. Her zaman mümkün olduğunda kullanın.

VirtualBox'ın yerine KVM'yi kullanmaya karar verirseniz, donanım sanallaştırmasını kendi aralarında paylaşamayacaklarını unutmayın. KVM'nin masaüstünüzde çalışması için VirtualBox ve Vagrant'taki tüm sanal makineleri durdurmanız ve aynı zamanda sistemi yeniden başlatmanız gerekecek. Ben şahsen KVM'yi VirtualBox'tan çok daha uygun buluyorum, çünkü en azından komutu yürütmenizi gerektirmiyor sudo / sbin / rcvboxdrv kurulumu Her çekirdek güncellemesinden sonra Unity ile yeterince çalışır ve genellikle tüm pencereleri gizlemenize izin verir.

Ubuntu'da, yönetim araçları olarak KVM hipervizörünün (sanal makine yöneticisi) ve libvirt'in kullanılması önerilir. Libvirt, bir dizi yazılım API'si ve özel sanal makine (VM) yönetim uygulamaları virt-manager (grafik arabirimi, GUI) veya virsh (komut satırı, CLI) içerir. Alternatif yöneticiler olarak convirt (GUI) veya convirt2 (WEB arayüzü) kullanabilirsiniz.

Şu anda, Ubuntu'da yalnızca KVM hipervizörü resmi olarak desteklenmektedir. Bu hiper yönetici, Linux işletim sisteminin çekirdek kodunun bir parçasıdır. Xen'den farklı olarak KVM, paravirtualization'ı desteklemez, bu da onu kullanmak için CPU'nuzun VT teknolojilerini desteklemesi gerektiği anlamına gelir. Komutu bir terminalde çalıştırarak işlemcinizin bu teknolojiyi destekleyip desteklemediğini kontrol edebilirsiniz:

Sonuç olarak bir mesaj alırsanız:

BİLGİ: / dev / kvm var KVM hızlandırma kullanılabilir

o zaman KVM sorunsuz çalışacaktır.

Çıktıda bir mesaj alırsanız:

CPU'nuz KVM uzantılarını desteklemiyor KVM hızlandırma KULLANILAMAZ

o zaman sanal makineyi kullanmaya devam edebilirsiniz, ancak çok daha yavaş olacaktır.

    64 bit sistemleri misafir olarak kurun

    Konuk sistemlere 2 GB'den fazla RAM ayırın

Kurulum

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder köprü-utils

Bu, X'leri olmayan bir sunucuya yapılan bir kurulumdur, yani grafiksel bir arayüz içermez. komutu ile kurabilirsiniz.

Sudo apt-get kurulum sanal yöneticisi

Bundan sonra, "Sanal Makine Yöneticisi" menü öğesi görünecek ve yüksek bir olasılıkla her şey işe yarayacaktır. Herhangi bir sorun ortaya çıkarsa, İngilizce wiki'deki talimatları okumanız gerekecektir.

Konuk sistemi oluşturma

Grafik arayüzü kullanarak bir konuk sistemi oluşturma prosedürü oldukça basittir.

Ancak metin modu tanımlanabilir.

qcow2

Grafik arayüzü kullanarak bir sistem oluştururken, sabit disk olarak mevcut bir görüntü dosyasının seçilmesi veya aygıtın bloke edilmesi veya ham (RAW) verilerle yeni bir dosya oluşturulması önerilir. Ancak, bu mevcut tek dosya biçiminden uzaktır. man qemu-img'de listelenen tüm disk türleri arasında qcow2 en esnek ve modern olanıdır. Anlık görüntüleri, şifrelemeyi ve sıkıştırmayı destekler. Yeni bir konuk sistemi oluşturmadan önce oluşturulmalıdır.

Qemu-img create -o preallocation = metadata -f qcow2 qcow2.img 20G

Aynı adam qemu-img'e göre, meta verilerin ön tahsisi (-o preallocation = metadata) diski başlangıçta biraz daha büyük yapar, ancak görüntünün büyümesi gerektiğinde daha iyi performans sağlar. Aslında, bu durumda, bu seçenek kötü hatayı önler. Oluşturulan görüntü başlangıçta bir megabayttan daha az yer kaplar ve gerektiğinde belirtilen boyuta büyür. Konuk sistem bu son belirtilen boyutu hemen görmelidir, ancak kurulum sırasında dosyanın gerçek boyutunu görebilir. Doğal olarak, 200 KB sabit sürücüye yüklemeyi reddedecektir. Hata Ubuntu'ya özgü değil, en azından RHEL'de görünüyor.

Görüntü türüne ek olarak, daha sonra nasıl monte edeceğinizi seçebilirsiniz - IDE, SCSI veya Virtio Disk. Disk alt sisteminin performansı bu seçime bağlı olacaktır. Kesin olarak doğru bir cevap yoktur, misafir sistemine atanacak göreve göre seçim yapmanız gerekir. Konuk sistem "görmek" için oluşturulmuşsa, herhangi bir yöntem işe yarayacaktır. Genel olarak, sanal bir makinenin darboğazı genellikle G / Ç'dir, bu nedenle, çok yüklü bir sistem oluştururken bu konu mümkün olduğunca sorumlu bir şekilde ele alınmalıdır.

Bulutun nasıl çalıştığını hiç merak ettiniz mi? Her yıl milyarlarca dolarlık yatırımın yapıldığı, en hızlı büyüyen BT trendi, kullanılabilecek bitmiş bir ürün veya hizmet haline gelmeden önce üretim sürecinden geçiyor. Bu süreci süresiz olarak detaylandırabilirsiniz, bu nedenle yalnızca son aşamayı - sanallaştırmayı, yani yazılım ürünlerini veya sanallaştırmanın yapıldığı donanım bileşenlerini ele alacağız.

Bir dizi "VPS / VDS teknolojisinden" ilk malzeme, KVM (Kernel-based Virtual Machine) yazılım ürününe ayrılmıştır. Onunla başlıyoruz, çünkü Tucha bulutunda kullandığımız bu hipervizör ve elbette ona karşı tavrımız özel.

KVM hipervizörü: özellikleri ve çalışma prensibi

Sanallaştırma teknolojileri, modern sistemlerde giderek daha fazla kullanılmaktadır. Sanal makineler, çeşitli görevleri gerçekleştirmek için eşlik eden bir yazılım ortamına sahip birkaç farklı işletim sistemine sahip olmanın en kolay yoludur - yazılım test etme veya geliştirme, VPS kullanarak barındırma düzenleme, dijital ürünleri dağıtma, eğitim vb. Sanal makinelerin yönetimini basitleştirmek için hipervizörler kullanılır - yeni sanal makineleri tek bir ana bilgisayar içinde hızlı bir şekilde başlatmanıza, durdurmanıza ve dağıtmanıza olanak tanıyan yazılım çözümleri. UNIX benzeri sistemler için en popüler hipervizörlerden biri KVM'dir.

KVM hipervizörü: mimari

KVM (Kernel-based Virtual Machine kısaltması), Linux ve benzerlerini çalıştıran bilgisayarlara dayalı sanallaştırmanın uygulanmasını mümkün kılan bir yazılımdır. Bir süredir KVM, Linux çekirdeğinin bir parçası olmuştur, bu nedenle onunla birlikte gelişir. Yalnızca donanım sanallaştırma desteğine sahip sistemlerde çalışır - Intel ve AMD işlemcilerde.

Çalışmayı organize etmek için KVM, işlemciye özel bir modül (kvm-intel veya kvm-amd) kullanarak çekirdeğe doğrudan erişim kullanır. Ek olarak, kompleks, popüler QEMU dahil olmak üzere ana çekirdek - kvm.ko ve UI öğelerini içerir. Hiper yönetici, diğer programlardan sanal makine dosyaları ve disk görüntüleri ile doğrudan çalışmanıza olanak tanır. Kendi belleği, diski, ağ erişimi, video kartı ve diğer cihazları olan her makine için izole bir alan oluşturulur.

KVM'nin avantajları ve dezavantajları

Herhangi bir yazılım çözümü gibi, KVM'nin de hangi barındırma sağlayıcılarının ve son kullanıcıların bu yazılımı kullanmaya karar verdiğine bağlı olarak hem artıları hem de eksileri vardır.

Bir hiper yöneticinin başlıca avantajları şunlardır:

  • bağımsız olarak tahsis edilen kaynaklar... KVM'nin kontrolü altında çalışan her sanal makine, kendi RAM miktarını ve kalıcı belleğini alır ve diğer alanlara "tırmanamaz", bu da işin kararlılığını artırır;
  • kapsamlı konuk işletim sistemi desteği... * BSD, Solaris, Linux dahil olmak üzere UNIX dağıtımları için tam desteğe ek olarak, Windows ve hatta MacOS kurmak mümkündür;
  • çekirdek ile etkileşim, işi yapan iş istasyonu donanımına doğrudan erişim sağlar Daha hızlı;
  • yazılım pazarı devlerinin desteği(RedHat Linux, HP, Intel, IBM), en yenileri de dahil olmak üzere artan sayıda donanım ve işletim sistemini kapsayacak şekilde projenin hızla gelişmesine olanak tanır;
  • basit yönetim- VNC ve çok sayıda üçüncü taraf yazılım ve eklenti aracılığıyla uzaktan kontrol etme yeteneği.

Bazı dezavantajlar da vardı:

  • hipervizörün göreceli gençliği (örneğin, Xen'e kıyasla) ve buna bağlı olarak patlayıcı büyüme, özellikle yeni donanım ve yazılım ortamı için destek eklerken çeşitli sorunlara yol açar;
  • ayarların karmaşıklığı, özellikle deneyimsiz bir kullanıcı için. Doğru, seçeneklerin çoğunun değiştirilmesi gerekmiyor - "kutudan çıktığı gibi" en uygun şekilde yapılandırılmışlar.

Hipervizörün işlevselliği ve özellikleri

KVM kompleksi, güvenlik, uygun bellek yönetimi, güvenilir veri depolama, canlı geçiş, performans, ölçeklenebilirlik ve kararlılık gibi temel özelliklerle karakterize edilir.

Güvenlik

KVM'de her makine bir Linux işlemidir, bu nedenle otomatik olarak standart güvenlik politikalarına ve diğer işlemlerden izolasyona tabidir. Özel eklentiler (SELinux gibi) diğer güvenlik öğelerini ekler - erişim kontrolü, şifreleme vb.

KVM, Linux çekirdeğinin bir parçası olduğu için hiper yönetici, güçlü bellek yönetimi araçlarını devralır. Her işlemin hafıza sayfaları, yani. sanal makineler performanstan ödün vermeden hızla kopyalanabilir ve değiştirilebilir. Çok işlemcili sistemleri destekleyen KVM, büyük miktarda belleği yönetme yeteneğine sahiptir. Bellek genelleştirmesi de desteklenir - aynı sayfaları birleştirmek ve istek üzerine makineye bir kopyasının yanı sıra diğer optimizasyon yöntemlerinin verilmesi.

Veri depolama

KVM, makinelerin görüntülerini ve verilerini depolamak için ana işletim sistemi tarafından desteklenen herhangi bir ortamı kullanabilir - sabit sürücüler, NAS, çıkarılabilir sürücüler, işi hızlandırmak için çok iş parçacıklı G / Ç'ye sahip olanlar da dahil. Ek olarak, hiper yönetici dağıtılmış dosya sistemleriyle çalışabilir - örneğin, GFS2. KVM diskleri, dinamik anlık görüntü oluşturma, şifreleme ve sıkıştırmayı destekleyen kendi benzersiz biçimine sahiptir.

KVM'nin önemli bir özelliği, canlı geçiş desteğidir: sanal makineleri durdurmadan farklı ana bilgisayarlar arasında taşıma. Kullanıcılar için bu geçiş tamamen görünmezdir - makine çalışır durumda kalır, performans düşmez ve ağ bağlantıları etkindir. Elbette geçiş, sanal makinenin mevcut durumunu bir anlık görüntüye kaydedip başka bir ana bilgisayara dağıtarak da mümkündür.

Performans ve ölçeklenebilirlik

Linux ile sıkı entegrasyon nedeniyle kompleksin ölçeklenebilirliği ve performansı, tamamen bu işletim sisteminden devralınmıştır. Böylece hiper yönetici, her sanal makinede 16 adede kadar işlemciyi (sanal veya fiziksel) ve 256 GB'a kadar RAM'i destekler. Bu, hipervizörün en ağır yüklü sistemlerde bile kullanılmasına izin verir.

istikrar

Yazılım paketi sürekli olarak geliştirilmektedir - başlangıçta yalnızca Linux x86 platformunu destekliyorsa, bugün tüm popüler sunucu işletim sistemleri de dahil olmak üzere düzinelerce farklı platform var. Ek olarak, ana platformla uyumluysa, işletim sisteminin değiştirilmiş bir yapısına sahip bir sanal makineyi kolayca dağıtabilirsiniz. Ve önde gelen yazılım üreticileriyle işbirliği sayesinde, KVM hipervizörü piyasadaki en kararlı ve güvenilir olarak adlandırılabilir.

KVM (Çekirdek Tabanlı Sanal Makine), Intel VT (Sanallaştırma Teknolojisi) veya AMD SVM (Güvenli Sanal Makine) tabanlı donanım sanallaştırmayı destekleyen bir x86 platformunda Linux ortamında sanallaştırma sağlayan bir yazılım çözümüdür.

KVM yazılımı, temel bir sanallaştırma hizmeti sağlayan yüklenebilir bir çekirdek modülünden (kvm.ko olarak adlandırılır), işlemciye özel yüklenebilir modül kvm-amd.ko veya kvm-intel.ko'dan ve kullanıcı modu bileşenlerinden (QEMU tarafından değiştirilmiş) oluşur. Tüm KVM yazılım bileşenleri açıktır. KVM'nin çalışması için gereken çekirdek bileşeni, 2.6.20'den (Şubat 2007) beri yukarı akış Linux çekirdeğine dahil edilmiştir. KVM ayrıca bir çekirdek modülü olarak FreeBSD'ye taşındı. KVM ile çalışmak için gereken değişiklikleri ana QEMU şubesine dahil etmek için çalışmalar devam etmektedir.

Linux, BSD, Solaris, Windows, Haiku, ReactOS, Plan 9, AROS Research Operating System ve OS X'in birçok türü ve sürümü dahil olmak üzere çok sayıda konuk işletim sistemi KVM ile çalışır. Ayrıca Android 2.2, Minix 3.1.2a , Solaris 10 U3 ve Darwin 8.0.1GNU / Hurd (Debian K16), Minix 3.1.2a, Solaris 10 U3 ve Darwin 8.0.1, yukarıda belirtilen işletim sisteminin bazı sürümleriyle birlikte bazı sınırlamalarla çalışır.

Bazı cihazların paravirtualizasyonu, Linux, OpenBSD, FreeBSD, NetBSD, Plan 9 ve Windows konuk işletim sistemlerinde kullanılabilir. VirtIO API. Para-sanal Ethernet kartlarını, disk G/Ç denetleyicisini, konuk tarafından tüketilen belleği değiştirmek için aygıtları ve SPICE veya VMware sürücülerini kullanan VGA grafik arabirimini destekler.

Çevre

KVM'nin kendisi öykünme gerçekleştirmez. Bunun yerine, bir kullanıcı alanı programı, sanal makine konuğunun adres alanını yapılandırmak için / dev / kvm arabirimini kullanır ve bunun aracılığıyla G / Ç aygıtlarını ve bir video bağdaştırıcısını öykünür.

KVM, sanal makinelerin değiştirilmemiş QEMU, VMware ve işletim sistemleri içeren diğer disk görüntülerini kullanmasına izin verir. Her sanal makinenin kendi sanal donanımı vardır: ağ kartları, disk, video kartı ve diğer aygıtlar.

Tarih

KVM yazılımı, 4 Eylül 2008'de Red Hat tarafından 107 milyon dolara satın alınan Qumranet tarafından oluşturuldu, geliştirildi ve bakımı yapıldı. Anlaşmanın ardından KVM (oVirt sanallaştırma yönetim sistemi ile birlikte) RHEV sanallaştırma platformunun bir parçası oldu. KVM, Paolo Bonzini tarafından desteklenmektedir.

Çalışma prensibi

Şu anda KVM, yüklenebilir bir çekirdek modülü aracılığıyla çekirdekle iletişim kurar. Linux, BSD, Solaris, Windows, Haiku, ReactOS ve AROS Research Operating System gibi çeşitli konuk işletim sistemleri desteklenir. KVM'nin (qemu) değiştirilmiş bir sürümü Mac OS X üzerinde çalışabilir. Not: KVM herhangi bir kendi kendine öykünme gerçekleştirmez; bunun yerine, bir kullanıcı alanı programı, konuk sanal sunucunun adres alanını yapılandırmak için / dev / kvm arabirimini kullanır, simüle edilmiş G / Ç kaynaklarını alır ve görüntüsünü ana bilgisayar görüntüsüne eşler.

KVM mimarisinde sanal makine, standart Linux zamanlayıcı tarafından programlanan normal bir Linux işlemi olarak çalışır. Aslında her sanal işlemci normal bir Linux işlemi gibi görünür. Bu, KVM'nin Linux çekirdeğinden tam olarak yararlanmasını sağlar. Aygıt öykünmesi, BIOS, PCI veri yolu, USB veri yolunun yanı sıra IDE ve SCSI disk denetleyicileri, ağ kartları vb. gibi standart bir aygıt kümesinin öykünmesini sağlayan değiştirilmiş bir qemu sürümü tarafından kontrol edilir.

işlevsellik

Güvenlik

Sanal makine bir Linux süreci olarak uygulandığından, izolasyon ve kaynak yönetimi için Linux standart güvenlik modelini kullanır. SELinux (Güvenlik-Geliştirilmiş Linux) ile, Linux çekirdeği zorunlu erişim kontrolleri, katmanlı ve çok katmanlı korumalar ekler ve güvenlik politikalarını yönetir. SELinux, güçlü kaynak yalıtımı sağlar ve Linux çekirdeğinde çalışan süreçlerin hareketliliğini kısıtlar.

Zorunlu Erişim Denetimi (MAC) güvenliğini ve Linux tabanlı sanallaştırmayı (KVM) entegre etmeye yönelik bir topluluk çalışması olan SVirt projesi, bir yöneticinin sanal makine yalıtım ilkelerini tanımlamasına olanak tanıyan bir altyapı sağlamak için SELinux üzerine kuruludur. SVirt, sanal makine kaynaklarının başka herhangi bir işlem (veya sanal makine) tarafından kullanılmamasını sağlamak için tasarlanmıştır; yönetici, ayrıntılı izinler belirterek bu ilkeyi tamamlayabilir; örneğin, bir grup sanal makinenin aynı kaynakları paylaşmasını sağlayın.

Hafıza yönetimi

KVM, Linux'tan güçlü bellek yönetimi özelliklerini devralır. Bir sanal makinenin belleği, diğer herhangi bir Linux işleminin belleği gibi depolanır ve takas edilebilir, performansı artırmak için büyük sayfalara kopyalanabilir, özetlenebilir veya diskteki bir dosyaya kaydedilebilir. Tekdüze Olmayan Bellek Erişimi (NUMA) teknolojisi desteği, sanal makinelerin büyük miktarda belleğe verimli bir şekilde erişmesine olanak tanır.

KVM, işlemci kullanımını en aza indirmek ve yüksek verim elde etmek için Intel Extended Page Table (EPT) ve AMD Rapid Virtualization Indexing (RVI) gibi işlemci üreticilerinin en yeni bellek sanallaştırma özelliklerini destekler.

Bellek sayfası genelleştirmesi, Çekirdek Aynı Sayfa Birleştirme (KSM) çekirdek işlevi kullanılarak desteklenir. KSM, her sanal makinenin belleğini tarar ve sanal makinelerin bazı bellek sayfaları aynıysa, bunları tek bir sayfada birleştirir, bu sanal makineler için ortak hale gelir ve tek bir kopyada saklanır. Konuk bu paylaşılan sayfayı değiştirmeye çalışırsa, kendi kopyası ile sunulur.

Veri depolama

KVM, IDE, SCSI ve SATA arabirimlerine sahip yerel sürücüler, NFS ve SAMBA / CIFS dahil Ağa Bağlı Depolama (NAS) veya iSCSI ve Fiber Kanal desteğine sahip SAN dahil olmak üzere sanal makine görüntülerini depolamak için Linux destekli herhangi bir ortamı kullanabilir... Depolama verimini ve yedekliliği iyileştirmek için çok iş parçacıklı G/Ç kullanılabilir.

Yine KVM, Linux çekirdeğinin bir parçası olduğu için, tüm lider satıcıların desteğiyle kanıtlanmış ve güvenilir bir depolama altyapısı kullanılabilir; depolama özelliği seti birçok üretim tesisinde test edilmiştir.

KVM, Global Dosya Sistemi (GFS2) gibi dağıtılmış dosya sistemlerinde sanal makine görüntülerini destekler, böylece birden çok ana bilgisayar tarafından paylaşılabilir veya mantıksal birimler kullanılarak genelleştirilebilir. Disk görüntülerinin ince provizyonu desteği, hepsini önceden değil, yalnızca VM gerektirdiğinde sağlayarak depolama kullanımını optimize eder. Tescilli KVM disk formatı QCOW2, anlık görüntü desteği ve birden çok düzeyde anlık görüntü desteğinin yanı sıra sıkıştırma ve şifreleme sağlar.

Canlı geçiş

KVM, çalışan sanal makineleri hizmeti kesintiye uğratmadan fiziksel ana bilgisayarlar arasında taşıma yeteneği sağlayarak canlı geçişi destekler. Canlı geçiş, kullanıcılar için şeffaftır: sanal makine açık kalır, ağ bağlantıları etkindir ve sanal makine yeni fiziksel sunucuya taşınırken kullanıcı uygulamaları çalışmaya devam eder.

Canlı geçişe ek olarak KVM, sanal makinenin mevcut durumunun bir kopyasının diske kaydedilmesini destekleyerek, onu depolamanıza ve daha sonra geri yüklemenize olanak tanır.

Aygıt sürücüleri

KVM, sanal makinelerin öykünülmüş aygıtlar yerine optimize edilmiş bir I/O arabirimi kullanmasına olanak tanıyan, ağ ve blok aygıtları için yüksek I/O performansı sağlayan, konuk işletim sistemine paravirtualized sürücülerin yüklendiği hibrit sanallaştırmayı destekler.

KVM hipervizörü, sanallaştırılmış sürücüler için Linux topluluğuyla işbirliği içinde IBM ve Red Hat tarafından geliştirilen VirtIO standardını kullanır; birden fazla hiper yöneticinin aynı aygıt sürücüsü setini kullanmasına izin veren ve konuk iletişimini geliştiren aygıt sürücüleri oluşturmaya yönelik hiper yöneticiden bağımsız bir arabirimdir.

VirtIO sürücüleri modern Linux çekirdeklerinde bulunur (en son sürüm 2.6.25'tir), Red Hat Enterprise Linux 4.8+ ve 5.3+ sürümlerinde bulunur ve Red Hat Enterprise Linux 3 için de mevcuttur. Red Hat, Microsoft Windows için VirtIO sürücülerini geliştirmiştir. ağ ve disk G/Ç işlemlerini optimize eden konuk işletim sistemleri; bu sürücüler, Microsoft Windows Hardware Quality Labs (WHQL) sertifika programı tarafından onaylanmıştır.

Performans ve ölçeklenebilirlik

KVM, 16 vCPU ve 256 GB RAM'e sahip sanal makineleri ve 256 çekirdekli ve 1 TB'ın üzerinde RAM'e sahip ana sistemleri destekleyen Linux'un performansını ve ölçeklenebilirliğini devralır. Şunları sağlayabilir:

  • SAP, Oracle, LAMP ve Microsoft Exchange gibi gerçek kurumsal uygulamalarda bare metale göre %95-135 performans;
  • standart bir sunucuda çalışan sanal makinelerde saniyede bir milyondan fazla ileti ve 200 μs'den daha az gecikme;
  • Tek bir sunucuda kurumsal uygulamaları çalıştıran 600'den fazla sanal makine ile maksimum konsolidasyon seviyeleri.

Bu, KVM'nin en zorlu iş yüklerini sanallaştırabileceği anlamına gelir.

özelleştirme

Sanal Makine Yöneticisini (VMM) Yapılandırma

Programı ilk kez başlattığınızda, her ikisi de bağlı olmayan iki kategori göreceksiniz. Bunlar, henüz çalışmayan standart KVM modüllerine bağlantılar. Bunları kullanmak için sağ tıklayın ve "bağlan"ı seçin.

Yeni bir bağlantı eklemek için menüden Dosya > Bağlantı Ekle'yi seçin. Bu, hipervizör tipini ve bağlantı tipini belirleyebileceğiniz bir pencere açacaktır. VMM, QUEMU / KVM ve Xen dahil olmak üzere hem yerel hem de uzak bağlantıları kullanabilir. Ayrıca, tüm kimlik doğrulama yöntemleri desteklenir.

Otomatik bağlantı kutusunu da işaretleyebilirsiniz. Programı bir sonraki başlatışınızda, bu bağlantılar kullanıma hazır olacaktır.

Programın diğer işlevlerine hızlıca bir göz atalım.
Ağ işlevselliği, Ana Bilgisayar Ayrıntıları açılarak görüntülenebilir veya değiştirilebilir. Orada ağ köprüsü işlemi için yardımcı programları da kuracağız.

Benzer şekilde, disk alt sisteminin parametrelerini değiştirebilirsiniz:

Sanal makine oluşturma

Komut satırından da bir sanal makine oluşturabilirsiniz, ancak biz VMM kullanacağız. İlk adım sezgisel olmalıdır. Bir ad girin ve kurulum diski için konumu ayarlayın. CD / DVD diski veya ISO görüntüsü şeklinde yerel bir cihaz olabileceği gibi bir HTTP veya FTP sunucusu, NFS veya PXE olabilir.

Yerel medyayı kullanıyoruz. Şimdi fiziksel bir cihaz mı yoksa bir görüntü mü olacağını belirtmeniz gerekiyor. Bizim durumumuzda ISO kullanılıyor. Ardından, ISO türünü ve sürümünü seçmeniz gerekir. Çok fazla hassasiyet gerektirmez, ancak doğru olanı seçmek sanal makinenizin performansını artıracaktır.

İşlemci sayısını ve RAM boyutunu belirledik:

Dördüncü aşama sanal disktir. Yeni bir resim oluşturabilir veya mevcut bir resmi kullanabilirsiniz. Diskin boyutunu seçmeniz ve disk görüntüsünün belirtilen boyutta hemen oluşturulup oluşturulmayacağını veya boyutunun gerektiğinde dinamik olarak büyüyeceğini belirtmeniz gerekir. Disk görüntüsü için tüm alanı bir kerede ayırmanın performansı iyileştirdiği ve dosya sistemi parçalanmasını azalttığı belirtilmelidir.

Ardından, disk alt sistemine de dikkat edeceğiz. Ancak, Kullanıcı modunda çalışırken, sanal disk görüntülerinin varsayılan olarak depolandığı / var öğesine yazma izninizin olmayacağını unutmayın. Bu nedenle, resimler için farklı bir konum belirlemeniz gerekecektir.

Aşama 5, bazı gelişmiş seçenekleri yapılandırma yeteneği ile özet verilerin çıktısıdır. Burada ağ türünü değiştirebilir, sabit MAC adresleri ayarlayabilir, sanallaştırma türünü ve hedef mimariyi seçebilirsiniz. Kullanıcı modunda çalışıyorsanız, ağ yapılandırma seçenekleriniz sınırlı olacaktır, örneğin ağ arayüzleri arasında köprü oluşturamayacaksınız. Ve son olarak: işlemciniz donanım sanallaştırmasını desteklemiyorsa, Virt Type alanı QUEMU değerine sahip olacak ve bunu KVM olarak değiştirmek imkansız olacaktır. Bir Ubuntu sanal makinesinin tipik ayarlarının nasıl göründüğünü görebilirsiniz:

  • KVM çekirdek modülü: GPL v2.
  • KVM kullanıcı ortamı modülü: LGPL v2.
  • QEMU sanal işlemci kitaplığı (libqemu.a) ve QEMU PC sistem öykünücüsü: LGPL.
  • Linux QEMU Kullanıcı Modu Emülatörü: GPL.
  • BIOS dosyaları (bios.bin, vgabios.bin ve vgabios-cirrus.bin): SeaBIOS (LGPL v2 veya üstü).

Grafik araçları

libvirt, KVM'yi destekler

  • KVM için Kimchi web yönetim aracı
  • Virtual Machine Manager, KVM makinelerinin oluşturulmasını, düzenlenmesini, başlatılmasını ve durdurulmasını ve ayrıca ana bilgisayarlar arasında soğuk geçişli VM'leri destekler
  • Proxmox Virtual Environment, KVM ve OpenVZ'yi içeren ücretsiz bir sanallaştırma yönetim paketidir. Çıplak makine yükleyicisi, uzak web yönetimi arabirimi ve isteğe bağlı ticari destek içerir.
  • OpenQRM, heterojen veri merkezlerini yönetmek için bir yönetim platformudur.
  • GNOME Kutuları Linux'ta libvirt konuklarını yönetmek için Gnome arayüzü.
  • oVirt, libvirt tabanlı KVM için ücretsiz bir sanallaştırma yönetim aracıdır

uygulama

  • Debian 5.0 ve üstü
  • Gentoo Linux'u
  • illumos tabanlı dağıtımlar
  • AçıkIndiana
  • Red Hat Enterprise Linux (RHEL) 5.4 ve üstü
  • akıllı işletim sistemi
  • SUSE Linux Enterprise Server (SLES) 11 SP1 ve üstü
  • Ubuntu 10.04 LTS veya üstü
  • Univention Kurumsal Sunucu

Bu tanıtım yazısında kısaca hizmetin geliştirilmesinde kullanılan tüm yazılım araçlarını anlatacağım. Onlar hakkında daha fazla ayrıntı aşağıdaki makalelerde tartışılacaktır.

Niye ya ? Bu işletim sistemi bana yakın ve anlaşılır, bu yüzden bir dağıtım kiti seçerken eziyet, eziyet ve fırlatma yaşamadım. Red Hat Enterprise Linux'a göre belirli bir avantajı yok, ancak tanıdık bir sistemle çalışmaya karar verildi.

Altyapıyı benzer teknolojileri kullanarak bağımsız olarak dağıtmayı planlıyorsanız, RHEL'i almanızı tavsiye ederim: iyi belgeler ve iyi yazılmış uygulama programları sayesinde, bu bir büyüklük sırası değilse, kesinlikle iki kat daha basit olacaktır ve teşekkürler Gelişmiş bir sertifika sistemine sahip olmak için, bu işletim sistemine uygun düzeyde aşina olan bir dizi uzmanı kolayca bulabilirsiniz.

Yine kullanmaya karar verdik. Debian Sıkma gelen bir dizi paketle Sid / Deneysel ve yamalarımızla desteklenen ve oluşturulan bazı paketler.
Paketlerle bir depo yayınlama planları var.

Bir sanallaştırma teknolojisi seçerken iki seçenek göz önünde bulunduruldu - Xen ve KVM.

Çok sayıda geliştiricinin, barındırıcının, Xen tabanlı ticari çözümlerin varlığı gerçeği de dikkate alındı ​​- KVM'ye dayalı bir çözüm uygulamak daha ilginçti.

KVM'yi kullanmaya karar vermemizin ana nedeni, sanal makineleri FreeBSD ve gelecekte MS Windows ile çalıştırma ihtiyacıdır.

Sanal makineleri yönetmek için API'sini kullanan ürünleri kullanmanın son derece uygun olduğu ortaya çıktı: virsh, sanal yönetici, sanal kurulum, NS.

Bu, sanal makinelerin ayarlarını saklayan, yöneten, üzerinde istatistik tutan, sanal makinenin arayüzünün başlangıçta yükselmesini sağlayan, cihazları makineye bağlayan - genel olarak birçok faydalı iş yapan ve biraz daha.

Tabii ki, çözüm mükemmel değil. Dezavantajları şunları içerir:

  • Tamamen çılgın hata mesajları.
  • QMP (QEMU İzleme Protokolü) bunu oldukça iyi yapsa da, sanal makine yapılandırmasının bir kısmını anında değiştirememe.
  • Bazen bilinmeyen bir nedenden dolayı libvirtd'ye bağlanmak imkansızdır - harici olaylara yanıt vermeyi durdurur.

Hizmetin en başında uygulanmasındaki temel sorun, sanal makineler için kaynakların sınırlandırılmasıydı. Xen'de bu sorun, kaynakları sanal makineler arasında dağıtan dahili bir zamanlayıcı kullanılarak çözüldü - ve hepsinden önemlisi, disk işlemlerini sınırlama yeteneği de uygulandı.

Çekirdek kaynak tahsis mekanizmasının ortaya çıkmasından önce KVM'de böyle bir şey yoktu. Linux'ta her zaman olduğu gibi, bu işlevlere özel bir dosya sistemi aracılığıyla erişildi. grup normal write () sistem çağrılarını kullanarak, bir gruba bir işlem ekleyebilir, ağırlığını papağanlara atayabilir, üzerinde çalışacağı çekirdeği belirleyebilir, bu işlemin kullanabileceği disk bant genişliğini belirtebilirsiniz veya, yine kilo ver.

Kâr, tüm bunların çekirdeğin içinde uygulanmasıdır ve onu yalnızca sunucu için değil, aynı zamanda masaüstü için de kullanabilirsiniz (ünlü "Harikalar Yapan ~ 200 Line Linux Çekirdek Yaması"nda kullanılmıştır). Ve bence bu, sevilen # 12309 dışında 2.6 dalındaki en önemli değişikliklerden biri ve dosyalanan bir sonraki dosya sistemi değil. Eh, belki, POHMELFS dışında (ama tamamen isminden dolayı).

Bu yardımcı program kitaplığına karşı tutumum çok belirsiz.

Bir yandan, şöyle görünüyor:

Ve bu şeyi kaynaktan birleştirmek de çok zor ve hatta bir pakette daha da zor: bazen bana sıfırdan Linux'u Sıfırdan kurmak biraz daha kolay gibi geliyor.

Öte yandan, sanal makineler için görüntüler oluşturmanıza, bunları değiştirmenize, sıkıştırmanıza, grub yüklemenize, bölüm tablosunu değiştirmenize, yapılandırma dosyalarını yönetmenize, donanım makinelerini sanal bir ortama aktarmanıza, sanal makineleri aktarmanıza izin veren çok güçlü bir şeydir. bir görüntüden diğerine, sanal makineleri görüntüden donanıma aktarın ve açıkçası fantezim beni biraz hayal kırıklığına uğratıyor. Ah, evet: ayrıca bir Linux sanal makinesi içinde bir arka plan programı çalıştırabilir ve sanal makine verilerine canlı olarak erişebilir ve tüm bunları kabuk, python, perl, java, ocaml'de yapabilirsiniz. Bu, yapabileceklerinizin kısa ve tam bir listesi değildir.

İlginç bir şekilde, kodun çoğu montaj sırasında ve proje dokümantasyonu sırasında oluşturulur. Ocaml, perl çok yaygın olarak kullanılmaktadır. Kodun kendisi C ile yazılır ve daha sonra OCaml'e sarılır ve tekrarlayan kod parçaları kendileri tarafından üretilir. Görüntülerle çalışma, içinde bir kanal aracılığıyla komutların gönderildiği özel bir hizmet görüntüsü (süpermin cihazı) başlatılarak gerçekleştirilir. Bu görüntüde parted, mkfs ve diğer faydalı sistem yöneticileri gibi bir dizi kurtarma aracı bulunmaktadır.

Son zamanlarda, nandroid görüntüsünden ihtiyacım olan verileri seçerken onu evde bile kullanmaya başladım. Ancak yaffs destekli bir kernel gerektirir.

Başka

Aşağıda, kullanılan yazılım araçlarının açıklamasına daha ilginç bağlantılar verilmiştir - eğer ilgileniyorsanız, okuyun ve kendiniz çalışın. Örneğin,