Buyukweb
KVM Sanallaştırma Nedir? VDS'de KVM Mimarisi ve libvirt Rehberi

KVM Sanallaştırma Nedir? VDS'de KVM Mimarisi ve libvirt Rehberi

KVM sanallaştırma teknolojisi mimarisi: Linux kernel modülü, QEMU emülasyon, libvirt yönetim, virsh CLI, virtio paravirt, VFIO PCIe passthrough ve Buyukweb VDS bağlamında pratik kullanımı.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü19 dakika okuma

KVM Sanallaştırma Nedir? VDS'de KVM Mimarisi ve libvirt Rehberi

KVM (Kernel-based Virtual Machine), Linux çekirdeğinin doğrudan bir parçası haline gelmiş tam donanım destekli sanallaştırma çözümüdür. 2007 yılında Linux 2.6.20 çekirdeğine entegre edilen bu modül, bugün dünyadaki büyük hosting ve bulut altyapılarının önemli bir kısmının üzerinde döndüğü teknolojidir. Bu rehberde KVM'in mimari iç yapısını, QEMU ile ilişkisini, libvirt yönetim katmanını, virsh CLI'sını, virtio paravirtualized sürücüleri, VFIO PCIe passthrough mekaniğini, performans ayarlarını ve güvenlik modelini Linux sistem yöneticisi gözünden ele alıyoruz.

Buyukweb perspektifi: Buyukweb'in VDS sunucu altyapısı KVM üzerine kuruludur. Intel Xeon E5-v4 / E5-v2 platformları, NVMe SSD'ler ve virtio paravirt sürücüleri ile her müşteriye garanti edilmiş vCPU, RAM, disk tahsis edilir. KVM'in donanım izolasyonu sayesinde root erişimi, kendi kernel'inizi yükleme, kendi paket yığınınızı kurma özgürlüğüne sahip olursunuz. Bursa Pendc Tier 3 veri merkezimizde barındırılan sunucularımız hakkında bilgi için 0850 302 60 70 hattı 7/24 açıktır.

KVM'in Doğuşu ve Konumlandırması

KVM, 2006 yılında Qumranet adlı İsrailli bir şirket tarafından geliştirildi ve 2008'de Red Hat tarafından satın alındı. GPL v2 lisanslıdır; geliştirme topluluğunu Red Hat sponsorluğunda Linux çekirdeği bakımcıları (kernel maintainers) yürütür. KVM, kendi başına bir hipervizör değildir; Linux kernel'ını tam donanım destekli (HVM — Hardware-assisted Virtualization) bir hipervizöre dönüştüren bir kernel modülüdür.

Mimari sınıflandırma tartışmalıdır: literatürde KVM çoğu zaman "Type 2 / hosted" olarak listelenir çünkü teknik olarak Linux host OS üzerinde modül olarak yüklenir. Pratikte ise Linux kernel'ının kendisi doğrudan donanım üzerinde çalıştığı için KVM'in performans karakteristikleri Type 1 / bare metal hipervizörlerle (VMware ESXi, Microsoft Hyper-V) eşdeğerdir. Bu nedenle bazı kaynaklar KVM'i "Type 1.5" veya "hybrid" olarak sınıflandırır. Genel sanallaştırma tipoloji karşılaştırması için ayrı sanallaştırma karşılaştırma yazımıza bakabilirsiniz.

KVM Mimari Bileşenleri

1. Linux Kernel Modülleri (kvm.ko + kvm-intel.ko / kvm-amd.ko)

KVM'in kalbi iki kernel modülünden oluşur:

  • kvm.ko — mimari bağımsız çekirdek modül; /dev/kvm karakter cihazını oluşturur. Bu cihaz, userspace programların ioctl çağrılarıyla VM oluşturmasına izin verir.
  • kvm-intel.ko veya kvm-amd.ko — CPU üreticisine özgü modül. Intel VT-x (VMX) veya AMD-V (SVM) komut setlerini sürer.

Yüklü durumu doğrulamak için:

lsmod | grep kvm
# kvm_intel             425984  4
# kvm                  1191936  1 kvm_intel
# irqbypass              16384  1 kvm

ls -l /dev/kvm
# crw-rw---- 1 root kvm 10, 232 ... /dev/kvm

CPU desteğini kontrol etmek:

grep -E 'vmx|svm' /proc/cpuinfo | head -1
# vmx → Intel VT-x | svm → AMD-V

2. QEMU — Donanım Çevre Birim Emülasyonu

KVM yalnızca CPU sanallaştırmasını ve bellek yönetimini ele alır; geri kalan donanım çevre birimleri (chipset, BIOS/UEFI firmware, PCI/PCIe veriyolu, disk denetleyici, ağ kartı, USB, ses, grafik) QEMU userspace süreci tarafından emüle edilir. Her KVM sanal makinesi, host sistemde tek bir qemu-system-x86_64 (veya mimariye özgü) süreci olarak görünür.

Önemli ayrım: QEMU CPU emülasyonu yapmaz (yapabilir ama KVM ile birlikte bu kısım kapatılır); CPU komutları doğrudan host CPU'sunda VMX/SVM modunda çalıştırılır. QEMU sadece donanım çevre birimlerini emüle eder; bu yüzden VM içinde lspci çıktısında bir Intel Q35 chipset, sanal IDE/SATA denetleyici, Intel e1000 NIC görürsünüz (veya virtio kullanılıyorsa virtio-blk/virtio-net).

QEMU komut satırından bağımsız çalıştırma (manuel test):

qemu-system-x86_64 \
  -enable-kvm \
  -m 4096 \
  -smp 2 \
  -cpu host \
  -drive file=disk.qcow2,if=virtio \
  -netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
  -cdrom ubuntu-22.04.iso \
  -boot d \
  -vnc :0

Pratikte bu uzun komutu manuel yazmak yerine libvirt katmanı kullanılır.

3. Donanım Sanallaştırma Eklentileri (HVM)

KVM, CPU üzerindeki donanım sanallaştırma eklentilerini olmazsa olmaz bir gereksinim olarak kullanır:

  • Intel VT-x + EPT (Extended Page Tables): "Ring -1" (VMX root mode) katmanı ekler. Hipervizör (KVM) buraya oturur; guest OS normal Ring 0'da çalışmaya devam eder. EPT, ikinci aşamalı bellek adres çevirisini donanımda yapar — geleneksel "shadow page table" yaklaşımının yaklaşık %30-40 bellek overhead'ını ortadan kaldırır.
  • AMD-V + RVI (Rapid Virtualization Indexing) / NPT (Nested Page Tables): Intel VT-x + EPT'nin AMD karşılığı. İşleyiş prensibi aynıdır; isimlendirme farklıdır.

Bu donanım desteği olmayan eski CPU'larda KVM kurulamaz; QEMU TCG (Tiny Code Generator) ile yazılım emülasyon kullanılabilir ama performans 10-50x daha yavaştır.

Type 1 vs Type 2 KVM Tartışması

Klasik tipoloji şöyledir:

Boyut Type 1 (Bare Metal) Type 2 (Hosted)
Konum Donanım üzeri Host OS üzeri
Örnekler VMware ESXi, Hyper-V, Xen VirtualBox, VMware Workstation
Performans Maksimum Host overhead'lı

KVM'in ilginç konumlandırması: Linux host OS kernel'ı zaten doğrudan donanım üzerinde çalışıyor ve KVM modülü o kernel'ın bir parçası. Ring -1'e (VMX root) host kernel yerleşiyor. Bu yüzden performans olarak Type 1 davranışı sergiler ama kavramsal olarak Type 2 listelenebilir. Modern tartışma çoğunlukla KVM'i Type 1 olarak kabul eder; çünkü Linux kernel zaten bir Tip 1 hipervizör çekirdeği olarak çalışmaktadır.

virtio — Paravirtualized I/O Sürücüleri

KVM'in performans avantajının kalbinde virtio standardı yatar. Tam emülasyonda guest OS, host'taki sanal donanımla "gerçek bir donanımmış gibi" konuşur — bu yaklaşım her I/O işleminde context switch ve emülasyon overhead'i yaratır. Paravirtualization yaklaşımında ise guest OS, sanallaştırıldığını bilir ve hipervizörle özel bir protokol üzerinden konuşur. virtio, bu protokolü standartlaştıran açık spesifikasyondur.

Başlıca virtio sürücüleri:

  • virtio-net: Sanal ağ kartı. Çoklu kuyruk (multi-queue) desteği ile birden fazla vCPU üzerinde paralel paket işleme; vhost-net ile kernel-bypass.
  • virtio-blk: Sanal block storage cihazı. NVMe IOPS'unu büyük ölçüde guest'e taşır.
  • virtio-scsi: Daha modern alternatif; hotplug, SCSI komut seti tam desteği, çoklu LUN.
  • virtio-balloon: Memory ballooning. Hipervizör, guest'in kullanmadığı belleği geri alabilir.
  • virtio-rng: Entropi kaynağı. Cryptographic operations için guest'in /dev/random'ını host'tan besler.
  • virtio-fs: Host-guest dosya sistemi paylaşımı (FUSE benzeri ama daha hızlı).
  • virtio-console: Seri/grafik konsol bağlantısı.
  • virtio-gpu: 2D/3D grafik hızlandırma (virgl).

Performans karşılaştırması (kabaca):

Yaklaşım Native'e oranla
Tam emülasyon (Intel e1000, IDE) %20-30 (büyük kayıp)
virtio paravirt %95+ (yaklaşık native)
SR-IOV / VFIO passthrough %99+ (neredeyse native)

Bu nedenle Buyukweb VDS sunucularında varsayılan olarak virtio-net, virtio-blk, virtio-scsi aktiftir. Windows guest'lerde virtio sürücülerini ayrıca yüklemek gerekir (Fedora projesinin virtio-win.iso paketi).

VFIO ve SR-IOV — PCIe Passthrough

Bazı iş yükleri (GPU compute, yüksek frekanslı ağ, FPGA, RDMA NIC) için virtio bile yeterince hızlı değildir; fiziksel PCIe cihazını doğrudan VM'e bağlamak gerekir. KVM bunu VFIO (Virtual Function I/O) çerçevesi ile yapar.

VFIO PCIe Passthrough

Tam bir PCIe cihazını tek bir VM'e adamak için:

  1. IOMMU aktivasyonu: Intel VT-d veya AMD-Vi donanım desteği şart. Kernel parametresine intel_iommu=on iommu=pt (veya AMD için amd_iommu=on) eklenir.
  2. Cihazı host sürücüsünden ayırma: Hedef PCIe cihazı vfio-pci driver'a bağlanır (/sys/bus/pci/drivers/vfio-pci).
  3. IOMMU grup kontrolü: find /sys/kernel/iommu_groups/ -type l ile grup yapısı incelenir; aynı IOMMU grubundaki tüm cihazlar birlikte passthrough edilmelidir.
  4. libvirt XML'e <hostdev> bloğu eklenir.

GPU passthrough en yaygın senaryodur (oyun host'u, AI/ML eğitimi). Buyukweb yapay zeka sunucu paketleri CPU-yoğun ML workload odaklıdır; GPU passthrough barındırılan paketler arasında değildir — GPU gerektiren projeler için ayrıca GPU VDS seçeneği değerlendirilebilir.

SR-IOV (Single Root I/O Virtualization)

Yüksek hızlı ağ (40G/100G) ve aşırı paket-per-second iş yükleri için, tek bir fiziksel ağ kartı PF (Physical Function) + birden çok VF (Virtual Function) olarak görünür hale getirilir. Her VF, ayrı bir VM'e VFIO ile bağlanır. Sonuç: kernel-bypass + paralel donanım kuyrukları + her VM neredeyse hat hızında ağ kapasitesi.

Tipik etkinleştirme:

# 8 sanal fonksiyon oluştur
echo 8 > /sys/class/net/ens2f0/device/sriov_numvfs

lspci | grep -i ethernet
# ...Virtual Function görünür

libvirt — KVM Yönetim Katmanı

libvirt, KVM (ve diğer birçok hipervizörün) üstüne oturan soyutlama ve yönetim API'sıdır. C, Python, Go, Java istemcileri vardır. libvirtd daemon'ı (modern dağıtımlarda modüler: virtqemud, virtnetworkd, virtstoraged) host üzerinde çalışır ve sanal makineleri yönetir.

libvirt XML — Domain Tanımı

Bir KVM VM'i, libvirt XML dosyasıyla tanımlanır. Tipik bir VM XML'i:

<domain type='kvm'>
  <name>ubuntu-vm</name>
  <memory unit='KiB'>4194304</memory>
  <vcpu placement='static'>2</vcpu>
  <cpu mode='host-passthrough' check='none'/>
  <os>
    <type arch='x86_64' machine='pc-q35-7.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <devices>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none' io='native'/>
      <source file='/var/lib/libvirt/images/ubuntu-vm.qcow2'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <source bridge='br0'/>
      <model type='virtio'/>
    </interface>
    <graphics type='vnc' port='-1'/>
  </devices>
</domain>

XML'i virsh edit <vm-name> ile düzenleyebilir veya virsh dumpxml <vm-name> ile alabilirsiniz.

virsh CLI — Günlük Komutlar

virsh libvirt'in komut satırı arayüzüdür. En sık kullanılan komutlar:

# VM'leri listele
virsh list --all

# VM başlat / durdur / askıya al
virsh start ubuntu-vm
virsh shutdown ubuntu-vm    # graceful (ACPI)
virsh destroy ubuntu-vm     # forced (power off)
virsh suspend ubuntu-vm
virsh resume ubuntu-vm

# Seri konsol bağlantısı (SSH yoksa kurtarma)
virsh console ubuntu-vm

# XML düzenle / dump
virsh edit ubuntu-vm
virsh dumpxml ubuntu-vm > ubuntu-vm.xml

# Otomatik başlatma (host boot'unda)
virsh autostart ubuntu-vm

# Snapshot
virsh snapshot-create-as ubuntu-vm snap-1 "ilk durum"
virsh snapshot-list ubuntu-vm
virsh snapshot-revert ubuntu-vm snap-1

# Kaynak değişimi (çalışırken / kapalıyken)
virsh setmem ubuntu-vm 8G --config
virsh setvcpus ubuntu-vm 4 --config

# Disk ekle
virsh attach-disk ubuntu-vm /var/lib/libvirt/images/extra.qcow2 vdb --driver qemu --subdriver qcow2 --persistent

virt-manager — GUI ve Diğer Yardımcı Araçlar

  • virt-manager: GTK tabanlı grafik arayüz; KVM/QEMU VM'leri görsel olarak yönetir.
  • virt-install: Komut satırından yeni VM oluşturma.
  • virt-clone: Mevcut VM'i klonlama (UUID, MAC adresleri sıfırlanır).
  • virt-sysprep: VM şablonu hazırlama (host-specific bilgi temizleme).
  • virt-customize: Disk imajına SSH key, paket, kullanıcı enjekte etme.
  • virt-viewer: Uzaktan VNC/SPICE konsol bağlantısı.

Pratik VM Oluşturma (Ubuntu 22.04 host)

Bir Ubuntu LTS host üzerinde KVM stack kurulumu ve ilk VM:

# Bağımlılıklar
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system virtinst bridge-utils virt-manager

# libvirt grubuna kullanıcı ekle
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

# libvirtd başlat
sudo systemctl enable --now libvirtd

# Sistem doğrulama
virt-host-validate
# QEMU: Checking for hardware virtualization              : PASS
# QEMU: Checking if device /dev/kvm exists                : PASS
# QEMU: Checking if IOMMU is enabled by kernel            : PASS

# Ubuntu Server 22.04 VM kurulumu (network install)
virt-install \
  --name ubuntu-test \
  --ram 4096 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/ubuntu-test.qcow2,size=20,format=qcow2 \
  --os-variant ubuntu22.04 \
  --network bridge=br0,model=virtio \
  --graphics vnc \
  --console pty,target_type=serial \
  --location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/'

VM kurulumdan sonra:

virsh list
virsh console ubuntu-test     # konsola bağlan

Disk Format Seçimi: qcow2 vs raw

KVM'de iki temel disk formatı kullanılır:

Özellik qcow2 raw
Sparse (thin provisioning) Evet Evet (filesystem desteğine bağlı)
Snapshot Yerleşik Hayır (LVM gerekir)
Copy-on-write Evet Hayır
Sıkıştırma Evet Hayır
Şifreleme Evet (LUKS) Hayır (LUKS host seviyesinde)
Performans Hafif overhead Maksimum
Backing chain Evet (template + delta) Hayır

Pratik öneri:

  • Genel kullanım: qcow2 (snapshot ve thin provisioning değerli).
  • Yüksek I/O yoğun veritabanı: raw veya LVM logical volume.
  • VM şablonu zincirleri (CI/CD): qcow2 backing chain ile her yeni VM dakikalar yerine saniyeler.
# qcow2 oluştur
qemu-img create -f qcow2 ubuntu.qcow2 20G

# Format dönüştür
qemu-img convert -O raw ubuntu.qcow2 ubuntu.raw

# Backing chain (template'den child)
qemu-img create -f qcow2 -b base.qcow2 -F qcow2 child.qcow2

Storage Pool'lar ve Ağ Modları

Storage Pool

libvirt birden fazla depolama backend'i destekler:

  • dir: Yerel dosya sistemi dizini (varsayılan /var/lib/libvirt/images).
  • logical: LVM volume group; her VM bir logical volume.
  • iscsi: Uzak iSCSI hedefi.
  • nfs: NFS shared storage (live migration için gerekli).
  • rbd: Ceph RADOS Block Device (dağıtık depolama).
  • zfs: OpenZFS pool üzerinde zvol.

Storage pool tanımlama örneği:

virsh pool-define-as vm-storage dir --target /data/vms
virsh pool-build vm-storage
virsh pool-start vm-storage
virsh pool-autostart vm-storage

Ağ Modları

  • NAT (varsayılan): virbr0 köprüsü + dnsmasq DHCP + iptables MASQUERADE. VM'ler dışarı çıkar, dışarıdan VM'lere doğrudan erişim için port-forward gerekir.
  • Bridge: Linux bridge (br0) veya Open vSwitch üzerinden fiziksel ağa katılım. VM'in IP'si LAN'da görünür. Üretim VDS senaryosunun standardıdır.
  • Routed: Host, VM'ler için router gibi davranır; NAT yok, MASQUERADE yok, statik routing.
  • Isolated: VM'ler birbiriyle konuşur, dış dünyaya çıkışı yok. Lab senaryoları için.
  • macvtap: VM'in MAC'i fiziksel NIC'e doğrudan asılır; bridge'den hafif ama host-VM iletişimi kısıtlı.

Snapshot ve Live Migration

Snapshot

Disk + bellek + cihaz durumunu donduran nokta. Test senaryolarında, kernel yükseltmeden önce, riskli güncelleme öncesi vazgeçilmezdir.

virsh snapshot-create-as ubuntu-vm pre-upgrade "Kernel öncesi"
# güncelleme yapılır
# beklenmedik problem olursa:
virsh snapshot-revert ubuntu-vm pre-upgrade

Live Migration

Çalışan VM'i (durduramadan) başka bir host'a taşıma. Shared storage (NFS, Ceph, iSCSI) ve aynı CPU ailesi gereklidir.

virsh migrate --live --persistent ubuntu-vm qemu+ssh://host2/system

Senaryoları: donanım bakımı, host yük dengeleme, datacenter taşıması. Buyukweb VDS altyapısında planlı bakım operasyonları için kullanılan tekniktir.

Nested Virtualization

KVM içinde KVM çalıştırmak — "nested" sanallaştırma — eğitim, CI/CD test ve sanallaştırma lab senaryolarında işe yarar. Intel platformunda etkinleştirmek için:

# Host kernel parametresi
echo "options kvm_intel nested=1" | sudo tee /etc/modprobe.d/kvm.conf

# Modül yeniden yükle
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel

# Doğrulama
cat /sys/module/kvm_intel/parameters/nested
# Y

Guest VM XML'inde CPU modeli host-passthrough ya da <feature policy='require' name='vmx'/> eklenmelidir.

Performans uyarısı: Nested VM tipik olarak %10-25 CPU degradation yaşar. Üretim iş yükü için uygun değildir; eğitim/test/lab için tolere edilebilir. Buyukweb nested sunucu paketleri bu senaryo için tasarlanmıştır; VT-x geçişi açık gelir.

Cloud-init ile Otomatik VM Provisioning

Yeni VM'leri elle kurmak yerine, cloud-init ile otomatik konfigürasyon (kullanıcı, SSH anahtarı, paket, network) yapmak modern uygulamadır.

# cloud-init user-data örneği
cat > user-data <<'YAML'
#cloud-config
hostname: web-01
users:
  - name: deploy
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-ed25519 AAAA...
packages:
  - nginx
  - postgresql
runcmd:
  - systemctl enable --now nginx
YAML

# Seed ISO oluştur
cloud-localds seed.iso user-data

# Cloud image (Ubuntu 22.04 cloud-img)
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

# VM oluştur
virt-install \
  --name web-01 --memory 4096 --vcpus 2 \
  --disk path=jammy-server-cloudimg-amd64.img,format=qcow2 \
  --disk path=seed.iso,device=cdrom \
  --import --os-variant ubuntu22.04 \
  --network bridge=br0,model=virtio \
  --graphics none

VM boot ettiğinde cloud-init seed ISO'sundaki yapılandırmayı okuyup uygular. CI/CD pipeline'larında dakikalar içinde tekrarlanabilir VM dağıtımı.

Performans Tuning

KVM'in varsayılan yapılandırması iyi başlangıç verir; üretim için aşağıdaki ince ayarlar fark yaratır.

1. CPU Pinning ve NUMA Farkındalığı

vCPU'ları belirli fiziksel CPU'lara sabitlemek (cache locality, NUMA boundary). XML:

<vcpu placement='static'>4</vcpu>
<cputune>
  <vcpupin vcpu='0' cpuset='2'/>
  <vcpupin vcpu='1' cpuset='3'/>
  <vcpupin vcpu='2' cpuset='4'/>
  <vcpupin vcpu='3' cpuset='5'/>
</cputune>
<numatune>
  <memory mode='strict' nodeset='0'/>
</numatune>

2. Hugepages (1GB)

TLB miss oranını düşürür; bellek-yoğun iş yüklerinde %10-20 hız.

# Sistemde 16 adet 1GB hugepage rezerve et
echo 16 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages

# Kalıcı: kernel cmdline
# default_hugepagesz=1G hugepagesz=1G hugepages=16

VM XML'de:

<memoryBacking>
  <hugepages>
    <page size='1048576' unit='KiB'/>
  </hugepages>
</memoryBacking>

3. virtio-net Multi-Queue

Yüksek paket-per-second iş yüklerinde paralel kuyruk:

<interface type='bridge'>
  <source bridge='br0'/>
  <model type='virtio'/>
  <driver name='vhost' queues='4'/>
</interface>

VM içinde:

ethtool -L eth0 combined 4

4. QEMU IOThread

Disk I/O'yu vCPU thread'inden ayrı bir kernel thread'e atar:

<iothreads>2</iothreads>
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none' io='native' iothread='1'/>
  ...
</disk>

5. vhost-net ve vhost-user

vhost-net ağ veri yolunu kernel space'e taşır (userspace QEMU bypass). vhost-user ise DPDK/OVS-DPDK gibi userspace ağ stack'leriyle entegrasyon için kullanılır.

6. Memory Ballooning

Belleği VM'ler arasında dinamik tahsis için virtio-balloon driver. Oversubscription dürüstlüğü kritik: Buyukweb VDS paketlerinde garanti edilmiş RAM tahsisi vardır; balloon driver kapasite mühendisliği için kullanılır, müşteriye taahhüt edilen RAM her zaman korunur.

Güvenlik Modeli

KVM'in güvenlik tasarımı çok katmanlıdır.

sVirt — SELinux ile VM İzolasyonu

sVirt, her KVM/QEMU sürecini ayrı bir SELinux MCS (Multi-Category Security) etiketiyle çalıştırır. Bir VM diğerinin disk imajına ulaşamaz; QEMU sürecinin host dosya sistemindeki erişim yetkisi sıkı şekilde sınırlandırılır.

# QEMU sürecinin SELinux context'i
ps -eZ | grep qemu
# system_u:system_r:svirt_t:s0:c123,c456 qemu...

# Disk imajının context'i
ls -lZ /var/lib/libvirt/images/
# system_u:object_r:svirt_image_t:s0:c123,c456 ubuntu-vm.qcow2

Aynı MCS kategori kümesi olmayan iki süreç birbirinin dosyalarına erişemez — bu, qcow2 dosyalarının VM'ler arası izolasyonunu donanım izolasyona ek olarak güçlendirir.

libvirt Dynamic Ownership

libvirt, VM başladığında disk dosyalarının sahipliğini qemu:qemu (veya yapılandırmaya göre başka bir UID/GID) olarak ayarlar; VM durduğunda eski sahipliği geri yükler. Bu mekanizma, disk dosyalarının yanlışlıkla geniş izinli durumda kalmasını engeller.

cgroup ile Kaynak Limitleri

Her libvirt VM kendi cgroup hiyerarşisine yerleştirilir. CPU shares, memory limit, block I/O bandwidth (blkio.throttle) gibi kısıtlar tanımlanabilir.

Spectre / Meltdown / L1TF / MDS

Modern KVM'de speculative execution side-channel açıkları için mikrokod güncellemeleri, kernel mitigation'ları (spec_store_bypass_disable, l1tf=full, mds=full,nosmt) ve guest CPU özellik kontrolü yapılır.

# Host'taki aktif mitigation'lar
grep . /sys/devices/system/cpu/vulnerabilities/*

Live migration sırasında kaynak ve hedef CPU'ların aynı mitigation seviyesine sahip olması gerekir.

KVM ve Alternatif Hipervizör Karşılaştırması

Özellik KVM VMware ESXi Microsoft Hyper-V Xen Proxmox VE
Tür Type 1.5 (Linux kernel modülü) Type 1 Type 1 Type 1 (dom0) Type 1 (KVM + LXC)
Lisans GPL v2 Ticari abonelik Windows Server dahili GPL AGPLv3 + abonelik
Yönetim libvirt CLI / virt-manager vSphere Client Hyper-V Manager xl/xen-tools Web GUI (8006)
Container Hayır (ayrı LXC/Docker) Hayır Hayır Hayır Yerleşik LXC
Live Migration libvirt + shared storage vMotion Live Migration xl migrate Yerleşik
HCL Çok geniş (Linux desteği) Sertifikalı liste Windows-odaklı Daralan KVM'inkiyle aynı
Olgunluk 2007+ (kernel) 2001+ 2008+ 2003+ 2008+

Önemli not: Proxmox VE'nin hipervizörü KVM'dir. Proxmox, KVM + LXC + Web GUI + cluster yönetim + Ceph entegrasyonunu tek paket halinde sunar. Yani "Proxmox kullanıyorum" demek aslında "KVM kullanıyorum + Proxmox yönetim katmanı" anlamına gelir.

oVirt (Red Hat Virtualization upstream'i) kurumsal KVM yönetim platformudur: SPM (Storage Pool Manager), HA, live migration, web portal, REST API ile büyük ortamlar için tasarlanmıştır.

Buyukweb VDS Altyapısında KVM

Buyukweb'in VDS sunucu altyapısı KVM üzerine kuruludur. Tercih nedenleri:

  • Tam izolasyon: sVirt + IOMMU + dedicated vCPU tahsisi ile müşteriler arası hipervizör seviyesinde izolasyon.
  • Root erişim: Müşteri kendi kernel, kendi paket yığınını kurar; cPanel paylaşımlı modelden tamamen farklı tam yönetim özgürlüğü.
  • Garanti edilmiş kaynak: vCPU, RAM, NVMe disk her VM'e tahsis edilmiştir. Oversubscription dürüstlüğü ile makul değerler tutulur.
  • virtio paravirt: NVMe SSD IOPS'u virtio-blk ile guest'e taşınır; ağ tarafında virtio-net ile gigabit-class throughput.
  • Bursa Pendc Tier 3 datacenter: Yedekli elektrik, soğutma, ağ; KVM live migration imkanıyla bakım operasyonlarında VM'ler kesintisiz taşınır.
  • cloud-init desteği: Paket karşılaştırma sayfasındaki tüm VDS paketlerinde modern Linux imajları cloud-init ile otomatik provision edilebilir.
  • Web konsol: SSH erişimi kapanırsa müşteri panelinden tarayıcı üzerinden VM konsoluna erişip kurtarma yapılabilir — virsh console benzeri out-of-band kanal.

E5V4 VDS paketleri Intel Xeon E5-v4 (Broadwell-EP) işlemcili sunucularda barındırılır; AES-NI, AVX2, VT-x + EPT desteği ile KVM'in tüm modern özellikleri kullanılabilir.

Nested KVM — Müşteri Tarafında

Buyukweb VDS müşterileri kendi VM'i içinde başka bir KVM ortamı kurmak isteyebilir mi? Teknik olarak nested sunucu paketlerinde VT-x geçişi açıktır; standart E5V4 VDS paketlerinde nested kullanım performans baskısı yarattığı için sınırlandırılmıştır. Lab/eğitim/öğrenme amaçlı KVM senaryoları için Nested VDS doğru seçenektir; üretim iş yükü VM içinde sanallaştırma yerine ayrı VDS olarak konumlandırılmalıdır.

Sorun Giderme

"Could not access KVM kernel module"

/dev/kvm üzerinde izin sorunu. Kullanıcı kvm grubunda olmalıdır:

ls -l /dev/kvm
# crw-rw---- 1 root kvm

groups | grep kvm
# eksikse:
sudo usermod -aG kvm $USER
# logout / login

Windows Guest Yavaş Disk I/O

Sebebi muhtemelen virtio-blk yerine emülasyon IDE/SATA kullanılıyor. Fedora'nın virtio-win.iso'sundan virtio driver yüklenmeli, disk virtio-scsi bus'a alınmalıdır.

Bridge Network Çalışmıyor

# IP forward kontrol
sysctl net.ipv4.ip_forward
# 1 olmalı

# Geçici
sudo sysctl -w net.ipv4.ip_forward=1
# Kalıcı
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-kvm.conf

virbr0 köprüsünde iptables MASQUERADE kuralları doğrulanmalı.

GPU Passthrough Hatası

IOMMU aktif değil veya cihaz IOMMU grubu paylaşılıyor. Kernel cmdline'a intel_iommu=on iommu=pt eklenip reboot edilmelidir. Aynı IOMMU grubundaki tüm cihazların birlikte passthrough edilmesi gerekir.

VM Boot Etmiyor — "qemu-kvm: KVM not supported"

Host CPU'da VT-x/AMD-V kapalı (BIOS) veya KVM modülü yüklü değil:

grep -E 'vmx|svm' /proc/cpuinfo
# çıktı yoksa BIOS'tan VT-x / AMD-V aktif edilmeli

Sık Sorulan Sorular

KVM ve QEMU arasındaki fark nedir?

KVM, Linux kernel'ı bir hipervizöre dönüştüren kernel modülüdür; CPU sanallaştırma + bellek yönetimini ele alır. QEMU ise userspace bir program olarak çevre birim donanımı (disk denetleyici, NIC, chipset, BIOS) emüle eder. qemu-kvm paketi, QEMU'nun KVM hızlandırması ile derlenmiş halidir. İkisi birlikte çalışarak tam bir sanallaştırma yığını oluşturur.

libvirt yerine doğrudan QEMU komut satırı yeterli mi?

Tek bir test VM için evet. Üretimde değil: libvirt, XML domain tanımı, virsh CLI, snapshot yönetimi, ağ ve depolama soyutlamaları, REST API ve grafik yönetim araçları (virt-manager) gibi onlarca özelliği bir arada sunar. Çıplak QEMU komutu, libvirt'in tek bir komutla yaptığını 20-30 parametrelik komut satırlarıyla yönetmenizi gerektirir.

KVM Windows guest'leri destekliyor mu?

Evet. Windows 7'den Windows Server 2022'ye kadar tüm modern Windows sürümleri KVM altında çalışır. Sürücü tarafında Fedora'nın virtio-win.iso'su kullanılarak virtio-net, virtio-scsi, virtio-balloon, virtio-rng driver'ları yüklenir; aksi takdirde tam emülasyon kullanılır ve performans %20-30 kayıp yaşar. Buyukweb VDS paketlerinde Windows Server kurulumu için bu paravirt sürücü desteği ile başlangıç imajları hazır gelir.

KVM'de canlı yedekleme (live backup) nasıl yapılır?

qemu-guest-agent guest içinde çalışıyorsa, libvirt virsh dompmsuspend --target disk veya snapshot tabanlı yaklaşımlarla dosya sistemini bir anlığına dondurup tutarlı bir disk imajı alabilirsiniz. Yaygın akış: snapshot oluştur → qemu-img convert ile snapshot diski yedek depoya kopyala → snapshot'ı merge et. Üretim ortamlarında bu zinciri otomatize eden araçlar (virt-backup, bareos, borgbackup) kullanılır.

KVM Type 1 mi Type 2 mi?

Tartışmalı bir sınıflandırma. Klasik kitap tanımıyla Type 2'dir (Linux host OS üzerinde modül olarak çalışır). Performans karakteristikleri ise Type 1'dir; çünkü Linux kernel zaten doğrudan donanım üzerinde çalışır, KVM modülü kernel'in bir uzantısıdır. Pratik karşılaştırmalarda KVM, VMware ESXi ve Hyper-V ile aynı performans sınıfında değerlendirilir. Bazı kaynaklar bu hibrit durumu "Type 1.5" olarak nitelendirir.


KVM, modern Linux-tabanlı sanallaştırma altyapısının fiili standardıdır. Açık kaynak doğası, geniş guest OS desteği, virtio paravirt performansı, VFIO/SR-IOV passthrough esnekliği ve libvirt yönetim ekosistemi ile hem küçük lab senaryolarında hem de hyperscale bulut platformlarında kendine yer bulur. Buyukweb VDS müşterilerine sunulan root erişim + garanti edilmiş kaynak + NVMe SSD + Bursa Pendc Tier 3 datacenter kombinasyonu, KVM hipervizörünün özelliklerinden tam olarak yararlanır. Sanallaştırma çözümleri ile ilgili sorularınız için 0850 302 60 70 numaralı destek hattımız 7/24 hizmetinizdedir.

İlgili Büyükweb Hizmetleri

Türkiye Tier 3 veri merkezinde KVM tabanlı VDS ve özel paketler:

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

VDS & VPS Rehberi İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#kvm sanallaştırma#kvm vds#hypervisor#tam sanallaştırma#vds teknoloji#linux kvm#sanal makine

Bu yazıyı paylaş